实战Armadillo V3.60标准加壳方式的脱壳

作者:佚名    文章来源:互联网    点击数:    更新时间:2008-7-9

 

00AD45DC    83F9 01         CMP ECX,1 
00AD45DF    75 22           JNZ SHORT 00AD4603 
00AD45E1    FF76 04         PUSH DWORD PTR DS:[ESI+4] 
00AD45E4    FF76 08         PUSH DWORD PTR DS:[ESI+8] 
00AD45E7    6A 00           PUSH 0 
00AD45E9    E8 F110FFFF     CALL 00AC56DF 
00AD45EE    50              PUSH EAX 
00AD45EF    A1 9455AE00     MOV EAX,DWORD PTR DS:[AE5594] 
00AD45F4    8B48 70         MOV ECX,DWORD PTR DS:[EAX+70] 
00AD45F7    3348 68         XOR ECX,DWORD PTR DS:[EAX+68] 
00AD45FA    3348 04         XOR ECX,DWORD PTR DS:[EAX+4] 
00AD45FD    2BF9            SUB EDI,ECX 
00AD45FF    FFD7            CALL EDI  ―――――  EDI=OEP=01006ae0 
00AD4601    8BD8            MOV EBX,EAX 
00AD4603    5F              POP EDI 
00AD4604    8BC3            MOV EAX,EBX 
00AD4606    5E              POP ESI 
00AD4607    5B              POP EBX 
00AD4608    C3              RETN 
运行到上面的00AD45FF,EDI=oep,F7进去,运行LORDPE,dump一下吧,OK,现在 
运行ImportREC1.6(请使用1.6,不要使用1.4)   oep填6ae0 OK,提示oep找到了,单击获取输入表,发现有许多函数不认,单击显示非法函数,可以看到第一个不认的是: 
RVA:00001004 ptr:00ABBA46 (记住这个,一会儿用得着) 
这是因为加密的原因,OK, 
我们来找到那个加密的地方。 
重新来吧。 
先用插件隐藏OD,下BP VirtualProtect断点,越过开头两次异常,按5次F5,点击对话框中的确定按钮,SHIFT+F9越过,OK,看一下堆栈: 
0012BEF0   00AD077C  /CALL 到 VirtualProtect 来自 00AD0776 
0012BEF4   01001000  |Address = NOTEPAD.01001000 ――――>目标接近了。 
0012BEF8   00007000  |Size = 7000 (28672.) 
0012BEFC   00000004  |NewProtect = PAGE_READWRITE 
0012BF00   0012D71C  \pOldProtect = 0012D71C 
记得第一个出错指针是01001004(加上基地址100000),OK,在内存窗口中,GO定位到01001004 可以看到这片区域都是0,那是因为还没开始加密啊,我们在01001004右击选择断点――>硬件断点写入――>Dword ,OK,F9吧,两次后会断到如下: 
00AD181A    8B85 20ECFFFF   MOV EAX,DWORD PTR SS:[EBP-13E0]          ; NOTEPAD.01001000 
00AD1820    83C0 04         ADD EAX,4 
00AD1823    8985 20ECFFFF   MOV DWORD PTR SS:[EBP-13E0],EAX 
00AD1829  ^ E9 36FDFFFF     JMP 00AD1564 
00AD182E    83BD F4EAFFFF 0>CMP DWORD PTR SS:[EBP-150C],0 
00AD1835    0F85 8A000000   JNZ 00AD18C5 
00AD183B    0FB685 B0E8FFFF MOVZX EAX,BYTE PTR SS:[EBP-1750] 
00AD1842    85C0            TEST EAX,EAX 
00AD1844    74 7F           JE SHORT 00AD18C5 
停在00AD181A,OK,现在我们找那个地方了,用小妹的一个技巧吧,非常稳的,鼠标滚轮一直往上,呵呵,8秒钟就到了,如下: 
00AD1349    FF15 C480AD00   CALL DWORD PTR DS:[AD80C4]               ; kernel32.GetModuleHandleA  ――>>>>> 这是一个重要标志,看到它就停吧。 
00AD134F    3985 BCE8FFFF   CMP DWORD PTR SS:[EBP-1744],EAX 
00AD1355    75 0F           JNZ SHORT 00AD1366 
00AD1357    C785 B8E8FFFF 3>MOV DWORD PTR SS:[EBP-1748],0ADC530 
00AD1361    E9 C4000000     JMP 00AD142A 
00AD1366    83A5 94E6FFFF 0>AND DWORD PTR SS:[EBP-196C],0 
00AD136D    C785 90E6FFFF 4>MOV DWORD PTR SS:[EBP-1970],0ADCB48 
00AD1377    EB 1C           JMP SHORT 00AD1395 
00AD1379    8B85 90E6FFFF   MOV EAX,DWORD PTR SS:[EBP-1970] 
00AD137F    83C0 0C         ADD EAX,0C 
00AD1382    8985 90E6FFFF   MOV DWORD PTR SS:[EBP-1970],EAX 
00AD1388    8B85 94E6FFFF   MOV EAX,DWORD PTR SS:[EBP-196C] 
00AD138E    40              INC EAX 
00AD138F    8985 94E6FFFF   MOV DWORD PTR SS:[EBP-196C],EAX 
00AD1395    8B85 90E6FFFF   MOV EAX,DWORD PTR SS:[EBP-1970] 
00AD139B    8338 00         CMP DWORD PTR DS:[EAX],0 
00AD139E    0F84 86000000   JE 00AD142A  ―――>>>每次jmp就可以不加密了。呵呵。 
00AD13A4    8B85 90E6FFFF   MOV EAX,DWORD PTR SS:[EBP-1970] 
00AD13AA    8B40 08         MOV EAX,DWORD PTR DS:[EAX+8] 
00AD13AD    83E0 01         AND EAX,1 
00AD13B0    85C0            TEST EAX,EAX 
00AD13B2    74 25           JE SHORT 00AD13D9 
00AD13B4    A1 9455AE00     MOV EAX,DWORD PTR DS:[AE5594] 
 但是我们现在改是不用的,必须每次到这的时候就改,我们要走在00AD1349前,OK,重新再来,开头的几步仍然一样。5次F9之后,越过异常框,OK,看一下堆栈: 
