首页
社区
课程
招聘
EncryptPE 2003.5.18 主程序脱壳,不知操作步骤,请各位大侠指点!
发表于: 2005-11-28 11:40 3656

EncryptPE 2003.5.18 主程序脱壳,不知操作步骤,请各位大侠指点!

2005-11-28 11:40
3656
参照simonzh2000[US]的脱文脱壳,但不知道操作步骤,请simonzh2000[US]或各位大侠指点!谢谢!
按照脱文操作可以到OEP,但接下来不知该怎么办?具体如下:
00499780    55              PUSH EBP                                 // 到这里下断, F9,  下面修复 IAT (问题一:这里可以先dump下来吗?修复IAT要不要OD重新载入加密程序?)
00499781    8BEC            MOV EBP,ESP
00499783    83C4 F0         ADD ESP,-10
00499786    B8 98954900     MOV EAX,EncryptP.00499598
0049978B    E8 D4D3F6FF     CALL EncryptP.00406B64

// 往下找找, 发现程序里有很多这样的东西   (这一步是接上面的操作吗?)

00406AA0    90              NOP
00406AA1  - E9 8A70A000     JMP 00E0DB30
00406AA6    8BC0            MOV EAX,EAX
00406AA8    90              NOP
00406AA9  - E9 E26FA000     JMP 00E0DA90
00406AAE    8BC0            MOV EAX,EAX
00406AB0    90              NOP
00406AB1  - E9 4670A000     JMP 00E0DAFC
00406AB6    8BC0            MOV EAX,EAX
00406AB8    90              NOP
00406AB9  - E9 1270A000     JMP 00E0DAD0
00406ABE    8BC0            MOV EAX,EAX

