月度归档:2011年10月

slimv = slime on vim

公认的Lisp最佳开发环境是Emacs + slime + sbcl。已经被vim深度忽悠住了的人怎么办?

还好有slime对vim的移植slimv,这个软件的开发也一直在持续。

最好的教程在这里:

http://kovisoft.bitbucket.org/tutorial.html

http://kovisoft.bitbucket.org/tutorial2.html

http://kovisoft.bitbucket.org/tutorial3.html

不少功能是基于gvim的,但最重要的那些都可以在vim下工作。

这些玩意儿……果然是有信仰的啊。

Toshiba AC100 Ubuntu安装Flash Player

Ubuntu为东芝AC100提供了专门的版本,但其中浏览器的Flash Player插件无法正常工作。这里我给出一种已经测试过了的方法来解决这个问题。我的环境是:Ubuntu 11.10, 10月12日编译版,xfce桌面。

1. nVidia为tegra-2产品发布了Linux下的驱动包。一些人将其修改为可用于AC100的包。可以从下面的地址下载并安装:

https://launchpad.net/~ac100/+archive/ppa/+files/nvidia-tegra_12-0ubuntu1~alpha1monson6_armel.deb

2. 这个驱动程序现在还有点小bug。在默认设置的xfce下,窗口边缘会显示不正常。解决方法是:选择“配置管理器”->“窗口微调”->“合成”,取消掉“允许显示合成”前面的勾,然后重启X。(抱歉我用的英文版系统,不知道这几个词怎么翻译的,大家看着英文来的吧)

3. 驱动工作正常后,下载下面的预编译Flash Player库:

http://kotelett.no/ac100/phh/Android2.2/libflashplayer.so

将其拷贝至浏览器的插件目录。Firefox是/usr/lib/mozilla/plugins/,Chromium是~/.config/chromium/plugins/。

4. 用浏览器打开’about:plugins’,可以看到flashplayer已经在其中了。这时候它已经工作了。

5. Chromium有一个安全检查机制,不允许过期插件运行。在浏览包含flash的页面时总会弹出来一个警告信息。你可以通过chromium-browser –allow-outdated-plugins来无视它……具体信息可以看:

http://www.google.com/support/chrome/bin/answer.py?answer=1181003

非常感谢freenode irc服务器#ac100频道xranby和ogra_的帮忙。此外,http://ac100.grandou.net/也是一个很有用的页面。

Android提权代码zergRush分析

一、背景和原理

Revolutionary工具开发小组在2011年10月发布了一个在Android 2.2和2.3上获得root权限的方法[1],并公布了漏洞利用代码zergRush.c[2]。tomken_zhang已经在其博客上发表了两篇文章[3][4]对其分析。本文做进一步梳理和补充。

产生漏洞的主要原因是:具有root权限的vold进程使用了libsysutils.so库,该库的一个函数存在栈溢出,因此可以在root权限执行输入的shellcode。

存在漏洞的函数为FrameworkListener::dispatchCommand,位于源码的\system\core\libsysutils\src\FrameworkListener.cpp中,其中的局部变量argv为固定大小的指针数组,当输入参数的数量超过其大小时,会越界写入栈中。

zergRush.c成功地利用了这一漏洞,并进一步:

1、在/data/local/tmp/下增加一个置了S位的shell;

2、使Android中后续启动的adb进程以root权限运行。

其中第二步的方法是:adb进程最初以root运行,之后调用setuid()降低权限[5]。降权之前,会判断系统属性ro.kernel.qemu,如果该属性位1,则不降权。

继续阅读

android编译工具agcc

在zergRush.c中,作者提到使用agcc工具编译。这个工具是一个perl脚本,下载地址是:

http://plausible.org/andy/agcc

使用的方法:

1、下载android源码并编译一次,不要清理编译结果(即不要make clean);

2、修改agcc原来第37行$GCC的值为arm-eabi-gcc的绝对路径,例如:

/home/claud/android-src/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin/arm-eabi-gcc

3、修改agcc原来第39行$DROID的值为源码的绝对路径,例如:

/home/claud/android-src

4、修改agcc第177行@cmd的值为arm-eabi-gcc的绝对路径,与上面$GCC相同;

5、第117行和第132行有两个对版本号的硬编码,改成自己使用的,例如上面的话,是4.3.1。

然后把这个脚本当成gcc使用就可以了,默认的包含路径、链接路径、链接库等,都已经配置好了。从此再也不需要用交叉编译器静态链接了,以及……可以调用完整的系统API了。

Ubuntu ARM版使用Debian的源安装软件

Ubuntu 11.10发布了ARM版,今天在东芝AC100上装上了这个专门的版本,一切正常,驱动非常完美。

目前主要的问题是Ubuntu的ARM源中预编译的软件太少,比如clisp就没有。因为debian支持arm已经很多年了,所以考虑使用debian的源。

配置的步骤如下:

1. 导入debian的公钥环

#wget http://ftp-master.debian.org/keys/archive-key-6.0.asc
#gpg --import archive-key-6.0.asc
#gpg --fingerprint 473041FA
#gpg --armor --export 473041FA | sudo apt-key add -

2. 添加debian源
#sudo vim /etc/apt/sources.list
在最后添加

deb http://http.us.debian.org/debian testing main non-free contrib
deb-src http://http.us.debian.org/debian testing main

3. 更新数据库
#sudo apt-get clean
#sudo apt-get update

现在就可以安装需要的软件了。需要注意的是这种方法并不能保证系统的稳定性。