Hmily 发表于 2009-1-27 23:48

一个VB软件Enigma Protector脱壳笔记

From:Unpack.cn   unppnu

首先祝fly兄弟及各位兄弟们节日愉快!

看到Enigma Protector的壳,还没有动手脱壳过。

春节没事了,就下载一个某网站Enigma Protector加壳的二次加密软件练手,打发时间。

00421C6D   55            push ebp                                  ; 典型Enigma Protector入口
00421C6E   8BEC          mov ebp,esp
00421C70   83C4 F0       add esp,-10
00421C73   B8 00104000   mov eax,练习目标.00401000
00421C78   E8 01000000   call 练习目标.00421C7E
00421C7D   9A 83C4108B E>call far 5DE5:8B10C483
00421C84   - E9 DBC61E00   jmp 练习目标.0060E364                     ; F4到这里,F8。
00421C89   3AB6 9F2324D6 cmp dh,byte ptr ds:
--------------------------------------------------------------------------------------------------------
Enigma Protector的壳,开始遇到jmp直接F4,这样快点。

经过N个jmp来到这里。

0060E73C   ^\E9 D9FFFFFF   jmp 练习目标.0060E71A
0060E741   68 00400000   push 4000                                 ; F4直接到这里
0060E746   68 00B40C00   push 0CB400
0060E74B   56            push esi
0060E74C   FF95 B8A01A00 call dword ptr ss:
......
0060E7B9   0118          add dword ptr ds:,ebx
0060E7BB   49            dec ecx
0060E7BC   49            dec ecx
0060E7BD   83C7 02       add edi,2
0060E7C0   ^ E9 C8FFFFFF   jmp 练习目标.0060E78D
0060E7C5   E9 04000000   jmp 练习目标.0060E7CE                     ; F4直接到这里
......
0060E7E5   3010          xor byte ptr ds:,dl
0060E7E7   40            inc eax
0060E7E8   49            dec ecx
0060E7E9   ^ 0F85 F6FFFFFF jnz 练习目标.0060E7E5
0060E7EF   E9 04000000   jmp 练习目标.0060E7F8                     ; F4直接到这里
0060E7F4   D5 68         aad 68                                    ; 观察这里代码变化
0060E7F6   1E            push ds
0060E7F7   17            pop ss
......
0060E88A   8945 00       mov dword ptr ss:,eax
0060E88D   58            pop eax
0060E88E   81C5 04000000 add ebp,4                                 ; 注意下面的2个jmp
0060E894   ^ E9 BFFFFFFF   jmp 练习目标.0060E858                     ; jmp返回
0060E899   5D            pop ebp
0060E89A   81C7 14000000 add edi,14
0060E8A0   ^ E9 5FFFFFFF   jmp 练习目标.0060E804                     ; jmp返回
......
0060E8C8   8B40 04       mov eax,dword ptr ds:
0060E8CB   90            nop
0060E8CC   56            push esi
0060E8CD   03C6          add eax,esi
0060E8CF   FFD0          call eax                                  ; 看到这个就快返回了
0060E8D1   61            popad
0060E8D2   8B40 00       mov eax,dword ptr ds:
......
0060E8DF   8B70 3C       mov esi,dword ptr ds:
0060E8E2   96            xchg eax,esi
0060E8E3   8B8430 280000>mov eax,dword ptr ds:
0060E8EA   03C6          add eax,esi
0060E8EC   50            push eax
0060E8ED   C3            retn                                    ; F4到这里,F8。
--------------------------------------------------------------------------------------------------------
006B18C4   55            push ebp                                  ; 返回到这里了
006B18C5   8BEC          mov ebp,esp
006B18C7   83C4 C4       add esp,-3C
006B18CA   B8 24156B00   mov eax,练习目标.006B1524
006B18CF   E8 0868F6FF   call 练习目标.006180DC
006B18D4   A1 7C9E6C00   mov eax,dword ptr ds:
006B18D9   C600 01       mov byte ptr ds:,1
006B18DC   E8 0B47F6FF   call 练习目标.00615FEC                     ; F4到这里,F7
006B18E1   8D40 00       lea eax,dword ptr ds:
006B18E4   0000          add byte ptr ds:,al
006B18E6   0000          add byte ptr ds:,al

