一、目标

一、目标

今天的目标是某影评书评社区App的 _sig 签名分析,本次的教程比较简单,主要是巩固一下大家对 objection 用法的掌握,同时体会一下objection在快速定位上的优势。

main
1:main

二、步骤

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位 :)。

sig1
1:sig1

太棒了, 很快就定位到了 com.xxx.frodo.utils.crypto.HMACHash1.acom.xxx.frodo.network.ApiSignatureHelper.a

直接hook 它应该就能找到结果了, 收工……

李老板: 慢着。我们不是说好要玩 objection 的吗? 我xx都脱了,你给我讲Base64 ? 奋飞: 好像是这么说的。导演,把前面剪掉。我们假装失忆。重新来一遍。

Objection

唉呀,这个_sig签名是在哪做的呢? 我们先上 Jadx 搜一下字符串吧

sigf1
1:sigf1

我去,200多个结果,一个一个去看得累死人。 我们加个 " 搜一下 "_sig

sigf2
1:sigf2

这下好多了,只有几个结果了,这个和 _ts 在一起的结果很眼熟,我们点进去看看

sigf3
1:sigf3

我怀疑 这个 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 定位嫌疑函数之后,检查他的入参和返回值
rc1
1:rc1

结果就是它了,入参是 3个字符串, 返回值就是 _sig_ts

三、总结

大胆假设,细心求证, Objection就是定位的好助手。

葫芦娃的 Wallbreaker 插件也是好东西,在脱不了壳的时候,用来分析类结构的指路明灯。下次有机会再介绍

ffshow
1:ffshow

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

100

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

100