本文为看雪论坛优秀文章
看雪论坛作者ID:镜中人24
根据上图设备登记APP的首页,大致可确定设备登记网络请求报文所涉及的字段内容,看到首页我的脑海中也立马想到了3种实现方案:
1、遍历设备列表依次修改对应EditText组件的文本内容,主动触发“提交”按钮的点击事件;
后续的逆向分析过程大致包含6步:
使用“adb shell pm path 包名”定位apk所在路径后,直接用“adb pull”命令将apk文件导出到电脑本地。
拿到apk文件后一股脑安装到脱壳机进行脱壳,之后使用jadx进行反编译。
使用“adb shell dumpsys activity top”可查询当前界面对应的Activity类,可确定首页对应“MainActivity”,使用jadx搜索类名定位并双击跳转。
5、加密逻辑分析
目标APP的加密逻辑还是比较简单的,与加密相关的代码就三张,如下图所示:
现在再分析目标APP的加密逻辑就比较简单了,大致就是如下三步:
继续分析代码可确定目标APP使用了OkHttp框架实现网络通信,并且封装了一个请求函数如下图所示:
其中三个参数分别对应网络请求的url、使用AES密钥加密后的密文、使用RSA公钥加密后的AES密钥,继续跟踪相关参数是如何被使用的。
现在目标APP网络请求所包含的信息(用户信息、设备信息、地理位置信息等)、加密算法、网络请求等核心逻辑均已分析完成,我们便可以通过伪造网络请求数据来实现设备登记了,接下来分享两种好玩的破解方式。
根据前面的网络请求分析可确定,我们只需要取到任一设备对应的message和key即可实现设备登记,接下来便借助目标APP自身来为我们提供需要的数据:
第二步,基于反射机制实现主动调用。之前在分析加密算法逻辑的时候提及到目标APP仅需要三行代码即可生成message及key,那么我们仅需要依赖反射机制对这三行代码进行翻译即可,相关代码如下图:
新建一个新的APP用于发起网络请求,直接将目标APP封装的网络请求相关函数copy过来就可以,自己封装一个NetUtil类用于发起网络请求,如下图所示:
如何批量登记呢?这就用到了前面所记录的每台设备对应的message和key,我么在新APP中通过HashMap对设备列表进行维护:
接下来,只需要封装一个函数doRegister,该函数负责遍历设备列表并发起网络请求,同时对响应报文进行解析,记录成功登记的设备数量,当所有设备登记完成后整理结果。
目前基本功能已经完成,我们可以通过一个按钮的点击来实现doRegister函数的调用,从而完成所有设备的登记。如果能够自动化进行设备的登记,是不是很香?
所谓基于系统闹钟的定时任务,本质就是系统闹钟到达设定的时间后会启动一个新的Activity,我们就可以对该Activity进行Hook,从而跳转至前面自己实现的用于设备登记的APP,之后自动执行doRegister函数完成设备登记,核心Hook代码如下:
前面已经对核心逻辑进行分析,只需要将相关代码复制到新建的APP即可,另外完全可以进行功能增强,比如补充设备列表的维护功能,允许自己手动录入新的设备。
这种方式比较暴力,当然也有一定的局限性。首先,自动化实现起来就不像前面直接Hook系统闹钟那么简单,另外在实现过程中我也忽略了一个小问题。
针对前面提到的问题,固然可以通过修改版本来解决,但是这比较依赖个人的运气了,其实我们可以考虑dex的动态加载,动态加载目标APP的dex文件,从而实现需要的功能即可。至此,大功告成。
最后联想到前段时间爆出来某互联网巨头APP利用系统漏洞提权后伪造DAU、窃取用户信息、攻击竞争对手APP等行为的事件,还是想补充一下:技术本无罪,但是科技向善应该是每一个人都需要遵守的原则,一个人所掌握的专业知识、技能以及工具等应该用来合情合理合法地改善生活、提升幸福感。
看雪ID:镜中人24
https://bbs.kanxue.com/user-home-919715.htm
# 往期推荐
球分享
球点赞
球在看
点击阅读原文查看更多
原文始发于微信公众号(看雪学苑):设备登记APP趣味破解
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论