在这里首先要处理IAT加密,返回到这里后,Ctrl+S

搜索:mov dword ptr ds:,ecx

共找到3个,全部nop掉。
=========================================================================
00684494   8B0C8D B0856B>mov ecx,dword ptr ds:
0068449B   894C82 04   mov dword ptr ds:,ecx      ; nop
0068449F   83C3 04       add ebx,4
006844A2   E9 D8000000   jmp 练习目标.0068457F
=========================================================================
00684592   8B0C8D 58866B>mov ecx,dword ptr ds:
00684599   894C82 04   mov dword ptr ds:,ecx      ; nop
0068459D   83C3 04       add ebx,4
006845A0   66:8B3B       mov di,word ptr ds:
006845A3   83C3 02       add ebx,2
006845A6   66:85FF       test di,di
006845A9   74 5E         je short 练习目标.00684609
==========================================================================
00685171   8B4D F0       mov ecx,dword ptr ss:
00685174   894C82 04   mov dword ptr ds:,ecx      ; nop
00685178   47            inc edi
00685179   FF4D D0       dec dword ptr ss:
0068517C   ^ 0F85 CAFAFFFF jnz 练习目标.00684C4C
-------------------------------------------------------------------------------------------------------
进入006B18DC的call里。

00615FEC   53            push ebx
00615FED   56            push esi
00615FEE   57            push edi
00615FEF   55            push ebp
00615FF0   BB 30B66C00   mov ebx,练习目标.006CB630
00615FF5   BE 00206B00   mov esi,练习目标.006B2000
00615FFA   BF 40B06C00   mov edi,练习目标.006CB040
00615FFF   807B 28 00    cmp byte ptr ds:,0
......
00615F30   31C0          xor eax,eax
00615F32   8705 00206B00 xchg dword ptr ds:,eax
00615F38   F7D8          neg eax
00615F3A   19C0          sbb eax,eax
00615F3C   40            inc eax
00615F3D   BF 30B66C00   mov edi,练习目标.006CB630
00615F42   8B5F 18       mov ebx,dword ptr ds:
00615F45   8B6F 14       mov ebp,dword ptr ds:
00615F48   FF77 1C       push dword ptr ds:
00615F4B   FF77 20       push dword ptr ds:
00615F4E   8B37          mov esi,dword ptr ds:
00615F50   B9 0B000000   mov ecx,0B
00615F55   F3:A5         rep movs dword ptr es:,dword ptr d>
00615F57   5F            pop edi
00615F58   5E            pop esi
00615F59   C9            leave
00615F5A   C2 0C00       retn 0C                                 ; F4到这里,F8返回
00615F5D   C3            retn
-------------------------------------------------------------------------------------------------------
返回到这里。

006B0A4F   C3            retn
006B0A50   55            push ebp                              ; 练习目标.00400000
006B0A51   8BEC          mov ebp,esp
006B0A53   81C4 E4FEFFFF add esp,-11C
006B0A59   53            push ebx
006B0A5A   56            push esi
006B0A5B   57            push edi
006B0A5C   33C0          xor eax,eax
006B0A5E   8945 E8       mov dword ptr ss:,eax
006B0A61   8945 E4       mov dword ptr ss:,eax
......
006B0AFA   8160 14 F00FF>and dword ptr ds:,FFFF0FF0
006B0B01   8160 18 00DC0>and dword ptr ds:,0DC00
006B0B08   C780 B8000000>mov dword ptr ds:,练习目标.006B0B15 ; 注意6B0B15地址
006B0B12   31C0          xor eax,eax
006B0B14   C3            retn
006B0B15   64:8F05 00000>pop dword ptr fs:                  ; 6B0B15在这里对应
006B0B1C   83C4 04       add esp,4
006B0B1F   68 3B0B6B00   push 练习目标.006B0B3B
......
006B0B61   8378 10 00    cmp dword ptr ds:,0
006B0B65   ^ 0F85 B560FDFF jnz 练习目标.00686C20
006B0B6B   C780 B8000000>mov dword ptr ds:,练习目标.006B0B78 ; 注意6B0B78地址
006B0B75   31C0          xor eax,eax
006B0B77   C3            retn
006B0B78   64:8F05 00000>pop dword ptr fs:                  ; 6B0B78和这里对应
006B0B7F   83C4 04       add esp,4
006B0B82   B8 00000100   mov eax,10000                           ; UNICODE

