某酒店App sign、appcode签名解析(二) 脱壳分析

2021-08-09 11:28:59 浏览数 (1)

一、目标

之前我们介绍过 某酒店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.pnghotel.png

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

啥也不说了,hook它。

代码语言:txt复制
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跑一下。

代码语言:txt复制
[Redmi 6A::platexx.boxxoota]-> Process crashed: Illegal instruction

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

再试试老版本,一样crash

延时Hook

深呼吸,冷静一下。

. 老版本也Crash,说明不是新版本升级了防护策略

. spawn模式下会Crash,attach模式下正常

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

代码语言:txt复制
function main() {	
    Java.perform(function () {
        var threadef = Java.use('java.lang.Thread');
        var threadinstance = threadef.$new();

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

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

这次没问题了,

rc.pngrc.png

三、总结

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

frida被搞的时候记得试试 XcubeBase

ffshow.jpegffshow.jpeg

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

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。

关注微信公众号: 奋飞安全,最新技术干货实时推送

0 人点赞