首页
社区
课程
招聘
[Game]一个小小的UnPackME,高手飞过~~
发表于: 2008-8-1 16:50 11418

[Game]一个小小的UnPackME,高手飞过~~

2008-8-1 16:50
11418
收藏
免费 7
支持
分享
最新回复 (30)
雪    币: 590
活跃值: (177)
能力值: ( LV9,RANK:680 )
在线值:
发帖
回帖
粉丝
26
呵呵
ESP总是遇到无法执行的异常

一怒之下,我F8单步就将其扒光了
2008-10-3 18:37
0
雪    币: 277
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
003802A7    33C0                xor eax,eax
003802A9    CC                  int3
003802AA    64:8F05 00000000    pop dword ptr fs:[0]
003802B1    83C4 04             add esp,4
003802B4    85C0                test eax,eax
003802B6    74 19               je short 003802D1               ;原来这是关键,只要此处不跳则成功
003802B8    EB 35               jmp short 003802EF
2008-10-6 16:06
0
雪    币: 242
活跃值: (418)
能力值: ( LV11,RANK:188 )
在线值:
发帖
回帖
粉丝
28
头昏纳,这几日有点筋疲力尽,又有朋友之拖,发奋一日未果,找别事休息:

好物,lord时就开始处理了

主要的流程如下。
只帖了地址和功能说明,code很简单清晰

004041CC >  60              PUSHAD:解压过程

1.
0040402C    890424          MOV     DWORD PTR SS:[ESP],EAX           ; retn 28,返回的是[ebp+51].lord过程有修改

2.
00404172    8B4424 24       MOV     EAX,DWORD PTR SS:[ESP+24]        ; kernel.32;VirtualAlloc;

3.4041cc
004041C1    50              PUSH    EAX;解压到的目标
004041C2    53              PUSH    EBX;加密着的code起始地址
004041C3    E8 04000000     CALL    <001.解压过程>

4.
0003002B    8B06            MOV     EAX,DWORD PTR DS:[ESI]           ; 拖GetProcAddress使用的字串符

5.
0003005D    8B85 4E030000   MOV     EAX,DWORD PTR SS:[EBP+34E]
00030063    0BC0            OR      EAX,EAX
00030065    75 0E           JNZ     SHORT 00030075
00030067    6A 00           PUSH    0
00030069    FF95 FE030000   CALL    DWORD PTR SS:[EBP+3FE]
0003006F    8985 0E040000   MOV     DWORD PTR SS:[EBP+40E],EAX       ; ebp+40e,模块基地址
00030075    8DB5 20040000   LEA     ESI,DWORD PTR SS:[EBP+420]
0003007B    56              PUSH    ESI
0003007C    FF95 FE030000   CALL    DWORD PTR SS:[EBP+3FE]
00030082    0BC0            OR      EAX,EAX
00030084    75 07           JNZ     SHORT 0003008D                   ; KerNER32.dll 基地址获取失败,lordlibrary
00030086    56              PUSH    ESI
00030087    FF95 02040000   CALL    DWORD PTR SS:[EBP+402]           ; Lordlibrary
0003008D    8BF0            MOV     ESI,EAX

0003009D    8985 1A040000   MOV     DWORD PTR SS:[EBP+41A],EAX       ; ebp+41a VirtualFree

000300BB    833C2B 00       CMP     DWORD PTR DS:[EBX+EBP],0         ; 解压完成否的标志
000300BF    0F84 8C000000   JE      00030151

000300EE    8DB5 39040000   LEA     ESI,DWORD PTR SS:[EBP+439]       ; "OutputDebugStringA"检测

00030110    FFD0            CALL    EAX                              ; kernel32.OutputDebugStringA

0003011D   /74 23           JE      SHORT 00030142                   ; 发现调试器就VirturlFree..
0003011F   |5E              POP     ESI
00030120   |58              POP     EAX
00030121   |8B78 04         MOV     EDI,DWORD PTR DS:[EAX+4]
00030124   |03BD 0E040000   ADD     EDI,DWORD PTR SS:[EBP+40E]
0003012A   |56              PUSH    ESI
0003012B   |57              PUSH    EDI
0003012C   |FF95 12040000   CALL    DWORD PTR SS:[EBP+412]           ; 4041cc.解压到edi;edi=oep;里面刻意的加了贼多条件判断,跳很多
00030132   |8B0C2B          MOV     ECX,DWORD PTR DS:[EBX+EBP]
00030135   |56              PUSH    ESI
00030136   |F3:A4           REP     MOVS BYTE PTR ES:[EDI],BYTE PTR >
00030138   |5E              POP     ESI
00030139   |53              PUSH    EBX
0003013A   |68 00800000     PUSH    8000
0003013F   |6A 00           PUSH    0
00030141   |56              PUSH    ESI
00030142   \FF95 1A040000   CALL    DWORD PTR SS:[EBP+41A]           ; 写完code,virtualFree

6.
000301E0    8B95 4A030000   MOV     EDX,DWORD PTR SS:[EBP+34A]       ; 开始iat了
000301E6    03D5            ADD     EDX,EBP

00030239    42              INC     EDX
0003023A    52              PUSH    EDX
0003023B    52              PUSH    EDX
0003023C    56              PUSH    ESI
0003023D    FF95 FA030000   CALL    DWORD PTR SS:[EBP+3FA]           ; kernel32.GetProcAddress
00030243    8907            MOV     DWORD PTR DS:[EDI],EAX           ; kernel32.ExitProcess

这儿对不同dll的处理很聪明:
00030251  ^\E2 CA           LOOPD   SHORT 0003021D
00030253  ^ EB 93           JMP     SHORT 000301E8

7,
000302A9    CC              INT3;因为想不到载入要的东西还有什么没初始化,偷懒了,进去后在0x30000下内存断点二次直接回来了。(其实第一次回来是进入了异常处理过程,偷懒不看,嗨嗨)

8,
0003033F    61              POPAD
00030340    50              PUSH    EAX
00030341    C3              RETN;正。

对断点的检测很赞。
2008-10-6 22:41
0
雪    币: 107
活跃值: (36)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
29
才接触脱壳,现在最简单的UPX是回了。
呵呵,下边的怎么破啊
PEBundle 2.0x - 2.4x-> Jeremy Collake [Overlay]
2008-10-8 14:07
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
原来我也能脱了啊!

高兴,呵呵,支持PEDIY

不过不用ESP定律找不到入口.
上传的附件:
2008-10-9 08:24
0
雪    币: 107
活跃值: (36)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
31
这个大家有录像吗?呵呵,我怎么没有看出来壳啊?好像就是一个普通的VC++程序,当然我知道它是伪装的。
2008-10-10 09:52
0
游客
登录 | 注册 方可回帖
返回
//