首页
社区
课程
招聘
[旧帖] [求助]还是脱UPX壳的问题,高手能不能讲详细些 0.00雪花
发表于: 2009-6-8 08:23 1570

[旧帖] [求助]还是脱UPX壳的问题,高手能不能讲详细些 0.00雪花

2009-6-8 08:23
1570
各位高手大哥们,本人想学脱壳,第一次脱UPX这类壳,研究了三天,没法脱,请高手们指教下,我脱的是红色警戒2的游戏主程序平台NPManager.exe,用PEiD V0.94查壳:

入口点:000131E0           EP区段:UPX1
文件偏移:000065E0         首字节:60,BE,00,D0
链接器信息:8.0            子系统:Win32 GUI
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo

在ollyDbg中打开这个NPManager.exe文件,出现前几行如下:

004131E0 >  60              PUSHAD
004131E1    BE 00D04000     MOV ESI,NPManage.0040D000
004131E6    8DBE 0040FFFF   LEA EDI,DWORD PTR DS:[ESI+FFFF4000]
004131EC    57              PUSH EDI

我一直按F8往下走,有几个回跳的,高手看看我F4的位置对不对,如下:

00413209  ^\72 ED           JB SHORT NPManage.004131F8
0041320B    B8 01000000     MOV EAX,1(我在这里F4跳到这个位置)

往下、、、

004132AD  ^\E9 4CFFFFFF     JMP NPManage.004131FE
004132B2    5E              POP ESI     NPManage.00401000(我在这里F4跳到这个位置)
004132B3    89F7            MOV EDI,ESI
004132B5    B9 94030000     MOV ECX,394
004132BA    8A07            MOV AL,BYTE PTR DS:[EDI]
004132BC    47              INC EDI
004132BD    2C E8           SUB AL,0E8

004132C1  ^\77 F7           JA SHORT NPManage.004132BA
004132C3    803F 09         CMP BYTE PTR DS:[EDI],9(我在这里F4跳到这个位置)
004132C6  ^ 75 F2           JNZ SHORT NPManage.004132BA
004132C8    8B07            MOV EAX,DWORD PTR DS:[EDI](我在这里F4跳到这个位置)
004132CA    8A5F 04         MOV BL,BYTE PTR DS:[EDI+4]

004132E4  ^\E2 D9           LOOPD SHORT NPManage.004132BF
004132E6    8DBE 00100100   LEA EDI,DWORD PTR DS:[ESI+11000](我在这里F4跳到这个位置)
004132EC    8B07            MOV EAX,DWORD PTR DS:[EDI]
004132EE    09C0            OR EAX,EAX

00413312   /79 07           JNS SHORT NPManage.0041331B(这里说要往下跳到0041331B,在下面没有啊,我再按F8时,它就到0041331B段,这里要不要F4跳过去?)
00413314   |0FB707          MOVZX EAX,WORD PTR DS:[EDI]
00413317   |47              INC EDI
00413318   |50              PUSH EAX
00413319   |47              INC EDI
0041331A   |B9 5748F2AE     MOV ECX,AEF24857
0041331F    55              PUSH EBP
00413320    FF96 48470100   CALL DWORD PTR DS:[ESI+14748]
00413326    09C0            OR EAX,EAX

我按F8后跳到0041331B,

0041331B    57              PUSH EDI                                 ; NPManage.00412009
0041331C    48              DEC EAX
0041331D    F2:AE           REPNE SCAS BYTE PTR ES:[EDI]
0041331F    55              PUSH EBP

然后往下走、、、

0041332F  ^\EB D8           JMP SHORT NPManage.00413309
00413331    FF96 50470100   CALL DWORD PTR DS:[ESI+14750]
00413337    8BAE 4C470100   MOV EBP,DWORD PTR DS:[ESI+1474C]  ; kernel32.VirtualProtect(这里F4跳到这个位置)      
0041333D    8DBE 00F0FFFF   LEA EDI,DWORD PTR DS:[ESI-1000]
00413343    BB 00100000     MOV EBX,1000