"ALLUSERSPROFILE=C:\Documents and Settings\All Users"
......
006B0BB9   B8 F70B6B00   mov eax,练习目标.006B0BF7
006B0BBE   E8 85E6FCFF   call 练习目标.0067F248
006B0BC3   010424      add dword ptr ss:,eax
006B0BC6   C3            retn                                    ; F4到这里,F8返回
--------------------------------------------------------------------------------------------------------
返回到这里溜一圈。

006B0BF7   C643 12 01    mov byte ptr ds:,1
006B0BFB   E8 3CC6FCFF   call 练习目标.0067D23C
006B0C00   E8 AB45FDFF   call 练习目标.006851B0
006B0C05   C643 06 01    mov byte ptr ds:,1
006B0C09   E8 FA34FDFF   call 练习目标.00684108
......
006B0CD5   E8 AE77F6FF   call 练习目标.00618488                   ; jmp to kernel32.GetComputerNameA
006B0CDA   8B0D BC9F6C00 mov ecx,dword ptr ds:            ; 练习目标.006CBB14
006B0CE0   8B15 509F6C00 mov edx,dword ptr ds:            ; 练习目标.006CBA10
006B0CE6   8B12          mov edx,dword ptr ds:
006B0CE8   A1 889C6C00   mov eax,dword ptr ds:
006B0CED   E8 6631F7FF   call 练习目标.00623E58                   ; 下面的注册表是个特征
006B0CF2   68 C8146B00   push 练习目标.006B14C8                   ; ASCII "Software\Enigma Protector\"
006B0CF7   A1 A8A06C00   mov eax,dword ptr ds:
......
006B0DFF   8160 14 F00FF>and dword ptr ds:,FFFF0FF0
006B0E06   8160 18 00DC0>and dword ptr ds:,0DC00
006B0E0D   C780 B8000000>mov dword ptr ds:,练习目标.006B0E1A ; 注意6B0E1A这个地址
006B0E17   31C0          xor eax,eax
006B0E19   C3            retn
006B0E1A   64:8F05 00000>pop dword ptr fs:                  ; 6B0E1A地址在这里对应
006B0E21   83C4 04       add esp,4
006B0E24   E8 0FE2FCFF   call 练习目标.0067F038
006B0E29   E8 46E4FCFF   call 练习目标.0067F274
006B0E2E   50            push eax
006B0E2F   89C1          mov ecx,eax
006B0E31   B8 6F0E6B00   mov eax,练习目标.006B0E6F
006B0E36   E8 0DE4FCFF   call 练习目标.0067F248
006B0E3B   010424      add dword ptr ss:,eax
006B0E3E   C3            retn                                    ; F4到这里,F8返回
--------------------------------------------------------------------------------------------------------
返回后,F8单步走到返回。

006B1095   E8 A2C1FCFF   call 练习目标.0067D23C
006B109A   E8 D5E1FCFF   call 练习目标.0067F274
006B109F   50            push eax
006B10A0   89C1          mov ecx,eax
006B10A2   B8 E0106B00   mov eax,练习目标.006B10E0
006B10A7   E8 9CE1FCFF   call 练习目标.0067F248
006B10AC   010424      add dword ptr ss:,eax
006B10AF   C3            retn                                    ; F4到这里,F8返回
-------------------------------------------------------------------------------------------------------
返回到这里。

