一、目标
今天的目标是某影评书评社区App的 _sig 签名分析,本次的教程比较简单,主要是巩固一下大家对 objection 用法的掌握,同时体会一下objection在快速定位上的优势。
二、步骤
Base64
这次的签名和以前有点不一样,看上去很像Base64,那就先试试Hook Base64吧
var Base64Class = Java.use("android.util.Base64"); Base64Class.encodeToString.overload("[B", "int").implementation = function(a,b){ var rc = this.encodeToString(a,b); console.log(">>> Base64 " + rc); if(rc.length < 30){ var stack = threadinstance.currentThread().getStackTrace(); console.log("Rc Full call stack:" + Where(stack)); } return rc; }
为什么长度 小于30的时候才打印堆栈信息?
因为App中可能做Base64的操作有很多处,我掐指一算,长度小于30的时候正好可以打印出来_sig签名计算的位置(我刚数了一下_sig签名是28位 :)。
太棒了, 很快就定位到了 com.xxx.frodo.utils.crypto.HMACHash1.a 和 com.xxx.frodo.network.ApiSignatureHelper.a
直接hook 它应该就能找到结果了, 收工……
李老板: 慢着。我们不是说好要玩 objection 的吗? 我xx都脱了,你给我讲Base64 ?
奋飞: 好像是这么说的。导演,把前面剪掉。我们假装失忆。重新来一遍
Objection
唉呀,这个_sig签名是在哪做的呢? 我们先上 Jadx 搜一下字符串吧
我去,200多个结果,一个一个去看得累死人。 我们加个 " 搜一下 "_sig
这下好多了,只有几个结果了,这个和 _ts 在一起的结果很眼熟,我们点进去看看
我怀疑 这个 ApiSignatureHelper.a 有嫌疑, 祭出法宝 Objection
Objection 三部曲
1、 objection -g com.xxx.frodo explore 注入目标进程
2、 android hooking watch class 'com.xxx.frodo.network.ApiSignatureHelper' 跟踪嫌疑的类
3、 android hooking watch class_method
'com.xxx.frodo.network.ApiSignatureHelper.a' --dump-args --dump-return 定位嫌疑函数之后,检查他的入参和返回值
结果就是它了,入参是 3个字符串, 返回值就是 _sig 和 _ts
三、总结
大胆假设,细心求证, Objection就是定位的好助手。
葫芦娃的 Wallbreaker 插件也是好东西,在脱不了壳的时候,用来分析类结构的指路明灯。下次有机会再介绍
解释永远是多余的:懂你的人不需要,不懂你的人更不需要。
TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。
关注微信公众号:奋飞安全,最新技术干货实时推送