hook某聊天软件lab
# 起因是在学安卓逆向,而且自己水平太低,打算练练手。恰巧某友的校内 lab 做了类似的东西,羡慕,遂打算动手尝试复现
# 一、某绿色软件防撤回
首先搜索相关字串 revoke
,找到一个 RevokeMsgEvent
,看起来很像,然后翻找代码,发现了这个 listener 用于接收一个撤回消息事件
#
观察这里的 callback 函数,先赋值到一个叫做 revokeMsgEvent2
的 class 上(什么鬼命名… 但是看起来可能挺重要的,marked 一下)
接着合法性检测,不需要管
p0.D 的声明如下
猜测这里是通知一栏,将原通知的属性修改为已撤回的属性,两者参数 string 声明如下:
不好懂,接着往下看
可以明确的是这里的 class h 是和撤回相关操作的类,结合下面的调用,猜测这里就是集中处理撤回用的函数(对本地数据库进行了一些操作与删除),查看一下其声明,均是 revoke 的相关操作,那合理来说不会影响正常的流程,直接 hook 就行。
这里试一下 frida
脚本 hook 的操作。
首先是这里只有 arm 的包,暂时没有物理机做测试,可以用的方案有三个:AS、qemu、商业模拟器
AS | qemu | 商业模拟器 |
---|---|---|
开发必备 | 比较折腾,但是稍微比 AS 效率好一点 | 运行比较流畅,但是版本选择有限,而且还有很多版本和 hyperV 犯冲,选择更加有限 |
这里选择先用 AS 尝试了一下,配置如下(一点点尝试可以运行起来的 arm 架构):
巨慢无比,还不支持 android studio 的一些便携操作,结果和绿色软件的 so 还不兼容… 麻了…
尝试使用 mumuX(亲测只有 mumux 在本机可以和 WSL2 共存,其他声称支持 hyperV 的都会出问题,待修复),会被检测环境,来尝试配一下 qemu
疑似不太行,毕竟 AS 也是基于 qemu 的,该卡照样卡(据说 mac 上用 as 模拟 android 非常流畅…)
然后发现微软自家的 vs 有安卓模拟器,那来尝试一下下
# - to be continue
# 二、某运动软件广告消除以及强制更新破解
# 之前队里一直有跌说加了壳搞不了,但是感觉好像么有点机会,遂来看看,这里是用的一个旧版本,好像对 root 的检测没那么严格,但是也能用,后面有空再调一个新版本的
通过搜索引擎可以找到一个文档,开屏广告 - Android 集成文档 - 开发测试 - 穿山甲广告平台 (csjplatform.com),这个 app 的部分广告大概就是基于这个开发的
大概定位到这个类上,是广告加载用的类
#
合理来说把这里 hook 一下
就能消掉大部分和 ad 相关的事件了
但是接着看下去就感觉事情不对头了,这里的 com.fighter.wrapper
疑似只是一个 ad 的处理方法,仔细看左边的包还有一万个不同公司的 ad… 破软件没啥功能,集成的广告不少
而且后面很多广告用的不是这个方法,那就是不能在这层 hook 了,会累死自己,最好的解决方法还是在调用这 n 个广告类前就掐掉源头
可以搜索发现 com.zjwh
应该是这软件自己的包,命名做的手动混淆,全都是 oO0 啥的…
这里发现了反虚拟环境和反 hook 的操作,那看来后面有点点不好整的
另外,可以手动调试发现,apk 启动的时候会与 server 交互获取应用更新信息,然后触发强制更新,交互方法疑似使用的 okhttp
, 但是 zjwh 包进行了混淆,与服务器也都用的 okhttp 交互,需要一定工作量找到
进度记录:这里仔细找引用和具体的实现方式
检测 xposed 框架是否存在的方法,也需要 hook 掉
这个包看起来是比较重要的,下面还有检测攻击等等函数:
这个包的源码可以找到一个很类似的(虽然只有部分):
DRiskNativeTool.java - 得物.apk 源代码分析 - 摸瓜 (mogua.co)
然后顺着搜,可以找到 iJiami - Guarding the Smart World | mobile information security service provider 这家公司,专门做安全的,这些安全相关的包就是它家做的了
#
到这里就要考虑放弃了,毕竟是商业级的加固,就算级别不高,破解再怎么说也要不小的工程量…