版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一、静态分析:
二、动态分析:
case 77: 也是重点函数,从“mov pc r1”可以看出,调用wrap,然后去调用对应的子函数;分析时通过监督这条handler可以大致判断逻辑;
ivmp_push_int32:一堆的LDR、STR的混淆操作,就是增加移动vmdata的索引地址;
ivmp_interpreter:就是一个虚拟机的执行操作,只是不同于vmprotect.对于内存上频繁的LDR、STR操作;
三、破解:
通过py脚本找到对应的上面虚拟表的地址以及对应的大小,动态跟踪执行然后以ARM伪码的形式输出逻辑调用过程,可以简化整个逻辑,抓住上卖弄的case 77这条Handler,可以得到大约的一个调用逻辑。
四、总结:
1. 直观上跟顶象的企业版相似,爱加密每次是通过虚拟表得到一个vmdata然后去调用wrapper这个分支去找对应的函数,其实也跟360加固中的libjiagu.so中的JNI_Onload的运行是类似的,可以通过一定的脚本去模拟运行简化指令然后去找到之间的调用关系。
2. 当然这里可能有人会问,vmdata是动态随机化的,怎么定位?但是每个handler的语义是不会改的,作为一定的特征进行分析;可能防守者会接着对hanlder进行混淆来混淆语义,总之攻防相对才有意思。