往下走就到了POPAD了,网上教程说出口就在附近

00413366    61              POPAD
00413367    8D4424 80       LEA EAX,DWORD PTR SS:[ESP-80]
0041336B    6A 00           PUSH 0
0041336D    39C4            CMP ESP,EAX
0041336F  ^ 75 FA           JNZ SHORT NPManage.0041336B
00413371    83EC 80         SUB ESP,-80
00413374  - E9 7CE4FEFF     JMP NPManage.004017F5

上面这段最后那个JMP NPManage.004017F5是不是出口点,它前面还有一个回跳,是不是要F4到00413371    83EC 80         SUB ESP,-80这里,请高手指点一下,我选择跳过那个回跳,到00413371,F8后到004017F5:

004017F5    E8 8C1A0000     CALL NPManage.00403286
004017FA  ^ E9 16FEFFFF     JMP NPManage.00401615
004017FF    55              PUSH EBP
00401800    8BEC            MOV EBP,ESP
00401802    51              PUSH ECX
00401803    56              PUSH ESI
00401804    8B75 0C         MOV ESI,DWORD PTR SS:[EBP+C]
00401807    56              PUSH ESI

到了这里之后我发现第一个不是PUSH EBP,而是CALL,如何办,请高手们指导下,我错在那里了。多谢了。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看了一下,不过现在上班没空,晚点帮你调试下
2009-6-8 10:14
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢了。
2009-6-8 10:31
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不要单步,这是一个变形壳来的,oep都被改不成形了

程序加载用 ctrl+s 打入 popad,不要选择整个块

直接就来了关键跳转处

00413366    61              popad
00413367    8D4424 80       lea eax,dword ptr ss:[esp-80]
0041336B    6A 00           push 0
0041336D    39C4            cmp esp,eax
0041336F  ^ 75 FA           jnz short NPManage.0041336B
00413371    83EC 80         sub esp,-80
00413374  - E9 7CE4FEFF     jmp NPManage.004017F5

00413366    61              popad 处按F2断点,然后shift+F9
接着单步,到
00413371    83EC 80         sub esp,-80 下F4

接着就来到了

004017F5   .  E8 8C1A0000   call NPManage.00403286
004017FA   .^ E9 16FEFFFF   jmp NPManage.00401615

F8单步,就直接跳转到变形壳的oep去了
00401615   > /6A 60         push 60
00401617   . |68 30B84000   push NPManage.0040B830
0040161C   . |E8 671A0000   call NPManage.00403088
00401621   . |8365 FC 00    and dword ptr ss:[ebp-4],0
00401625   . |8D45 90       lea eax,dword ptr ss:[ebp-70]
00401628   . |50            push eax                                 ; /pStartupinfo
00401629   . |FF15 70A04000 call dword ptr ds:[40A070]               ; \GetStartupInfoA

这是变形壳的地址,高手可以把这个补上,偶还不行
2009-6-8 15:41
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
多谢CYGWIN啦,非常的感谢。现在请懂脱变形壳的高手再帮帮我,看看如何脱出来,在此感激不尽哈!!
2009-6-9 15:18
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
请高手帮帮小弟讲解下,感激不尽
2009-6-9 16:47
0
雪    币: 318
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
004131E0 >  60              pushad
004131E1    BE 00D04000     mov esi,NPManage.0040D000  //此处用esp定律

到此处
00413367    8D4424 80       lea eax,dword ptr ss:[esp-80]
0041336B    6A 00           push 0
0041336D    39C4            cmp esp,eax
0041336F  ^ 75 FA           jnz short NPManage.0041336B
00413371    83EC 80         sub esp,-80                                 //此处F400413374  - E9 7CE4FEFF     jmp NPManage.004017F5

