样本:先先呗 https://sj.qq.com/myapp/detail.htm?apkName=cn.com.fotic.xwapp 腾讯加固
特点:
- 1、使用proxyDroid实现抓包
- 2、是weex开发的
一、开始逆向
1、抓包
使用proxyDroid+hook ssl pinning实现抓包
image.png
2、hook
image.png
image.png
到这步就卡主了,但是我发现这个是用weex开发的,我怀疑有可能是在js中做了加密相关的东西,决定先学习一下weex。
二、先学习weex开发
1、学习官方文档
官方文档
跑了起来demo,能大体理解项目结构
对逆向有用的一个点是:weex会通过加载本地或者网络的JS文件来渲染页面。我抓包发现目标app确实也是下载JS了,不过JS是加密的。。
我决定还是学习一下这个框架。不过官方文档属实烂,先看一下第三方文章。
2、看第三方资料
-
Weex 实践总结(vue 技术栈的童鞋跨平台开发首选吗?)
这篇文章提供了一个demo,不过尴尬的是没跑起来。。。
看网友都不推荐weex做跨平台开发,说flutter是下一代,以后可以看看。
image.png 后来参考了这篇老文章,终于跑起了demo。
3、weex运行原理:
- Weex 文件分包打包成单个 JSBundle 文件
- 发布到发包服务器上,通过热更新 push 到用户的客户端,交由【Weex SDK】执行解析
- SDK 中的【JS Framework】执行 Bundle 脚本生成 Virtual DOM
- Virtual DOM 经由各端执行环境【Weex Runtime】解析翻译成执行指令
- 【Native RenderEngine】接收到指令后执行渲染操作,作出渲染出完整的界面
官方配图:
image.png
扩充配图:
image.png
Android项目结构:
image.png
三、结论
hook 日志是一个不错的选择
一个有意思的地方是,app从服务器下载的js是加密的,解密以后存在本地,然后起一个http server。页面加载时,通过这个http server进行render。通过hook能得到对应的js文件。
这个app使用了weex开发页面,http请求需要走java端的IWXHttpAdapter,但是这个函数加密的地方被做了类函数指令抽取。所以暂时无法解决。