// API
00406AA0    90              NOP
00406AA1  - E9 EE71A000     JMP 00E0DC94    (问题二:这里是要修改吗?需要OD重新载入程序吗?
...

7119D2FD    8B4424 0C       MOV EAX,DWORD PTR SS:[ESP+C]     // 如果JMP E0DC94
7119D301    89C3            MOV EBX,EAX                      // 那么 EAX=E0DC99
7119D303    83C0 02         ADD EAX,2
7119D306    8B00            MOV EAX,DWORD PTR DS:[EAX]
7119D308    8B00            MOV EAX,DWORD PTR DS:[EAX]
7119D30A    31D8            XOR EAX,EBX
7119D30C    894424 0C       MOV DWORD PTR SS:[ESP+C],EAX     // EAX 即 API
7119D310    8B00            MOV EAX,DWORD PTR DS:[EAX]
7119D312    3C CC           CMP AL,0CC                       // 检查1
7119D314    74 14           JE SHORT V1200351.7119D32A
7119D316    80FC CC         CMP AH,0CC                       // 检查2
7119D319    74 0F           JE SHORT V1200351.7119D32A
7119D31B    C1E8 10         SHR EAX,10
7119D31E    3C CC           CMP AL,0CC                       // 检查3
7119D320    74 08           JE SHORT V1200351.7119D32A
7119D322    80FC CC         CMP AH,0CC                       // 检查4
7119D325    74 03           JE SHORT V1200351.7119D32A
7119D327    EB 08           JMP SHORT V1200351.7119D331
7119D329  - E9 C60554F6     JMP 676DD8F4
7119D32E    1B71 01         SBB ESI,DWORD PTR DS:[ECX+1]
7119D331    5B              POP EBX
7119D332    58              POP EAX
7119D333    9D              POPFD
7119D334    C3              RETN

// 上面就是壳解密 API 的过程

// 写一段恢复 API 的补丁程序, 放到 7119CF60  (问题三:是什么时候把下面的补丁程序加入?需要OD重新载入程序吗?)

7119CF60    60                 PUSHAD
7119CF61    B8 50124000        MOV EAX,401250                              ; // 搜索从 401250 开始
7119CF66    BA 00000101        MOV EDX,1010000                             ; // 把 API 放到 1010000 开始的空闲区域
7119CF6B    66:8138 90E9       CMP WORD PTR DS:[EAX],0E990                 ; // 90 E9 = NOP, JMP XXXXXXX
7119CF70    0F85 2F000000      JNZ V1200351.7119CFA5
7119CF76    8BC8               MOV ECX,EAX                                 ; // [EAX] is  90 E9
7119CF78    8B40 02            MOV EAX,DWORD PTR DS:[EAX+2]                ; // EAX = XXXXXXXX
7119CF7B    03C1               ADD EAX,ECX
7119CF7D    83C0 06            ADD EAX,6
7119CF80    3D 00000070        CMP EAX,70000000                            ; // > 7000 0000 就是 API
7119CF85    0F87 0E000000      JA V1200351.7119CF99
7119CF8B    83C0 05            ADD EAX,5
7119CF8E    8BD8               MOV EBX,EAX                                 
7119CF90    83C0 02            ADD EAX,2
7119CF93    8B00               MOV EAX,DWORD PTR DS:[EAX]
7119CF95    8B00               MOV EAX,DWORD PTR DS:[EAX]
7119CF97    33C3               XOR EAX,EBX                                 ; // < 7000 0000 的 API
7119CF99    8902               MOV DWORD PTR DS:[EDX],EAX                  ; // 保存 API Address
7119CF9B    83C2 04            ADD EDX,4
7119CF9E    8BC1               MOV EAX,ECX
7119CFA0    90                 NOP
7119CFA1    90                 NOP
7119CFA2    90                 NOP
7119CFA3    90                 NOP
7119CFA4    90                 NOP
7119CFA5    83C0 04            ADD EAX,4
7119CFA8    3D 208C4300        CMP EAX,438C20                             ; // 搜索到 438C20 结束
7119CFAD  ^ 72 BC              JB SHORT V1200351.7119CF6B
7119CFAF    61                 POPAD

60 B8 50 12 40 00 BA 00 00 01 01 66 81 38 90 E9 0F 85 2F 00 00 00 8B C8 8B 40 02 03 C1 83 C0 06 3D 00 00 00
70 0F 87 0E 00 00 00 83 C0 05 8B D8 83 C0 02 8B 00 8B 00 33 C3 89 02 83 C2 04 8B C1 90 90 90 90 90 83 C0 04
3D 20 8C 43 00 72 BC 61               

IMPortRec,  VA=1010000, RVA = C10000, Size = 688, Get Imports 得到IAT

OEP: 00099780  IATRVA: 00C10000  IATSize: 00000688

............
............
............
............
............
接下来:
所有函数都 OK 了, 但顺序不对, 重新整理,
找一个空闲空间 4A8000-4AB000, 放整理好后的 IAT   (问题四:这一步是在OD载入加密程序中操作吗?什么时候操作?该如何操作?)

Kernel32     122    4A8000 - 4A81E4
User32       167    4A81EC - 4A8484
GDI32        75     4A848C - 4A85B4
comctl32     23     4A85BC - 4A8614
Oleaut32     15     4A861C - 4A8654
Advapi32     6      4A865C - 4A8670
version      3      4A8678 - 4A8680
Ole32        1      4A8688 - 4A8688
winspool     4      4A8690 - 4A869C
shell32      1      4A86A4 - 4A86A4
comdlg32     1      4A86AC - 4A86AC

把下面数据拷贝到 1011000(用Excel 花了我半小时)(问题五:如何用Excel拷贝?是拷贝到加密了的程序,还是dump后的程序?

00 80 4A 00
04 80 4A 00
08 80 4A 00
0C 80 4A 00
10 80 4A 00
14 80 4A 00
18 80 4A 00
1C 80 4A 00
20 80 4A 00
24 80 4A 00
28 80 4A 00
2C 80 4A 00
...........
...........

再写一段程序, 修复     (问题六:这一步是在什么时候操作?)

7119CF60    60              PUSHAD
7119CF61    B8 50124000     MOV EAX,401250                              ; // 搜索从 401250 开始
7119CF66    BA 00000101     MOV EDX,1010000                             ; // 从 1010000 开始的区域取API
7119CF6B    66:8138 90E9    CMP WORD PTR DS:[EAX],0E990                 ; // 90 E9 = NOP,
7119CF70    0F85 2F000000   JNZ V1200351.7119CFA5
7119CF76    8BC8            MOV ECX,EAX                                 ; // EAX SAVE IN ECX
7119CF78    8B40 02         NOP               
7119CF79    90              NOP
7119CF7A    90              NOP
7119CF7B    66:C700 FF25    MOV WORD PTR DS:[EAX],25FF                  ; // 改成 JMP [XXXXXXX]
7119CF80    83C0 02         ADD EAX,2
7119CF83    8BDA            MOV EBX,EDX
7119CF85    81C3 00100000   ADD EBX,1000                                ; // 1011000 开始区域放 IAT 地址
7119CF8B    8B1B            MOV EBX,DWORD PTR DS:[EBX]                  ; // 取出 XXXXXXX
7119CF8D    8918            MOV DWORD PTR DS:[EAX],EBX
7119CF8F    90              NOP
7119CF90    8B02            MOV EAX,DWORD PTR DS:[EDX]                  ; // 取出 API
7119CF92    8903            MOV DWORD PTR DS:[EBX],EAX                  ; // [XXXXXXX] = API
7119CF94    90              NOP
7119CF95    90              NOP
7119CF96    90              NOP
7119CF97    90              NOP
7119CF98    90              NOP
7119CF99    90              NOP
7119CF9A    90              NOP
7119CF9B    83C2 04         ADD EDX,4
7119CF9E    8BC1            MOV EAX,ECX
7119CFA0    90              NOP
7119CFA1    90              NOP
7119CFA2    90              NOP
7119CFA3    90              NOP
7119CFA4    90              NOP
7119CFA5    83C0 04         ADD EAX,4
7119CFA8    3D 208C4300     CMP EAX,438C20
7119CFAD  ^ 72 BC           JB SHORT V1200351.7119CF6B
7119CFAF    61              POPAD

60 B8 50 12 40 00 BA 00 00 01 01 66 81 38 90 E9 0F 85 2F 00 00 00 8B C8 90 90 90 66 C7 00 FF 25
83 C0 02 8B DA 81 C3 00 10 00 00 8B 1B 89 18 90 8B 02 89 03 90 90 90 90 90 90 90 83 C2 04 8B C1
90 90 90 90 90 83 C0 04 3D 20 8C 43 00 72 BC 61

回到 499780 dump
IMPortRec,  VA=4A8000, RVA = A8000, Size = 6B0, Get Imports 得到IAT

RVA = A9000, Fixdump

谢谢simonzh2000[US]大侠写出的脱文!只怪木头理解水平低,不能完成理解里面的意思,希望各位大侠能帮助我掌握里面的操作技巧!

再次谢谢了!

木头

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
simonzh2000[US]的EncryptPE 2003.5.18 主程序脱壳     

http://bbs.pediy.com/showthread.php?s=&threadid=1990&highlight=%C0%CF%CD%F5
2005-11-28 11:56
0
游客
登录 | 注册 方可回帖
返回