最近想学习App测试之道,但我常用的是台式机(没有配无线网卡),所以“放在一个wifi局域网下开代理”这种最简单方便的方法无法使用。于是我想到了用安卓模拟器的方式来测试,经过一番翻贴后我选择了雷电模拟器,但在实际安装burpsuite证书时碰到点麻烦。
我在看雪上找到一篇看着很管用的帖子,戳→https://bbs.pediy.com/thread-252184.htm。里面介绍了利用frida的方法,这篇帖子写的较简洁,我自己在实践时踩了不少坑。主要记录以下两点:
frida工具在启动时报错,即:frida-ps -U报各种错误
原因:python版本和frida不匹配,如果使用pip安装的frida和frida-tools,它会默认安装较新的版本,此时如果python版本太旧,就会出问题。我之前的环境是py3.6.5,frida是12.7.24,后来改成py3.7.5就过了。
- AndroidKiller不会用o(╯□╰)o
大致介绍下用法:
- 启动雷电模拟器实例,并用androidkiller自带的adb.exe连接adb.exe connect 127.0.0.1:5357
- 我这个版本的雷电模拟器监听的5357端口,和一些帖子里写的都不一样,其实用netstat挨个试试也能找到
- 建立连接后,可以在“Android”工具栏看到你要的各种功能:
如果你想测试帖子中的方法,我这里也算帮忙排雷了。
我自己在完成以上步骤后,进入模拟器设置->安全->从SD卡安装目录里后发现下载好的burpsuite证书依据无法安装,心累~~
前车之鉴二
本着一颗瞎折腾的心,我又百度了一些别的方法。在v2ex上看到了这样一篇,戳→https://www.v2ex.com/t/528852,里面介绍了三种方法。一开始我试了xposed大法,因为这软件早有耳闻哈,然后一不小心又踩到了坑。在装完justtrustme模块后,我发现xposed总是无法启动。后来意识到可能和安卓版本有关,于是我在网上找到了这张图:
对照着图,我卸载了之前的xposed 89,重新安装了87版。这回正常了,怀着激动的心情,我打开了app打算瞎测一番,坑爹的事情发生了——键盘无法输入,软键盘也不好使。我回过头想加一下burp的证书,发现依旧无法添加。WTF???怎么跟说好的不一样!
后车之师
再次受挫后,我又尝试起了帖子中的第二种方法——直接将burp证书导入系统的根信任证书目录中。听上去够狠够绝,应该会管用。原文如下:
系统证书的目录是:/system/etc/security/cacerts/
每个证书的命名规则为:<Certificate_Hash>.<Number>
Certificate_Hash 表示证书文件的 hash 值,Number 是为了防止证书文件的 hash 值一致而增加的后缀;
证书的 hash 值可以由命令计算出来,在终端输入 openssl x509 -subject_hash_old -in <Certificate_File>;
其中 Certificate_File 为证书路径,将证书重命名为 hash.0 放入系统证书目录,之后你就可以正常抓包了。
我将burp的证书导出并放在了一台ubuntu的vps中,输入了文中的命令,终端给了我一条这样的报错:
root@android-test:~# openssl x509 -subject_hash_old -in cacert.der
unable to load certificate
139914021783192:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:701:Expecting: TRUSTED CERTIFICATE
我也没搞懂为什么会这样,心想着指明证书类型试试看,于是我又敲了以下命令:
root@android-test:~# openssl x509 -subject_hash_old -in cacert.der -inform DER
9a5ba575
-----BEGIN CERTIFICATE-----
**** SOME base64 code ****
-----END CERTIFICATE-----
hash这就出来了~~看来直觉debug还是有用的。于是按照帖子中说的,我用9a5ba575.0重命名了证书并放到了/system/etc/security/cacerts/目录下。重启模拟器后,我设置网络代理为自己PC上的burpsuite:
在模拟器浏览器输入https://www.baidu.com后我终于如愿看到了明文的https数据:
帖子最后还有用VirtualApp的第三种方法,我没有试,以后如果碰到SSL Pinning可能还会翻出来试试,先马克住再说
后记
最近发现雷电更新了新版本,新版本的文件系统变成了read-Only权限,直接移动文件进去会提示错误。而chmod等命令皆被禁止,后来发现这种情况下重新挂载一下根目录就行:
# 进入adb命令行模式
adb shell
mount -o remount rw /