jmp跳向这里
004017F5    E8 8C1A0000     call NPManage.00403286   //此处其实可以脱壳,为了找iat方便,我们不在这里脱004017FA  ^ E9 16FEFFFF     jmp NPManage.00401615           

jmp跳到这里:

00401615    6A 60           push 60
00401617    68 30B84000     push NPManage.0040B830
0040161C    E8 671A0000     call NPManage.00403088

脱壳,然后在
00401629    FF15 70A04000   call dword ptr ds:[40A070]            ; kernel32.GetStartupInfoA

此处右键,数据窗口跟随->内存地址
看数据窗口:
一直往上翻,直到:
00409FFC  00000000
0040A000  771FB5F9  COMCTL32.InitCommonControls
0040A004  00000000
0040A008  77EF5EDB  GDI32.SetBkMode

00409FFC作为我们的IAT1
再往下翻,直到:
0040A184  77D1D869  USER32.GetDlgCtrlID
0040A188  77D259C9  USER32.EndDialog
0040A18C  00000000
0040A18C作为我们的IAT2
IAT=IAT1-00400000=9FFC
SIZE=IAT2-IAT1=0040A18C-00409FFC=190
OEP=1645
填上上面的数据修复
运行程序,提示

我们用od打开修复后的程序F9运行,出现提示后
F12暂停,然后按od上面的那排快捷键上的K

0012FEBC   00401036   USER32.MessageBoxW                    t_.00401030      
此处右键->显示调用
来到
00401017    FF15 48A04000   call dword ptr ds:[<&kernel32.GetFile>; kernel32.GetFileAttributesW
0040101D    83F8 FF         cmp eax,-1
00401020    75 1C           jnz short t_.0040103E
00401022    6A 10           push 10
00401024    68 BCB34000     push t_.0040B3BC                      ; UNICODE "NPManager"
00401029    68 D0B34000     push t_.0040B3D0                      ; UNICODE "You must run NPManager.exe from Yuri's Revenge directory"
0040102E    6A 00           push 0
00401030    FF15 78A14000   call dword ptr ds:[<&user32.MessageBo>; USER32.MessageBoxW

把00401020    75 1C           jnz short t_.0040103E中的jnz改为jmp就可以了
上传的附件:
2009-6-9 22:24
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
非常感谢RENWOXIAO
2009-6-10 08:15
0
雪    币: 172
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习了...
2009-6-10 13:13
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
晕哦,我照RENWOXIAO说的又搞了三天,我还是没法找到OEP,我参照你们指点的那样做了,可是到了
“一直往上翻,直到:
00409FFC  00000000
0040A000  771FB5F9  COMCTL32.InitCommonControls
0040A004  00000000
0040A008  77EF5EDB  GDI32.SetBkMode”

我老是找不到这几行啊,只看到了
00409FFD    0000            ADD BYTE PTR DS:[EAX],AL
00409FFF    0009            ADD BYTE PTR DS:[ECX],CL
0040A001    B6 1F           MOV DH,1F
0040A003    77 00           JA SHORT NPManage.0040A005
0040A005    0000            ADD BYTE PTR DS:[EAX],AL
0040A007    00DB            ADD BL,BL

真的很打击人也,请高手们再详细讲下,我真的不知道如何做了、、、
2009-6-13 15:51
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
一直往上翻,直到:
00409FFC  00000000
0040A000  771FB5F9  COMCTL32.InitCommonControls
0040A004  00000000
0040A008  77EF5EDB  GDI32.SetBkMode”

是在左下角的数据窗口,不是在汇编窗口
2009-6-13 18:50
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
换个脱壳方法吧,我上次脱 过一个一样的,ALT+M找到程序RCSC下断SHIFT+F9,CODE下断(0041000)SHIFT+F9,然后F8应该可以到达的OEP的
2009-6-13 21:21
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
想学习一下,能再讲详细点吗
2009-6-13 21:33
0
游客
登录 | 注册 方可回帖
返回
//