黑客防线,在攻与防的对立统一中寻求突破!2001年创刊的黑客技术专业刊物!

设为首页
收藏本站
联系我们
网站导航

黑客文章 - 加密解密 - 浏览 - Arm3.70a对IAT保护的一点心得

Arm3.70a对IAT保护的一点心得

黑客 发布日期:2008-4-22 0:10:41 共有 470 人次浏览
Arm3.70a对IAT保护的一点心得

Arm3.61版后加强了对IAT解码的保护,这里只谈到IAT解码前的保护代码跟踪心得。  
本次使用的程序是goodmorning发http://tongtian.net/pediybbs/viewtopic.php?t=5395&sid=9f24b627dcfe6d35be45f9f2244142a7 
的Armadillo 3.70完全版加的记事本。  
前面都是定式了,不要我说……  
我从bp OpenMutexA 后,修改代码完成,F9运行再次被中断在OpenMutexA函数的入口地址处开始:  

去掉以前的所有断点,bp VirtualProtect F9运行,中断后看看堆栈中:  
0012F484   0101FAC6  /CALL 到 VirtualProtect 来自 notepad.0101FAC0  
0012F488   009A1000  |Address = 009A1000         <--这里是代码解码的开始  
0012F48C   00029CCA  |Size = 29CCA (171210.)  
0012F490   00000040  |NewProtect = PAGE_EXECUTE_READWRITE  
0012F494   0012F4B0  \pOldProtect = 0012F4B0  


一直F9运行4次,到堆栈中:  
0012F484   0101FAC6  /CALL 到 VirtualProtect 来自 notepad.0101FAC0  
0012F488   009DE000  |Address = 009DE000         <--代码解码完成地址  
0012F48C   00003216  |Size = 3216 (12822.)  
0012F490   00000002  |NewProtect = PAGE_READONLY  
0012F494   0012F4B0  \pOldProtect = 0012F4B0  

如果再次F9运行,就会出现第一个anti “错误:不知道如何在地址009C7E13处绕过命令……”,这说明程序开始在解码的代码中运行  
并且运行到第一个有效验的地方,关闭OD的这个提示窗口,F12就会来到:  
009C7E0E   >PUSH 9C7E16  
009C7E13   >???                ; 未知命令  <--就是这个anti  
009C7E15   >IRETD  

向上看看:  
009C7D59   >PUSH EBP  
009C7D5A   >MOV EBP,ESP  
009C7D5C   >PUSH ECX  
009C7D5D   >PUSH EBX  
009C7D5E   >XOR EBX,EBX  
009C7D60   >CMP BYTE PTR DS:[9D9075],BL  
009C7D66   >PUSH ESI  
009C7D67   >PUSH EDI  
009C7D68   >JNZ SHORT 009C7D7B  
009C7D6A   >CMP BYTE PTR DS:[9D8CB1],BL  
009C7D70   >JNZ SHORT 009C7D7B  
009C7D72   >CALL 009A72FD  
009C7D77   >TEST EAX,EAX  
009C7D79   >JNZ SHORT 009C7D82  
009C7D7B   >XOR AL,AL  
009C7D7D   >JMP 009C7EAE  
009C7D82   >MOV DWORD PTR SS:[EBP-4],EBX  
009C7D85   >MOV DWORD PTR DS:[9D8CD8],EBX  
009C7D8B   >PUSH ECX  
009C7D8C   >BSWAP ECX  
009C7D8E   >NOT ECX  
009C7D90   >PUSH EAX  
009C7D91   >NOT EAX  
009C7D93   >MOV EAX,6C65696D  
009C7D98   >XCHG EAX,ECX  
009C7D99   >MOV ECX,DEADC0DE  
009C7D9E   >XCHG EAX,ECX  
009C7D9F   >NOT EAX  
009C7DA1   >POP EAX  
009C7DA2   >NOT ECX  
009C7DA4   >POP ECX  
009C7DA5   >PUSHFD  
009C7DA6   >PUSHAD  
009C7DA7   >XOR EBX,EBX  
009C7DA9   >JE SHORT 009C7DAE  
009C7DAB   >JMP SHORT 009C7DCF  
009C7DAD   >JMP SHORT 009C7DE2  
009C7DAF   >???                                      ; 未知命令  
009C7DB0   >JE SHORT 009C7DB2  
009C7DB2   >JMP SHORT 009C7DC1  
009C7DB4   >MOV EAX,87B90FEB  
009C7DB9   >LEAVE  
009C7DBA   >STC  
009C7DBB   >XOR AL,90  
009C7DBD   >STC  
009C7DBE   >JE SHORT 009C7DC5  
009C7DC0   >JMP SHORT 009C7DF5  
009C7DC2   >SAL BYTE PTR DS:[EDX+ESI*8-48],87        ; 移动常数超出 1..31 的范围  
009C7DC7   >LEAVE  
009C7DC8   >INC EAX  
009C7DC9   >DEC EAX  
009C7DCA   >TEST EAX,EAX  
009C7DCC  ^>JNZ SHORT 009C7DAB  
009C7DCE  ->JMP 93031B34  
009C7DD3   >XCHG AX,DX  
009C7DD5   >MOV EAX,EAX  
009C7DD7   >MOV EAX,DWORD PTR DS:[9D9200]  
009C7DDC   >PUSH 9C7E25  
009C7DE1   >PUSH DWORD PTR FS:[0]  
009C7DE8   >MOV DWORD PTR FS:[0],ESP  
009C7DEF   >XOR ESI,ESI  
009C7DF1   >PUSH 4  
009C7DF3   >PUSH 1000  
009C7DF8   >PUSH 1000  
009C7DFD   >PUSH 0  
009C7DFF   >CALL EAX  
009C7E01   >PUSHFW  
009C7E03   >BTS DWORD PTR SS:[ESP],10  
009C7E08   >BTS DWORD PTR SS:[ESP],8  
009C7E0D   >PUSH CS  
009C7E0E   >PUSH 9C7E16  
009C7E13   >???                                      ; 未知命令  
009C7E15   >IRETD  
009C7E16   >INC DWORD PTR DS:[EAX]  
009C7E18   >PUSH EAX  
009C7E19   >MOV EAX,DWORD PTR DS:[9D9204]  
009C7E1E   >CALL EAX  
009C7E20   >MOV DWORD PTR SS:[EBP-4],ESI  
009C7E23   >JMP SHORT 009C7E9D  
009C7E25   >PUSHAD  
009C7E26   >LEA EDI,DWORD PTR SS:[ESP+24]  
009C7E2A   >MOV ESI,DWORD PTR DS:[EDI]  
009C7E2C   >MOV EDI,DWORD PTR DS:[EDI+8]  
009C7E2F   >MOV EAX,DWORD PTR DS:[ESI]  
009C7E31   >CMP EAX,80000004  
009C7E36   >JE SHORT 009C7E71  
009C7E38   >CMP EAX,C000001D  
009C7E3D   >JE SHORT 009C7E44  
009C7E3F   >POPAD  
009C7E40   >XOR EAX,EAX  
009C7E42   >INC EAX  
009C7E43   >RETN  

1/2页次 第1页 第2页 下一页 最后一页
所属分类: 加密解密     网摘收藏: Google 雅虎 百度 POCO 365key 和讯 天极