今天,学员给了我一个app案例,那就写一篇文章来研究一下吧。至于是哪个app这里就不说了。
以下是他用 fiddler 抓到的包。
这里提交的有一个 appOnlyEncrypt 参数是加密的。
然后他开始一顿操作猛如虎:
先跑一遍我课程里讲的xposed自吐算法插件,毫无所获。
那咋办呢?手动逆向吧。又是脱壳,又是反编译,各种搜索,又无所获。
其实这个app确实有壳,脱壳这里就不说了,这里也不需要脱壳。
我们现在的安卓app有很多种类型。比如:
- 用Java开发的
- 内嵌webview组件,界面和业务逻辑代码都是JS
- Unity3D、cocox2d开发的游戏app
- flutter开发的
- React
- 。。。。。。
而要确定一个app是不是H5的app,也很容易。比如这个app
- 提交的数据包中,有一个User-Agent协议头,提交的这个值,明显是一个类似浏览器的协议头
学员小声哔哔:这也没多明显呀。。。
好吧,那上第二种方法 - 安卓SDK中,SDK\tools\bin 这个文件夹下面有一个 uiautomatorviewer.bat ,用它可以来检测一个app界面里面用了什么组件
看到webView组件了,那么很明显这个是一个H5APP了。也就是人家的业务逻辑都是JS写的。那么jadx或者jeb反编译的dex代码里面,当然搜不到你想要的东西。
那怎么办呢?接下去就是我们这篇文章的正题了。
webview远程调试需要满足以下条件:
- 电脑端有一个Chrome浏览器,版本32以上
- 手机 / 模拟器端使用的是原生的WebView,并且版本比电脑端的低
- app中的WebView要设置支持调试
一般情况下, app会把 WebView设置成不可调试,这个时候需要找到相应的限制点,去hook掉
WebView这个类,有个setWebContentsDebuggingEnabled方法,这个方法传 true 进去的时候,就是可调试的。而在hook的时候,还要考虑加固,因为加固的app在hook的时候,需要对ClassLoader处理一下。这里不展开讲这个,因为这个app没有限制调试。
首先,我们拿模拟器中的浏览器来测试一下