Android-H5app逆向总结
H5app逆向总结
H5app是在app里使用webview组件,相当于在app里植入web页面,通过js代码进行操作。
对于这类app,一般需要使用android sdk中自带的工具:android_sdk\tools\bin\uiautomatorviewer.bat
可以分析当前app页面的组件,一般最外层的就是webview组件。
H5app一般分为几种:
纯js的,就是加密和发包都是在js代码里的。
js和java混合的,就是js中加密java发包或者java加密js发包的,一般需要js和java的相互调用。
纯java的,就是加密和发包都是在java代码里的,也需要js和java的相互调用。
分析方法
1、纯js
可以在chrome://inspect
(需挂vpn)来远程调试app,不过app一般默认是不允许webview_debug的,所以chrome默认无法调试,需要先使用frida hook掉相关函数设置debug模式为true再进行抓包调试。
hook代码一般为:(当然有的时候还是需要jadx分析他限制调试的地方,不一定完全是这个)
android.webkit.WebView.$init
android.webkit.WebView.setWebContentsDebuggingEnabled
- 在这俩个的
implemation
里通过this.setWebContentsDebuggingEnabled(true)
即可。
通过hook构造函数和set…函数可以启用远程浏览器调试。
之后使用chrome进行抓包调试,找到login的js代码下断点跟进。
2、js和java混合
也是需要先执行上边的过程,不过在断点跟进的时候,如果是js调用的java的代码,是没法继续跟进的,一般可以通过以下代码导入java里的类,然后调用java里的函数来实现加密或发包。
1 | var modu = api.require('class_name') |
这时没法继续在浏览器js中继续跟进了,就需要到jadx里搜索该类和函数继续分析java代码了。
3、uni-app
uni-app是一款支持多端原生、小程序、Web的开发框架。这种一般浏览器js抓不到包,不过这类产品一般在assets\apps\_UNI_xxxx\www
下会有js代码,主要逻辑一般会在app-service.js里,要想实现类似动态调试来查看变量值得效果,可以修改该js文件在里边加入log来输出。
uni-app的发包代码可以搜索uni.request
1 | //这是uni提供的导入其他类的接口,可以导入android里的Log类 |
修改完js后,删除META-INF后使用apksigned重签名(当然这里注意是否有签名校验)。
安装后再次运行即可打印出变量i的内容,实现动调效果。