手脫 -- PECompact 2.x -> Jeremy Collake

来源:互联网 发布:网络电影宣传推广方案 编辑:程序博客网 时间:2024/05/01 18:04

手脫 -- PECompact 2.x -> Jeremy Collake
PEID: PECompact 2.x -> Jeremy Collake
脱壳工具下载有专用的脱壳工具,这里做为练手。
OD载入加了壳的程序.
入口点: --- 这里很怪如果你F8走, 走到00401016 就会飞
1.先忽略所有异常.
2. F8 行两步 , 这里可以用ESP定律
00401000 >  B8 DC2B4100     MOV EAX,rcrawler.00412BDC
00401005    50              PUSH EAX
00401006    64:FF35 0000000>PUSH DWORD PTR FS:[0]
0040100D    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
00401014    33C0            XOR EAX,EAX
00401016    8908            MOV DWORD PTR DS:[EAX],ECX
00401018    50              PUSH EAX
00401019    45              INC EBP
0040101A    43              INC EBX
0040101B    6F              OUTS DX,DWORD PTR ES:[EDI]               ; I/O 命令
0040101C    6D              INS DWORD PTR ES:[EDI],DX                ; I/O 命令
0040101D    70 61           JO SHORT Adler32C.00401080

ESP定律之後 -- 取消断点  -- 就到了这里
7C968F86    3B45 F8         CMP EAX,DWORD PTR SS:[EBP-8]
7C968F89    72 05           JB SHORT ntdll.7C968F90
7C968F8B    3B45 F4         CMP EAX,DWORD PTR SS:[EBP-C]
7C968F8E    72 64           JB SHORT ntdll.7C968FF4
7C968F90    50              PUSH EAX
7C968F91    E8 FDFDFFFF     CALL ntdll.7C968D93
7C968F96    84C0            TEST AL,AL
7C968F98    74 5A           JE SHORT ntdll.7C968FF4
7C968F9A    F605 FAB6997C 8>TEST BYTE PTR DS:[7C99B6FA],80
7C968FA1  ^ 0F85 7AFDFFFF   JNZ ntdll.7C968D21

ALT+M 到内存找到CODE段 下段 再F9
来到这里 >
00412BF1    C602 E9         MOV BYTE PTR DS:[EDX],0E9
00412BF4    83C2 05         ADD EDX,5
00412BF7    2BCA            SUB ECX,EDX
00412BF9    894A FC         MOV DWORD PTR DS:[EDX-4],ECX
00412BFC    33C0            XOR EAX,EAX
00412BFE    C3              RETN

F8 几步就到了这里 > 这里可以再用ESP定律
7C923F17    64:8B25 0000000>MOV ESP,DWORD PTR FS:[0]
7C923F1E    64:8F05 0000000>POP DWORD PTR FS:[0]
7C923F25    8BE5            MOV ESP,EBP
7C923F27    5D              POP EBP
7C923F28    C2 1400         RETN 14

