小密盾简单逆向分析

时间:2024-05-31 16:50:43

前几天出了个小密盾,针对插件加固的,好奇的简单分析了一下,写了个样本简单的加固了一下,以下是分析过程。

一:静态分析

小密盾简单逆向分析

 

静态分析发现,根据这些函数参数发现很多函数进行了加密,经过加密处理的,应该是比较重要的。并且新加了几个节,字符串也都消失了,所以静态整体看起来做的保护还不错,接下来动态分析一下看看里面做了什么。

二:动态分析

由于JNI_Onload经过了加密,因此可以猜测在.init/.init_array处经过了加密处理,不需要仔细分析这些加密算法,在JNI_Onload处下断,果然在内存中解密,进行Dump分析,经过简单的修复以后在IDA可以看到如下:

小密盾简单逆向分析

 

接下来分析这个JNI_Onload函数,看到sub_76CC这个函数的主要作用是获取设备信息以及其他信息等,继续往下分析。

小密盾简单逆向分析

 

 

 

接着继续_Z11Qlo4ud9Qs5GPhi这个函数,发现这个函数最后走到这个_Z6turninv函数里面。这个函数仔细的去分析会发现进入一个大的循环结构。

小密盾简单逆向分析

 

 

 

 

会发现到了上面BLX R3处,每次R3的地址为函数Qde2uk9QU5G的偏移地址,F7进去也没有发现什么重要的有用信息。在这块浪费的好多时间,以为是做了什么虚拟处理,不同的偏移地址对应不同的Handler,最后在这块把R0的值改掉,继续往下分析。

小密盾简单逆向分析

 

 

 

 

会发现这里有JNI_Onload重要字符串,接着继续分析Z11Qml5uk1kU9aP12MEMORYMODULEP7Cryptor函数,因为函数名感觉有点意思。到后面会发现,静态看前面的那些加密函数,解密以后大部分还是会走到_Z6turninv这个函数, _Z6turninv 最后调用的还是那个大的循环结构,总觉得turn节中的这个函数是重点。但是还没有发现作用在何处。

小密盾简单逆向分析

 

 

 

 

接着往下分析,走到这里,F7进去可以看到,会发现这不就是保护前函数的JNI_Onload嘛,所以可以猜测加固思想是整体加密,然后在内存中解密。

小密盾简单逆向分析

 

 

 

 

由于我这个样本本身就是JNI的动态注册,如果知道JNI动态注册应该都知道,如上图所示,R2寄存器地址很关键,分别代表着注册的前后替换函数地址以及中间的参数值类型和返回值类型信息,可以看到0X75319D04是注册的本地层函数指针,因此跳过去可以看到,这就是加固前的函数方法。因此这个加固在动态运行的时候还是会在内存中进行还原,分析到这里结束。

小密盾简单逆向分析

 

 

 

小密盾简单逆向分析

 

三、总结:

起初以为在前面收集很多设备信息是做二进制虚拟加固的一些匹配,毕竟官网有VM加固的说明,但是最后调试发现,主要还是做了加密,以加密为主,进行整体的加密,然后在内存中进行了解密还原。有可能是我样本的问题,也有可能有的地方分析不到位,希望各位大佬一起研究学习。附件是样本和分析文档。