一、目标
今天的目标是某影评书评社区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 三部曲
- objection -g com.xxx.frodo explore 注入目标进程
- android hooking watch class 'com.xxx.frodo.network.ApiSignatureHelper' 跟踪嫌疑的类
- android hooking watch class_method 'com.xxx.frodo.network.ApiSignatureHelper.a' --dump-args --dump-return 定位嫌疑函数之后,检查他的入参和返回值

结果就是它了,入参是 3个字符串, 返回值就是 _sig 和 _ts
三、总结
大胆假设,细心求证, Objection就是定位的好助手。
葫芦娃的 Wallbreaker 插件也是好东西,在脱不了壳的时候,用来分析类结构的指路明灯。下次有机会再介绍

解释永远是多余的:懂你的人不需要,不懂你的人更不需要。

关注微信公众号,最新技术干货实时推送
