原来ASProtect的几个函数的作用对保护强度提高不小。一改以前我见过的壳重技巧轻算法的毛病,的确在有些方面值得学习。
其利用的原理如下: 1)程序在编程时可以根据需要选择使用ASProtect提供的几个函数。 比如: SetRegistrationKey(...), GetRegistrationInformation(...), GetHardwareID(...)
这几个函数由于使用了导出方式的声明所以会在ExportTable中出现,ASProtect在加壳时可以通过分析ExportTable识别出程序使用了哪些其提供的函数,从而对这些函数的入口进行挂钩,从而使其加壳后的外壳代码可以象回调函数一样调用这些函数与程序进行通信。 比如见以下代码: 0041333E loc_41333E: ; CODE XREF: sub_413253+B0j 0041333E mov eax, ds:4155CCh 00413343 cmp dword ptr [eax+0Ch], 0 00413347 jz short loc_413360 00413349 mov eax, ds:41555Ch 0041334E mov eax, [eax] 00413350 call @System@@LStrToPChar$qqrv ; System __linkproc__ LStrToPChar(void) 00413355 push eax 00413356 mov eax, ds:4155CCh 0041335B mov eax, [eax+0Ch] 0041335E call eax 00413360 00413360 loc_413360: ; CODE XREF: sub_413253+F4j 00413360 mov eax, ds:4155CCh 00413365 cmp dword ptr [eax+30h], 0 ; eax 是一内部结构指针 00413369 jz short loc_413389 0041336B push 41105Ch 00413370 mov eax, ds:4155CCh 00413375 mov eax, [eax+30h] 00413378 call eax ; 这里将调用 GetDecryptProc(...) 0041337A push 41105Ch 0041337F mov eax, ds:4155CCh
2)程序在编程时还可以加入ASProtect提供的两个宏定义,这两个宏定义实际上将起到特殊的标志作用,有点类似"块开始"和"块结束"的作用。在ASProtect将在加壳时将对"这些块"中的代码进行加密。对这些代码块的加、解密使用了的密码学算法。目前还不十分清楚其使用的算法,初步分析这里可能用到了TWOFISH。因为发现了一些特征:
初始化部分有以下常数设置: 0040C4AE mov dword ptr [ebx+48h], 67452301h 0040C4B5 mov dword ptr [ebx+4Ch], 0EFCDAB89h 0040C4BC mov dword ptr [ebx+50h], 98BADCFEh 0040C4C3 mov dword ptr [ebx+54h], 10325476h 0040C4CA mov dword ptr [ebx+58h], 0C3D2E1F0h 0040C4D1 mov dword ptr [ebx+5Ch], 76543210h 0040C4D8 mov dword ptr [ebx+60h], 0FEDCBA98h 0040C4DF mov dword ptr [ebx+64h], 89ABCDEFh 0040C4E6 mov dword ptr [ebx+68h], 1234567h 0040C4ED mov dword ptr [ebx+6Ch], 3C2D1E0Fh
而运算部分有大量类似MD5算法的运算。由于代码太长,不列举了。 (出处:清风网络学院)
上一篇:对PECompact.exe v1.34的手动脱壳(2)
下一篇:天意+Procdump脱PE Compact 1.4 beta6
|