006B10E0   68 FC106B00   push 练习目标.006B10FC
006B10E5   64:FF35 00000>push dword ptr fs:
006B10EC   64:8925 00000>mov dword ptr fs:,esp
006B10F3   31C0          xor eax,eax
006B10F5   3100          xor dword ptr ds:,eax
006B10F7   ^ E9 245BFDFF   jmp 练习目标.00686C20
......
006B1120   8160 14 F00FF>and dword ptr ds:,FFFF0FF0
006B1127   8160 18 00DC0>and dword ptr ds:,0DC00
006B112E   C780 B8000000>mov dword ptr ds:,练习目标.006B113B ; 注意6B113B这个地址
006B1138   31C0          xor eax,eax
006B113A   C3            retn
006B113B   64:8F05 00000>pop dword ptr fs:                  ; 6B113B地址在这里对应
006B1142   83C4 04       add esp,4
006B1145   A1 A8A06C00   mov eax,dword ptr ds:
......
006B11E0   E8 9F60FDFF   call 练习目标.00687284
006B11E5   A1 A8A06C00   mov eax,dword ptr ds:
006B11EA   80B8 6A1C0000>cmp byte ptr ds:,0            ; F4直接到这里
006B11F1   74 0C         je short 练习目标.006B11FF                  ; 修改=0
006B11F3   A1 A8A06C00   mov eax,dword ptr ds:
006B11F8   8B00          mov eax,dword ptr ds:
006B11FA   E8 F95BFDFF   call 练习目标.00686DF8
......
006B12B7   E8 30F6FFFF   call 练习目标.006B08EC
006B12BC   33C0          xor eax,eax
006B12BE   5A            pop edx
006B12BF   59            pop ecx
006B12C0   59            pop ecx
006B12C1   64:8910       mov dword ptr fs:,edx
006B12C4   EB 53         jmp short 练习目标.006B1319             ; F4直接到这里
......
006B131D   E8 CEBDFCFF   call 练习目标.0067D0F0
006B1322   E8 4DDFFCFF   call 练习目标.0067F274
006B1327   50            push eax
006B1328   89C1          mov ecx,eax
006B132A   B8 68136B00   mov eax,练习目标.006B1368
006B132F   E8 14DFFCFF   call 练习目标.0067F248
006B1334   010424      add dword ptr ss:,eax
006B1337   C3            retn                                    ; F4到这里,F8返回
--------------------------------------------------------------------------------------------------------
返回到这里了。

006B1368   A1 A4A06C00   mov eax,dword ptr ds:         ; 返回到这里
006B136D   8B00          mov eax,dword ptr ds:
006B136F   8B15 A8A06C00 mov edx,dword ptr ds:         ; 练习目标.006CBB50
006B1375   0342 28       add eax,dword ptr ds:
006B1378   8B15 A8A06C00 mov edx,dword ptr ds:         ; 练习目标.006CBB50
006B137E   0382 EC000000 add eax,dword ptr ds:
006B1384   83C0 18       add eax,18
......
006B1470   E8 03F0FCFF   call 练习目标.00680478
006B1475   8B45 14       mov eax,dword ptr ss:
006B1478   50            push eax
006B1479   A1 A8A06C00   mov eax,dword ptr ds:
006B147E   8B80 0C010000 mov eax,dword ptr ds:
006B1484   50            push eax
006B1485   8B45 18       mov eax,dword ptr ss:
006B1488   50            push eax                              ; 看上面的代码多熟悉呀
006B1489   E8 0EF0FCFF   call 练习目标.0068049C                  ; F4到这里,F7进入
006B148E   E8 8D57FDFF   call 练习目标.00686C20
--------------------------------------------------------------------------------------------------------
进入006B1489的call里。

0068049C   55            push ebp                              ; 固化了的格式,没问题
0068049D   8BEC          mov ebp,esp
0068049F   83C4 F4       add esp,-0C
006804A2   53            push ebx
006804A3   56            push esi
006804A4   57            push edi
006804A5   8B7D 0C       mov edi,dword ptr ss:
006804A8   8D5D F8       lea ebx,dword ptr ss:
006804AB   8D75 F4       lea esi,dword ptr ss:
006804AE   B8 00020000   mov eax,200
006804B3   E8 3442F9FF   call 练习目标.006146EC
......

向下拉N多的代码,到这里了。

