现在的位置: 首页 > 综合 > 正文

android抓包应用(基于root权限和tcpdump)

2012年09月17日 ⁄ 综合 ⁄ 共 2196字 ⁄ 字号 评论关闭

需求

先前有些手机应用,想获取接口自动化拿些数据,比如说音乐文件自动下载之类的,或者手机网络游戏上自动化战斗什么的,

有些ID或者会话ID时常变动,老是在连电脑用ADB来抓包太麻烦,就想着做个简单的抓包应用,至于抓到包后如何分析那就是根据不同

应用有不同操作了,这个本文就不提了。

实现

本文题目也提到了,是基于tcpdump来实现,(不基于它还真不知道怎么做了,网络小白一个)
但是目前很多手机本身是没提供这个可执行文件,这是一个问题;
还有就是这个命令需要在root下执行,这是另外一个问题。
解决这两个问题之后,基本就没什么难度了。
首先要说下用adb的方式抓包,如果已了解的可跳过,这个相对来说权限更大,可能写的应用抓不到数据时有个对比会比较清楚发生了什么。
即使在adb下也是需要把tcpdump拷到手机一个可执行分区下的,比如MIUI中的/data/local下可读写可执行。
有些地方看见是remount /system也可以,具体可以自己进到shell中mount看下有哪些可读写分区吧。
没有android tcpdump的请点击下载,可下载一个试试,
拷到对应位置后,手机插上USB,打开调试,进入命令行,执行/data/local/tcpdump -p -vv -s 0 -w /sdcard/capture.pcap
类似命令,具体参数根据具体情况调整即可,(中间是v v啊 不是w,显示更详细信息的,后面个才是w指定存储文件的)
进入这种状态即开始抓包了,su之后记得手机端要求给予权限的。抓包结果存储在/sdcard/capture.pcap下
可以adb pull出来查看。
好了,adb下如果成功了,接下来就利用这个东西来开发自己的应用了。
最底层如何实现主要考虑上面提到的两个问题,那么从第一个问题开始说。
如果你的手机还没有tcpdump功能,那么需要查看下你手机哪个分区可读写
我这里直接选择/data来使用。
由于Android应用没权限直接对该分区读写的,SDCARD又没执行权限,那么这里考虑使用应用下载文件到sdcard之后
使用root命令 cat /sdcard/xxx > /data/local/xxx 拷贝过去,之后删除sdcard文件即可。还需要注意的是拷贝完了要修改文件
权限,一般增加个rx读取执行权限即可。
这个地方也涉及到使用root来执行,这里我只尝试成功过一种方案,不知道正常的android应用需要root执行的时候是不是这种方式,
		Process process = Runtime.getRuntime().exec("su");
		//这个地方要稍微等待会,系统会提示给予root权限,要等待权限给完,再输出下一步
		Thread.sleep(1000);
		//按照正常命令行终端执行su之后会进入一个带#开始的终端
		//这里再尝试用runtime.exec行不通的感觉,也没尝试成功
		//之后就试着获取process的输出流输出命令,记得带上换行符\n
		process.getOutputStream().write(command.getBytes());
		//先别急着关闭输出流,等你不需要用su了再关闭流吧
		//到这里等待会应该会有反应的,可以尝试获取process的错误流或者输入流读取
		//但是这个地方很烦人的是,如果没有输入就被卡住了。。。所以起个线程读吧,或者没必要就不读取了
		process.getErrorStream()
		process.getInputStream()

root执行命令也解决了,剩下的就是来执行tcpdump命令了,参数注意下就行

比如将输出结果保存到文件时,tcpdump有一个缓存区的,大小默认是35567吧,如果没读取到就结束了,整个信息就都没有了
android的tcpdump貌似没有-B参数指定缓存大小,不过可以用-U来指定每一个package读完就写文件
String TCPDUMP_COMMAND = String.format(
			"%1$s -p -vv -U -s 0 -w %2$s\n", tcpdumpFilePath, captureFilePath);

好了,整个应用比较简单,抓包结果输出到文件后,解析这个文件即可。

然后如果有朋友在bluestacks做测试的话会发现有自带的tcpdump工具,
// bluestacks自带tcpdump,用下面的即可
// static String tcpdumpFilePath = "/system/xbin/tcpdump";

介绍得比较零散,有兴趣的直接下代码看哈~
写了个简单的android应用demo丢到google code上了,
svn地址https://my-test-google-svn.googlecode.com/svn/branches/tcpdump
中间有很多参数都没做null判断之类的,按钮点击顺序就是先点root获取root权限后,点开启,就会看有没tcpdump文件
没有的话会下载一个丢到/data/local/下,然后开始执行,刷下网页,弄点流量什么的,之后点停止,关闭抓包即可,文件保存到
/sdcard/capture.pcap了,之后分析就不要点了,个人针对特殊应用写的个分析。

个人android应用开发较少,纯粹好玩,不恰当的地方请留言指点下,thx!
当然这个应用写个shell脚本之类的可能会更简单点,主要看个人需求吧。

抱歉!评论已关闭.