首页
社区
课程
招聘
[旧帖] [转帖]手工脱壳 eXPressor1.8 0.00雪花
发表于: 2011-5-2 22:33 1344

[旧帖] [转帖]手工脱壳 eXPressor1.8 0.00雪花

2011-5-2 22:33
1344
工具平台:Vsitasp2、OllyDBG、Petool 、ImpREC1.7

设置SOD全选

[code]

断点 VirtualProtectEx , F9 运行

75FF1DC3 >  8BFF            MOV EDI , EDI

75FF1DC5    55              PUSH EBP

75FF1DC6    8BEC            MOV EBP , ESP

75FF1DC8    FF75 14         PUSH DWORD PTR [EBP+0X14]

75FF1DCB    FF75 10         PUSH DWORD PTR [EBP+0X10]

75FF1DCE    FF75 0C         PUSH DWORD PTR [EBP+0X0C]

75FF1DD1    FF75 08         PUSH DWORD PTR [EBP+0X08]

75FF1DD4    6A FF           PUSH 0XFF

75FF1DD6    E8 FFBD0200     CALL 0X7601DBDA                          ; kernel32.VirtualProtectEx

75FF1DDB    5D              POP EBP

75FF1DDC    C2 1000         RETN 0X0010

禁用断点VirtualProtectEx

搜索 特征码 不多解释了 看前辈的教程吧 这里就是所谓的魔幻跳转

E8 ?? ?? ?? ?? 83 C4 04 85 C0 0F 85

00A12EA5    E8 8FEDFFFF     CALL 0X00A11C39

00A12EAA    83C4 04         ADD ESP , 0X04

00A12EAD    85C0            TEST EAX , EAX

00A12EAF    0F85 87000000   JNE 0X00A12F3C //魔幻跳转

C6 00 E8 8B 45 D4 40 89 45 D0 50 E8

00A132F3    C600 E8         MOV BYTE PTR [EAX] , 0XE8

00A132F6    8B45 D4         MOV EAX , DWORD PTR [EBP-0X2C]

00A132F9    40              INC EAX

00A132FA    8945 D0         MOV DWORD PTR [EBP-0X30] , EAX

00A132FD    50              PUSH EAX

00A132FE    E8 03000000     CALL 0X00A13306

00A13303    01EB            ADD EBX , EBP

00A13305    0B8B 04240FB6   OR ECX , DWORD PTR [EBX-0X49F0DBFC]

00A1330B    0001            ADD BYTE PTR [ECX] , AL

00A1330D    04 24           ADD AL , 0X24

00A1330F    C3              RET

分别在 00A12EAF ' 00A132F3 ' 2处下F2断点

程序中断在

00A12EA5    E8 8FEDFFFF     CALL 0X00A11C39

00A12EAA    83C4 04         ADD ESP , 0X04

00A12EAD    85C0            TEST EAX , EAX

00A12EAF    0F85 87000000   JNE 0X00A12F3C  //中断在此处

修改为 Jmp 0X00A12F3C

恢复VirtualProtectEx 断点F9 运行 再次中断

75FF1DC3 >  8BFF            MOV EDI , EDI

75FF1DC5    55              PUSH EBP

75FF1DC6    8BEC            MOV EBP , ESP

75FF1DC8    FF75 14         PUSH DWORD PTR [EBP+0X14]

75FF1DCB    FF75 10         PUSH DWORD PTR [EBP+0X10]

75FF1DCE    FF75 0C         PUSH DWORD PTR [EBP+0X0C]

75FF1DD1    FF75 08         PUSH DWORD PTR [EBP+0X08]

75FF1DD4    6A FF           PUSH 0XFF

75FF1DD6    E8 FFBD0200     CALL 0X7601DBDA                          ; kernel32.VirtualProtectEx

75FF1DDB    5D              POP EBP

75FF1DDC    C2 1000         RETN 0X0010

注意堆栈窗口

0012F66C    FFFFFFFF  |hProcess = FFFFFFFF

0012F670    004CD148  |Address = eXPresso.004CD148 右键转存到数据窗口

0012F674    00000004  |Size = 4

0012F678    00000040  |NewProtect = PAGE_EXECUTE_READWRITE

0012F67C    0012FD28  \pOldProtect = 0012FD28

004CD148  000FD5CA  收.

004CD14C  000FD5D6  终.

004CD150  000FD5E8  枵.

004CD154  000FD5FE  .

004CD158  000FD614  ?.

004CD15C  000FD62C  ,?.

004CD160  000FD63E  >?.

删除断点 VirtualProtectEx  F9运行几次 程序中断 00A12EAF

004CD148  7603A411  ?v     kernel32.lstrcmpW

004CD14C  76043BCE  ?v     kernel32.GlobalFindAtomA

004CD150  7607AEC7  钱v     kernel32.GlobalGetAtomNameA

004CD154  7603B27E  ~?v     kernel32.GetModuleFileNameW

004CD158  76039414  ?v     kernel32.InterlockedDecrement

004CD15C  76037F8F  ?v     kernel32.GetThreadLocale

iat 正确的解密出来了 ,那就取消断点00A12EAF F9运行 程序中断在

00A132F3    C600 E8         MOV BYTE PTR [EAX] , 0XE8  //中断在这里

00A132F6    8B45 D4         MOV EAX , DWORD PTR [EBP-0X2C]