就到了这里 > 先取消断点  > 下面就看到OEP入口點
00412C0F    53              PUSH EBX
00412C10    51              PUSH ECX
00412C11    57              PUSH EDI
00412C12    56              PUSH ESI
00412C13    52              PUSH EDX
00412C14    8D98 57120010   LEA EBX,DWORD PTR DS:[EAX+10001257]
00412C1A    8B53 18         MOV EDX,DWORD PTR DS:[EBX+18]
00412C1D    52              PUSH EDX
00412C1E    8BE8            MOV EBP,EAX
00412C20    6A 40           PUSH 40
00412C22    68 00100000     PUSH 1000
00412C27    FF73 04         PUSH DWORD PTR DS:[EBX+4]
00412C2A    6A 00           PUSH 0
00412C2C    8B4B 10         MOV ECX,DWORD PTR DS:[EBX+10]
00412C2F    03CA            ADD ECX,EDX
00412C31    8B01            MOV EAX,DWORD PTR DS:[ECX]
00412C33    FFD0            CALL EAX
00412C35    5A              POP EDX
00412C36    8BF8            MOV EDI,EAX
00412C38    50              PUSH EAX
00412C39    52              PUSH EDX
00412C3A    8B33            MOV ESI,DWORD PTR DS:[EBX]
00412C3C    8B43 20         MOV EAX,DWORD PTR DS:[EBX+20]
00412C3F    03C2            ADD EAX,EDX
00412C41    8B08            MOV ECX,DWORD PTR DS:[EAX]
00412C43    894B 20         MOV DWORD PTR DS:[EBX+20],ECX
00412C46    8B43 1C         MOV EAX,DWORD PTR DS:[EBX+1C]
00412C49    03C2            ADD EAX,EDX
00412C4B    8B08            MOV ECX,DWORD PTR DS:[EAX]
00412C4D    894B 1C         MOV DWORD PTR DS:[EBX+1C],ECX
00412C50    03F2            ADD ESI,EDX
00412C52    8B4B 0C         MOV ECX,DWORD PTR DS:[EBX+C]
00412C55    03CA            ADD ECX,EDX
00412C57    8D43 1C         LEA EAX,DWORD PTR DS:[EBX+1C]
00412C5A    50              PUSH EAX
00412C5B    57              PUSH EDI
00412C5C    56              PUSH ESI
00412C5D    FFD1            CALL ECX
00412C5F    5A              POP EDX
00412C60    58              POP EAX
00412C61    0343 08         ADD EAX,DWORD PTR DS:[EBX+8]
00412C64    8BF8            MOV EDI,EAX
00412C66    52              PUSH EDX
00412C67    8BF0            MOV ESI,EAX
00412C69    8B46 FC         MOV EAX,DWORD PTR DS:[ESI-4]
00412C6C    83C0 04         ADD EAX,4
00412C6F    2BF0            SUB ESI,EAX
00412C71    8956 08         MOV DWORD PTR DS:[ESI+8],EDX
00412C74    8B4B 0C         MOV ECX,DWORD PTR DS:[EBX+C]
00412C77    894E 14         MOV DWORD PTR DS:[ESI+14],ECX
00412C7A    FFD7            CALL EDI
00412C7C    8985 3F130010   MOV DWORD PTR SS:[EBP+1000133F],EAX
00412C82    8BF0            MOV ESI,EAX
00412C84    8B4B 14         MOV ECX,DWORD PTR DS:[EBX+14]
00412C87    5A              POP EDX
00412C88    EB 0C           JMP SHORT rcrawler.00412C96
00412C8A    03CA            ADD ECX,EDX
00412C8C    68 00800000     PUSH 8000
00412C91    6A 00           PUSH 0
00412C93    57              PUSH EDI
00412C94    FF11            CALL DWORD PTR DS:[ECX]
00412C96    8BC6            MOV EAX,ESI
00412C98    5A              POP EDX
00412C99    5E              POP ESI
00412C9A    5F              POP EDI
00412C9B    59              POP ECX
00412C9C    5B              POP EBX
00412C9D    5D              POP EBP
00412C9E    FFE0            JMP EAX

看到这个地址就知到啦  跳去 >> OEP 入口   F8吧
好这里就是OEP了 -- DUMP出来
00408BC8    55              PUSH EBP
00408BC9    8BEC            MOV EBP,ESP
00408BCB    83C4 F0         ADD ESP,-10
00408BCE    53              PUSH EBX
00408BCF    B8 708B4000     MOV EAX,rcrawler.00408B70
00408BD4    E8 8FB9FFFF     CALL rcrawler.00404568


友情提示:用此方法脱过壳后会有一个无效指针,修复无效指针的函数名是GetProcAddress  模块:kernel32.dll

1  000492E0  kernel32.dll  00F1  FreeLibrary
0  000492E4  ?  0000  003A0148                               //此处为无效指针
1  000492E8  kernel32.dll  01DF  GetVersionExA

原创粉丝点击