Total Pageviews

Friday, 17 February 2012

如何在android平台运行scholarzhang

1、编译(可以不看)

scholarzhang要求ipset版本>=4.2
ipset的版本4.2则要求iptables版本>=1.4.4
android自己的iptables是1.3.7,所以有必要升级iptables,并且加入scholarzhang的模块

去android.com下载NDK,其实aosp的源码树更好,不过就是大了点
然后NDK的项目已经准备好,下载下面的附件
主要是Android.mk,部分代码也有改动,有兴趣的自己去diff一下看看.


然后就是ipset和scholarzhang的内核模块了

准备好内核源代码树,可以从developer.htc.com下载对应的型号
准备交叉编译器,这里可以用SDK的那个,但是各种设置过于繁杂
因为是编译内核模块,与现有的include和lib其实没什么关系,所以这里可以随便找个合适的
比如codesourcery的,或者angstrom的
以codesourcery为例
  1. export PATH=$PATH:/opt/codesourcery/arm-2010q1/bin
复制代码

ipset内核模块编译
修改ipset-4.2/Makefile,CC改成arm-none-linux-gnueabi-gcc
  1. KERNEL_DIR=<内核源代码树> make
复制代码

scholarzhang内核模块编译
  1. cd west-chamber
  2. ./autogen.sh
  3. ./configure --target=arm-none-linux-gnueabi --with-kbuild=<内核源代码树>
  4. make
复制代码

2、安装
准备好上面编译得到的所有内核模块
这些一般需要放在/system/lib/modules
下载下面现成的ipset和iptable


这两个放到/system/xbin,并且删除以前有的iptables
3、使用
ipset用到了mktmp,所以要求/tmp存在
  1. mkdir -p /tmp
  2. mount -t tmpfs tmpfs /tmp
复制代码

永久性的解决方案是修改boot.img中的init.rc启动脚本
如果modprobe报错找不到模块
  1. for f in /system/lib/modules/*.ko; do insmod $f; done
复制代码

出错的原因是android并未提供modprobe这个小工具,第三方ROM中包含的modprobe不一定会在/system/lib/modules下搜寻模块
然后其他的就完全参照scholarzhang的wiki了

4、结果
在G4上进行的测试
DNS反污染工作正常,测试可以得到twitter.com和youtube.com的正确地址
TCP连接混淆似乎因为路由器问题,一直无法成功,但查看日志发现,确实触发了丢弃RESET包的规则,相信在合适的环境中应该能够达到效果

因为需要编译内核模块,所以这部分不可以通用,不同的型号需要分别编译,所以暂时没有提供(需要和boot.img配合使用)。
from http://bbs.anzhi.com/thread-7166-1-1.html

No comments:

Post a Comment