一、目标

一、目标

之前我们介绍过 某酒店App sign、appcode签名解析(一) 带壳分析 r0tracer

带壳分析也是迫不得已,谁不希望零距离接触呀。

App升级了 5.3.3,我们的工具也升级了。

今天的新朋友是 BlackDex

https://github.com/CodingGay/BlackDex

  • 脱壳
  • 延时Hook

二、步骤

BlackDex脱壳

  • 安装BlackDex
  • 在显示的进程列表中选择 com.platexx.boxxoota
  • 是的,壳已经脱好了,脱壳后的文件在 /sdcard/Android/data/top.niunaijun.blackdexa32/dump/com.platexx.boxxoota

分析下

根据上次的分析结果,赶紧去到 com.besxxxhotel.app.whnetcomponent.utils.SignUtil 看看。

hotel
1:hotel

热泪盈眶呀,看到源代码的感觉真好。

啥也不说了,hook它。

var signCls = Java.use("com.besxxxhotel.app.whnetcomponent.utils.SignUtil");
console.log(TAG + "signCls: " + signCls);
signCls.getSignString.implementation = function(a1,a2,a3,a4,a5,a6){
        var result = this.getSignString(a1,a2,a3,a4,a5,a6);
        console.log(TAG + "a1 = " + a1);
        console.log(TAG + "a2 = " + a2);
        console.log(TAG + "a3 = " + a3);
        console.log(TAG + "a4 = " + a4);
        console.log(TAG + "a5 = " + a5);
        console.log(TAG + "a6 = " + a5);
        console.log(TAG + "sign rc = " + result);

        return result;
}

signCls.getAppCode.implementation = function(a1,a2,a3,a4){
        var result = this.getAppCode(a1,a2,a3,a4);
        console.log(TAG + "a1 = " + a1);
        console.log(TAG + "a2 = " + a2);
        console.log(TAG + "a3 = " + a3);
        console.log(TAG + "a4 = " + a4);
        console.log(TAG + "AppCode rc = " + result);

        return result;

}

signCls.decodeASCII.implementation = function(a){
        var result = this.decodeASCII(a);
        console.log(TAG + a.entrySet().toArray());
        console.log(TAG + "decodeASCII: " +result);
        return result;
}

挂上心爱的frida跑一下。

[Redmi 6A::platexx.boxxoota]-> Process crashed: Illegal instruction

怎么会挂呢,没道理呀,我们是好朋友呀。上一个版本都还愉快的玩耍过?

再试试老版本,一样crash

延时Hook

深呼吸,冷静一下。

  1. 老版本也Crash,说明不是新版本升级了防护策略
  2. spawn模式下会Crash,attach模式下正常

那就好办了,spawn模式下我们可以加个延时试试。

function main() {
    Java.perform(function () {
        var threadef = Java.use('java.lang.Thread');
        var threadinstance = threadef.$new();

            // ...... xxxHook code ......
    });
}

setTimeout(main, 1000);
// setImmediate(main);

这次没问题了,

rc
1:rc

三、总结

分析脱壳软件的时候,可以考虑hook 壳代码里面的 attachBaseContext getApplicationContext 函数来找到hook真实代码的时机。

frida被搞的时候记得试试 XcubeBase

ffshow
1:ffshow

尼采说过,杀不死你的东西会让你变得更加强大,但他没说清楚的是,那东西差点杀死你。

100

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

100