实战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]