MobSF框架简要分析(下)

上篇讲到动态调试部分经久失修,本文介绍如何修好这部分代码。

一、编译一台带xposed的手机

主要思路有三个,编译xposed源码、替换某几个文件、使用第三方recovery来管理并且刷入zip。详情看我的另一篇文章。

二、安装MobSF提供的大量apk

这些主要就是xposed提供的一些插件和MobSF开发者自己写的工具,位于onDevice 里,其中有个hooks.json 需要adb push 到/data/local/tmp 。

三、配置代理和安装证书(有彩蛋!)

MobSF使用MITM 来保存http流量,需要在手机上挂代理,走PC上的端口,这里介绍一个非常骚的操作,在只有一根USB线的情况下实现。

首先,在Settings-->More-->Tethering & portable hotspot--> USB tethering ,打开开关,这时候在电脑里可以看到多出来的一块网卡,就是手机,二者处于同一网段,例如

PC: 192.168.42.37
Android: 192.168.42.129

此时二者是可以相互ping 通的,而且这个IP在短时间内不会变。

这时候,手机随便连接一个wifi,修改代理为PC上开的那个代理,再关掉wifi。注意,此时wifi虽然是关闭的,但依然是走的这个代理(别问我为什么,就这么神奇) 这时候不要乱执行adb 的重启命令,否则会让连接好的局域网给断掉,方法也很简单,再点一下按钮就行了。

还有个很奇葩的东西,这时候用adb tcpip 是可以执行成果的,但执行完后会自动关闭USB热点共享,解决方法也很简单,再手动点一下按钮。adb connec t之后就可以在adb devices 里看到两台设备了(其实是同一台)。

嗯,这时候就可以让流量全部走PC上的代理了;安装证书不需要手动操作,MobSF的代码里是有的。

四、修改代码

主要修改带有adb命令的代码,首先把MobSF里老旧的adb工具删掉或者覆盖掉,使用本机最常见的那个,因为版本不同的话,会导致adb重启到自己对应的版本。

第一部分:动态调试支持三种模式,区分它们的方法主要是android_dyn_shared.py 里的get_identifier ,这个函数的返回值作为adb -s 的参数来区分设备,而我们用的是真机,所以只要让它返回我们使用的手机身份标识即可。

第二部分:涉及到/system 分区的操作。system分区本身在挂载时是只读,需要用adb remount 来修改掉,让这种操作正常执行。涉及到带有su 的,因为aosp 里的su 和SuperSU 里的su 是不一样的,需要全部修改掉,再adb root 方便执行。

第三部分:代码里可能为了稳定,会调用adb start-server 和adb kill-server 等操作,但这些操作会影响到我们通过USB建立的局域网,也需要删掉。

第四部分:ScreenCast这个apk使用网络与PC进行传输,这个地方的IP和port需要手动修改,否则页面里是不显示手机截图的。这段代码也比较蠢,就是隔一段时间截图一次,显示在网页上。

五、结束时的处理

点击结束动态调试后,会主动打包几个文件,logcat、截图和网络流量,一般是没有问题的,只遇到过/data/data/package 没有被打包,可能是权限问题,所以也没有深究。

总结:修起来不是很费劲,哪里报错修哪里。。。