逆向分析sign算法

题目: 分析出KanxueSign函数的算法

还原的代码在附件中,编译:g++ main.cpp base64.c

1.分析:

纯c算法的逆向,有很多的ollvm,所以这道题完成以后可以更加熟悉处理ollvm的程序。

2.答案:

经过初步分析算法的输入为MainActivity类的firstInstallTime,packageCodePath,randomLong,startTime四个成员变量,与MainActivity.randomLong无关。

固定住输入好分析:

老方法,使用frida固定住这四个变量的输入方便记录分析,我这里四个变量的取值为:

cls.startTime.value = 0x17d472e9806;
cls.firstInstallTime.value = 0x17d41d64983;
cls.randomLong.value = 0x49536c10125ac000;
cls.packageCodePath.value = "/data/app/com.kanxue.ollvm_ndk_11-7sJSh-MLUIRVBOWzGqFjjw==/base.apk";

经过算法的输出为36b0d7a02b934a38fffd51f0be37c661fdf6896e81d82c4dde65fb194268e9cd00c301110281011c028100c302810071007100c300bd0190023e014a01a30281022a00a8020400be014a01900156015602e2023e010b022a011101a3010b02c702c7012c012d01c10208019c0147012c0294023a01d100a900a70249008601ca007202b60135009e02d601e001e002a2028b028b00c3012b028101c100be014a0281007101a3ahryb3qMnhySa3mLbQeOakeQb3ySaK==

三段结果:

结果分为三段,三段由不同的算法处理,由sprintf组装,具体的逻辑在sub_12AE4中

1、第一段结果为:36b0d7a02b934a38fffd51f0be37c661fdf6896e81d82c4dde65fb194268e9cd,64个字节。

2、第二段结果为00c301110281011c028100c302810071007100c300bd0190023e014a01a30281022a00a8020400be014a01900156015602e2023e010b022a011101a3010b02c702c7012c012d01c10208019c0147012c0294023a01d100a900a70249008601ca007202b60135009e02d601e001e002a2028b028b00c3012b028101c100be014a0281007101a3

3、第三段结果为ahryb3qMnhySa3mLbQeOakeQb3ySaK==,可以看出这是一段疑似base64结果

第一段算法:

再分析过程中发现sha256的常数:0x6a09e667,0xbb67ae85,实现函数为sub_1B1E8,但这个实现是个sha256的变种,输入的字符串有时为64个字节未做padding的字符串,通过nop掉ollvm的控制块,修复真实块的关系,以及还原ollvm指令替换,得到的sub_1B1E8函数的代码片段为:

v231 = *v594;
    v232 = *v588;
    v233 = *v590;
    v234 = (unsigned int)*v591;
    v235 = *v592;
    v587 = a2_arg + 1;
    v654 = a2_arg + 1;
    v236 = a2_arg[1] << 24;
    v237 = (*v654 ^ 0xFF00FFFF) & *v654;
    v238 = ((*v654 << 8) ^ 0xFF00FF00) & (*v654 << 8);
    v657 = HIBYTE(a2_arg[1]);
    v658 = v237;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值