爱加密so VMP浅析

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/feibabeibei_beibei/article/details/97613527

 一、静态分析:

如图是函数入口和vmp的整体器部分:

可以大致看到整个的dispatcher部分如下所示:

虚拟数据表如下所示,根据这些去调用对应的Handler;

二、动态分析:

这里分析简单列出几个比较重要的handler:

case 16:对于参数赋值操作;

case 76: 得到函数头信息;

case 77: 也是重点函数,从“mov pc r1”可以看出,调用wrap,然后去调用对应的子函数;分析时通过监督这条handler可以大致判断逻辑;

j_ivmp_vm_init: 得到vmdata的地址;

ivmp_push_int32:一堆的LDR、STR的混淆操作,就是增加移动vmdata的索引地址;

ivmp_interpreter:就是一个虚拟机的执行操作,只是不同于vmprotect.对于内存上频繁的LDR、STR操作;

ivmp_get_int32减小vmdata的索引地址;

三、破解:

通过py脚本找到对应的上面虚拟表的地址以及对应的大小,动态跟踪执行然后以ARM伪码的形式输出逻辑调用过程,可以简化整个逻辑,抓住上卖弄的case 77这条Handler,可以得到大约的一个调用逻辑。

四、总结:

爱加密的so-vmp虚拟化保护方案总结如下:

1.       直观上跟顶象的企业版相似,爱加密每次是通过虚拟表得到一个vmdata然后去调用wrapper这个分支去找对应的函数,其实也跟360加固中的libjiagu.so中的JNI_Onload的运行是类似的,可以通过一定的脚本去模拟运行简化指令然后去找到之间的调用关系。

2. 当然这里可能有人会问,vmdata是动态随机化的,怎么定位?但是每个handler的语义是不会改的,作为一定的特征进行分析;可能防守者会接着对hanlder进行混淆来混淆语义,总之攻防相对才有意思。

猜你喜欢

转载自blog.csdn.net/feibabeibei_beibei/article/details/97613527