00680B80   E8 478BFAFF   call 练习目标.006296CC
00680B85   8B45 FC       mov eax,dword ptr ss:
00680B88   - FFE0          jmp eax                                 ; F4直接到这里
00680B8A   5F            pop edi
00680B8B   5E            pop esi
00680B8C   5B            pop ebx
00680B8D   8BE5          mov esp,ebp
00680B8F   5D            pop ebp
00680B90   C2 0C00       retn 0C
--------------------------------------------------------------------------------------------------------
从00680B88跳来。

015867A0   E8 CF8A0FFF   call 练习目标.0067F274                   ; 来到这里,F8单步
015867A5   E9 04000000   jmp 015867AE
015867AA   5A            pop edx
015867AB   91            xchg eax,ecx
015867AC   ^ 7D 82         jge short 01586730
015867AE   8905 90376E00 mov dword ptr ds:,eax
......

省略N个jmp

015868A1   ^\0F85 D8FFFFFF jnz 0158687F                            ; 别回跳。
015868A7   E9 04000000   jmp 015868B0                            ; F4直接到这里
015868AC   F681 F05A81C4>test byte ptr ds:,7C
......

省略N个jmp

015B305C   68 34144000   push 401434                           ; ASCII "VB5!6&vb6chs.dll"
015B3061   E8 2AE2E4FE   call 练习目标.00401290
015B3066   - E9 37E2E4FE   jmp 练习目标.004012A2

终于到地方了,原来VB的。
-------------------------------------------------------------------------------------------------------
Ctrl+G: 00401000

Ctrl+B: FF 25

找到这里了。

0040111C   90            nop
0040111D   - E9 AF1E1A00   jmp 练习目标.005A2FD1
00401122   - FF25 80104000 jmp dword ptr ds:               ; msvbvm60.rtcShell
00401128   90            nop
00401129   - E9 AC1E1A00   jmp 练习目标.005A2FDA
0040112E   - FF25 A0104000 jmp dword ptr ds:               ; msvbvm60.rtcStringBstr
......
00401279   - E9 581E1A00   jmp 练习目标.005A30D6
0040127E   - FF25 9C104000 jmp dword ptr ds:               ; msvbvm60.GetMemNewObj
00401284   90            nop
00401285   - E9 551E1A00   jmp 练习目标.005A30DF
0040128A   - FF25 AC104000 jmp dword ptr ds:               ; msvbvm60.SetMemNewObj
00401290   90            nop
00401291   - E9 521E1A00   jmp 练习目标.005A30E8
00401296   0000          add byte ptr ds:,al
00401298   E8 7E483E4D   call 4D7E5B1B
0040129D   B7 01         mov bh,1
0040129F   A4            movs byte ptr es:,byte ptr ds:[esi>

按照VB的OEP格式应该在00401298,复制015868A1二行代码,修正OEP,新建EIP。

00401285   - E9 551E1A00   jmp 练习目标.005A30DF
0040128A   - FF25 AC104000 jmp dword ptr ds:               ; msvbvm60.SetMemNewObj
00401290   90            nop
00401291   - E9 521E1A00   jmp 练习目标.005A30E8
00401296   0000          add byte ptr ds:,al
00401298   68 34144000   push 练习目标.00401434                  ; ASCII "VB5!6&vb6chs.dll"
0040129D   E8 EEFFFFFF   call 练习目标.00401290
004012A2   0000          add byte ptr ds:,al
004012A4   40            inc eax
004012A5   0000          add byte ptr ds:,al
--------------------------------------------------------------------------------------------------------
LordPE转存为dumped.exe。

ImportREC,oep=401298-400000=00001298,rva=00001000。

保存。

PEiD测试为Microsoft Visual Basic 5.0 / 6.0。

这里省略与壳无关的某过程。
-------------------------------------------------------------------------------------------------------
前面已经说明,该软件是二次加密的软件,原版加了狗壳。

在原版上直接修改代码可以秒破解。

因属于商业软件,这里就不提供附件了。

crackforchin 发表于 2009-9-11 05:29

这个太跳了,要是有附件就好了
页: [1]
查看完整版本: 一个VB软件Enigma Protector脱壳笔记