00A132F9    40              INC EAX

00A132FA    8945 D0         MOV DWORD PTR [EBP-0X30] , EAX

00A132FD    50              PUSH EAX

查看数据窗口 发现绝大多数的iat 都解密出来了 但是还有2个函数没有解密出来

004CD31C  7603CCDB  厶v     kernel32.MultiByteToWideChar

004CD320  00A11905  ?               //1处

004CD324  7603C905  ?v     kernel32.GetCurrentProcess

004CD37C  760122BE  ?v     kernel32.CreateFileMappingA

004CD380  760368F0  餳v     kernel32.MapViewOfFile

004CD384  7603AD55  U?v     kernel32.VirtualAlloc

004CD388  00A118B8  ??            //2 处

004CD38C  7603A9C1  俩v     kernel32.WriteFile

004CD390  76038BFB  麐v     kernel32.IsBadReadPtr

004CD394  7603A995  暕v     kernel32.UnmapViewOfFile

菜鸟没啥办法只能重复操作 当解密到

004CD31C  7603CCDB  厶v     kernel32.MultiByteToWideChar

恢复VirtualProtectEx 断点F9 运行 F8 继续跟踪

01742E30   /75 2C             JNE 0X01742E5E       //修改成JMP 0X01742E5E

01742E32   |E8 03000000       CALL 0X01742E3A

01742E37   |EB 02             JMP 0X01742E3B

01742E39   |F7C3 C745FC05     TEST EBX , 0X05FC45C7

01742E3F   |197401 EB         SBB DWORD PTR [ECX+EAX-0X15] , ESI

01742E43   |01BB 6A048D45     ADD DWORD PTR [EBX+0X458D046A] , EDI

01742E49   |FC                CLD

发现 004CD320  iat 已经正确的解密出来

004CD31C  7603CCDB  厶v     kernel32.MultiByteToWideChar

004CD320  7603903B  ;?v     kernel32.GetProcAddress

004CD324  7603C905  ?v     kernel32.GetCurrentProcess

004CD328  7601C5AC  v     kernel32.GetVersion

004CD32C  7603D006  ?v     kernel32.GetCurrentThread

当ait 解密到 004CD384  7603AD55  U?v     kernel32.VirtualAlloc 继续跟踪

017451E7   /74 27             JE 0X01BE5210  改成跳转

0174525A   /0F85 9C000000     JNE 0X01BE52FC 改成跳转

发现 004CD388  iat 已经正确的解密出来

004CD388  7603AE8D  嵁v     kernel32.CloseHandle

017432F3   下断点F9运行 所有的iat 都解密完毕  现在把iat 会写到text段  查看iat 的开始

004CCFFC  00000000  ....

抄袭某牛的一段脚本

var iatadd

var iattx

var begin

mov begin,eip

start:

mov iatadd,[ebp-18]

mov iattx,eax

ESTO

cmp eip,begin

jne end

mov [iattx],15ff

find 004ccffc,iatadd

mov iatadd,$RESULT

add iattx,2

mov [iattx],iatadd

jmp start

end:

MSG "ok"

004A4225    E8 88C20000       CALL 0X004B04B2                          ; eXPresso.004B04B2

004A422A  ^ E9 16FEFFFF       JMP 0X004A4045                           ; eXPresso.004A4045

在程序4A4225处下段 程序运行出现nag界面点进去 程序中断在OEP  petool 完全转存 ImpREC1.7

修复IAT ,运行测试 OK

附上去掉nag

004ADB0D    83E0 01         AND EAX,1    //mov al,1
004016B7    F705 14485000 0>TEST DWORD PTR DS:[504814],4000000
多次检测 所以修改 【504814】 =4000000
00414CC4   |90              NOP  //原 call eax
00414CC5   |90              NOP
00414EDF    68 BCFD4C00     PUSH 4CFDBC                              ; Estelle[UpK] //ps的用户名

0044BBA0   /75 2E           JNZ SHORT 0044BBD0                       ; Unpack.0044BBD0   //jmp 0044BBD0
0044BBA2   |68 C4694D00     PUSH 4D69C4                              ; Unregistered version of eXPressor
0044BBA7   |8D8424 A8020000 LEA EAX,DWORD PTR SS:[ESP+2A8]
0044BBAE   |6A 40           PUSH 40
0044BBB0   |50              PUSH EAX
0044BBB1   |E8 04430500     CALL 0049FEBA                            ; Unpack.0049FEBA
0044BBB6   |68 30694D00     PUSH 4D6930                              ; This program was protected by an Unregistered version of eXPressor - Software Protection System!\r\nThis software is not licensed for distribution!
0044BBBB   |8D8C24 F4020000 LEA ECX,DWORD PTR SS:[ESP+2F4]
0044BBC2   |68 00020000     PUSH 200
0044BBC7   |51              PUSH ECX
0044BBC8   |E8 ED420500     CALL 0049FEBA                            ; Unpack.0049FEBA
0044BBCD   |83C4 18         ADD ESP,18
0044BBD0   \F78424 3C020000>TEST DWORD PTR SS:[ESP+23C],80000000

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1981
活跃值: (771)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
2
CtrlC、CtrlV ?
2011-5-2 22:47
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
完全个人操作记录,要是加点解释就好了!
2011-5-3 08:26
0
游客
登录 | 注册 方可回帖
返回
//