0012BEF0   00AD077C  /CALL 到 VirtualProtect 来自 00AD0776 
0012BEF4   01001000  |Address = NOTEPAD.01001000 
0012BEF8   00007000  |Size = 7000 (28672.) 
0012BEFC   00000004  |NewProtect = PAGE_READWRITE 
0012BF00   0012D71C  \pOldProtect = 0012D71C 
可以看到00AD0776离我们的目标00AD1349不远了,取消断点,按CTRL+F9,然后一步一步F8,看到一些jmp往上跳的,可以直接F4过去。很快的就可以到我们的00AD1349了,马上在00AD139E    0F84 86000000   JE 00AD142A 这里下断,按F9吧,断下当然显示不跳了,改一下标志位,使它跳,不要取消断点,继续F9,依此一直下去,OK我大约断了9次,再按一下的时候,OD异常,无法处理进程了,如果是3.4的程序,可以直接拿出Importrec了,可是3.6不行,走到oep吧,怎么走呢,再按一下任何键都飞了,所以第10次当然不能按F9了,9次之后直接下断,BP GetCurrentThreadId  
OK,停下来了,CTRL+F9,马上: 
0AD44F2    53              PUSH EBX 
00AD44F3    8B48 70         MOV ECX,DWORD PTR DS:[EAX+70] 
00AD44F6    56              PUSH ESI 
00AD44F7    3348 6C         XOR ECX,DWORD PTR DS:[EAX+6C] 
00AD44FA    57              PUSH EDI 
00AD44FB    6A FE           PUSH -2 
00AD44FD    3348 58         XOR ECX,DWORD PTR DS:[EAX+58] 
00AD4500    5B              POP EBX 
00AD4501    F6C1 40         TEST CL,40 
00AD4504    75 08           JNZ SHORT 00AD450E 
00AD4506    6A 01           PUSH 1 
00AD4508    E8 8609FEFF     CALL 00AB4E93 
00AD450D    59              POP ECX 
00AD450E    8B7424 10       MOV ESI,DWORD PTR SS:[ESP+10] 
00AD4512    833E 02         CMP DWORD PTR DS:[ESI],2 
00AD4515    75 40           JNZ SHORT 00AD4557 
00AD4517    6A 00           PUSH 0 
00AD4519    E8 E231FEFF     CALL 00AB7700 
00AD451E    A1 9455AE00     MOV EAX,DWORD PTR DS:[AE5594] 
00AD4523    59              POP ECX 
00AD4524    8B48 40         MOV ECX,DWORD PTR DS:[EAX+40] 
00AD4527    8B50 70         MOV EDX,DWORD PTR DS:[EAX+70] 
00AD452A    3348 08         XOR ECX,DWORD PTR DS:[EAX+8] 
00AD452D    33CA            XOR ECX,EDX 
00AD452F    74 14           JE SHORT 00AD4545 
00AD4531    8B78 68         MOV EDI,DWORD PTR DS:[EAX+68] 
00AD4534    3378 04         XOR EDI,DWORD PTR DS:[EAX+4] 
00AD4537    8B46 18         MOV EAX,DWORD PTR DS:[ESI+18] 
00AD453A    33FA            XOR EDI,EDX 
00AD453C    2BC7            SUB EAX,EDI 
00AD453E    03C1            ADD EAX,ECX 
00AD4540    8946 1C         MOV DWORD PTR DS:[ESI+1C],EAX 
00AD4543    EB 04           JMP SHORT 00AD4549 
00AD4545    8366 1C 00      AND DWORD PTR DS:[ESI+1C],0 
00AD4549    FF76 18         PUSH DWORD PTR DS:[ESI+18] 
00AD454C    E8 908FFEFF     CALL 00ABD4E1 
00AD4551    59              POP ECX 
00AD4552    E9 AC000000     JMP 00AD4603 
00AD4557    E8 7918FEFF     CALL 00AB5DD5 
00AD455C    C705 DCDBAD00 E>MOV DWORD PTR DS:[ADDBDC],0ADE6EC        ; ASCII "RB" 
00AD4566    FF15 1481AD00   CALL DWORD PTR DS:[AD8114]               ; kernel32.GetCurrentThreadId 
00AD456C    A3 AC56AE00     MOV DWORD PTR DS:[AE56AC],EAX 
00AD4571    E8 1537FEFF     CALL 00AB7C8B 
00AD4576    6A 00           PUSH 0 
00AD4578    E8 648FFEFF     CALL 00ABD4E1 
00AD457D    6A 00           PUSH 0 
00AD457F    C705 DCDBAD00 E>MOV DWORD PTR DS:[ADDBDC],0ADE6E8        ; ASCII "RC" 
00AD4589    E8 7231FEFF     CALL 00AB7700 
00AD458E    59              POP ECX 
00AD458F    59              POP ECX 
00AD4590    E8 4A11FFFF     CALL 00AC56DF 
00AD4595    8BF8            MOV EDI,EAX 
00AD4597    A1 9455AE00     MOV EAX,DWORD PTR DS:[AE5594] 
00AD459C    8B48 70         MOV ECX,DWORD PTR DS:[EAX+70] 
00AD459F    3348 40         XOR ECX,DWORD PTR DS:[EAX+40] 
00AD45A2    3348 08         XOR ECX,DWORD PTR DS:[EAX+8] 
00AD45A5    03F9            ADD EDI,ECX 
00AD45A7    8B0E            MOV ECX,DWORD PTR DS:[ESI] 
00AD45A9    85C9            TEST ECX,ECX 
00AD45AB    75 2F           JNZ SHORT 00AD45DC 
00AD45AD    8B78 70         MOV EDI,DWORD PTR DS:[EAX+70] 
00AD45B0    E8 2A11FFFF     CALL 00AC56DF 
00AD45B5    8B0D 9455AE00   MOV ECX,DWORD PTR DS:[AE5594]            ; NOTEPAD.0104A260 
00AD45BB    FF76 14         PUSH DWORD PTR DS:[ESI+14] 
00AD45BE    8B51 40         MOV EDX,DWORD PTR DS:[ECX+40] 
00AD45C1    FF76 10         PUSH DWORD PTR DS:[ESI+10] 
00AD45C4    3351 08         XOR EDX,DWORD PTR DS:[ECX+8] 
00AD45C7    FF76 0C         PUSH DWORD PTR DS:[ESI+C] 
00AD45CA    33D7            XOR EDX,EDI 
00AD45CC    03C2            ADD EAX,EDX 
00AD45CE    8B51 68         MOV EDX,DWORD PTR DS:[ECX+68] 
00AD45D1    3351 04         XOR EDX,DWORD PTR DS:[ECX+4] 
00AD45D4    33D7            XOR EDX,EDI 
00AD45D6    2BC2            SUB EAX,EDX 
00AD45D8    FFD0            CALL EAX 
00AD45DA    EB 25           JMP SHORT 00AD4601 
00AD45DC &, nbsp;  83F9 01         CMP ECX,1 
00AD45DF    75 22           JNZ SHORT 00AD4603 
00AD45E1    FF76 04         PUSH DWORD PTR DS:[ESI+4] 
00AD45E4    FF76 08         PUSH DWORD PTR DS:[ESI+8] 
00AD45E7    6A 00           PUSH 0 
00AD45E9    E8 F110FFFF     CALL 00AC56DF 
00AD45EE    50              PUSH EAX 
00AD45EF    A1 9455AE00     MOV EAX,DWORD PTR DS:[AE5594] 
00AD45F4    8B48 70         MOV ECX,DWORD PTR DS:[EAX+70] 
00AD45F7    3348 68         XOR ECX,DWORD PTR DS:[EAX+68] 
00AD45FA    3348 04         XOR ECX,DWORD PTR DS:[EAX+4] 
00AD45FD    2BF9            SUB EDI,ECX 
00AD45FF    FFD7            CALL EDI  ―――――  EDI=OEP=01006ae0 

好了,拿出Import1.6 不要1.4了,呵呵,OEP填6AE0 这下可以获取很多函数了,无效的一律CUT吧,好。运行一下吧,OK,然后再拿Lordpe rebuild一下,减小体积吧。呵呵。 
感谢 以前写过AM教程的许多人,谢谢所有论坛上的人。 

上一页  [1] [2] 

上一页  [1] [2] 

  • 上一条文章:
  • 下一条文章: