首页
社区
课程
招聘
[原创]Uni-App逆向分析
发表于: 2021-6-11 21:04 16309

[原创]Uni-App逆向分析

2021-6-11 21:04
16309

一般App数据加密分为Java层跟So层,但对于H5App来讲的话,它是界面里嵌入一个WebView,在WebView里显示网页,在网页里面用JS加密,在通过Java和JS交互,用Java提交数据或者直接用网页提交数据两种方式

可以利用uiautomatorviewer.bat 来查看界面信息

image-20210611180341592

大多数H5App的JS文件都存放在assets目录,少部分会存在res目录,存放在这两个地方获取比较方便,放在别的地方比如classes.dex的话获取比较麻烦,并且对classes.dex还要做一个处理

还有一个点就是JS文件是可以加密的,只要在加载到WebView之前进行一个解密就行

远程调试需要满足三个条件:

image-20210611190514115

setWebContentsDebuggingEnabled 三个检测点:

image-20210611181930189

PS: 由于手机端 WebView 版本不一致,所以第一次运行需要从谷歌站点下载一系列的离线包,否者打开 DevTools 就是空白界面 (科学上网会自动下载)

Android远程调试WebView的方法

Android 设备WebView远程调试

inspect 开始调试 , 切换到 Network 选项卡抓取数据 如果有抓取到数据也为网页发包 否则就是Java层发包 这个app是网页发包的

image-20210611191516246

抓到的数据包 函数调用栈 接下来就是Js逆向分析 断点调试一顿分析就完事了

image-20210611191903160

image-20210611192104068

这种大概率就是JS加密 然后Java发包的 就只能找参数静态分析了

解压App一顿分析 app-services.js 定位关键函数

image-20210611193327565

image-20210611193544533

修改为下面代码保存Js文件 然后覆盖进apk文件里 功能->APK签名->安装 再抓包

跟之前的URL对比 就可以查看我们提交的参数

image-20210611194933472

image-20210611195023550

image-20210611200404944

这串数据提交还没有包含 signature 那就继续查找下一个关键点 全局搜索signature 查找关键函数 最后抓包对比

image-20210611201135413

image-20210611201835713

关键词 uni.request

image-20210611202633286

最后总结一下: Network 能抓包的话可以动态调式 分析起来方便一点 不然的话就只能 静态分析 + 猜测 修改H5代码 签名App抓包来分析

第一次发帖 记录一下自己的学习过程,有不对的地方还请大佬指正

 
 
setWebContentsDebuggingEnabled    // 是否允许调试
// shouldInterceptRequest、WebResourceResponse
public WebResourceResponse shouldInterceptRequest(WebView p0,String p1)    // 拦截器 jadx会反编译不出来建议用jeb或者gda 里面可以对js文件做一些处理
WebResourceResponse shouldInterceptRequest(WebView webView, WebResourceRequest webResourceRequest)
WebResourceResponse shouldInterceptRequest(WebView webView, String str)
setWebContentsDebuggingEnabled    // 是否允许调试
// shouldInterceptRequest、WebResourceResponse
public WebResourceResponse shouldInterceptRequest(WebView p0,String p1)    // 拦截器 jadx会反编译不出来建议用jeb或者gda 里面可以对js文件做一些处理
WebResourceResponse shouldInterceptRequest(WebView webView, WebResourceRequest webResourceRequest)
WebResourceResponse shouldInterceptRequest(WebView webView, String str)
 
 
 
 
 
 
// 提交的数据
appid=quickdogrestful&mobile=139xxxxxxxx&password=a12345678&device_id=863254033385807%2C863254033385815&device_info=MI%206%20Xiaomi&app_version=1.0.3.4&nonce=a&timestamp=1623410323.775&sign=573080b9042317ee8b30ab6411c9b56e
// 提交的数据
appid=quickdogrestful&mobile=139xxxxxxxx&password=a12345678&device_id=863254033385807%2C863254033385815&device_info=MI%206%20Xiaomi&app_version=1.0.3.4&nonce=a&timestamp=1623410323.775&sign=573080b9042317ee8b30ab6411c9b56e
 
// 抓包数据
POST //api/user/login.do HTTP/1.1
user-agent: Mozilla/5.0 (Linux; Android 9; MI 6 Build/PKQ1.190118.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0)
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 138
Host: app168.zhongjianlepai.com
Connection: Keep-Alive
Accept-Encoding: gzip
Cookie: aliyungf_tc=b05125519e32b58949efe39018fbd902f0c0c052f4429ff19bd0ba4172416ff6; JSESSIONID=A8B840C693E48003233EE93EED504656; eiis-sessionid=3f17f8ce-4735-4670-ad2f-6036da767e52
 
phoneNum=139xxxxxxxx&pwd=a12345678&isTakecookie=false&appVersion=1.2.2&timestamps=1623410775656&signature=21549323b5116195020eee9808de314b
// 抓包数据
POST //api/user/login.do HTTP/1.1
user-agent: Mozilla/5.0 (Linux; Android 9; MI 6 Build/PKQ1.190118.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 uni-app Html5Plus/1.0 (Immersed/24.0)

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-6-11 21:08 被.KK编辑 ,原因:
收藏
免费 6
支持
分享
最新回复 (4)
雪    币: 189
活跃值: (1625)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
加密js的部分没讲到耶 那个才是难点
2021-6-11 23:55
0
雪    币: 298
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
你就是诺诺大佬嘛
2021-6-12 02:43
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
楼主,现在有办法hook来替换js吗
2024-4-6 22:30
0
雪    币: 3535
活跃值: (31011)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2024-4-7 09:22
1
游客
登录 | 注册 方可回帖
返回
//