首页
社区
课程
招聘
请教:手动脱UPX-Scrambler RC1.x的问题!
2004-7-15 23:11 8105

请教:手动脱UPX-Scrambler RC1.x的问题!

2004-7-15 23:11
8105
小弟学脱壳时间不长,所以先按照动画[UPX-ScramblerRC1.x手动脱壳].这是stasi的作品,里面讲解的很详细,很适合我这样的bird.
我是按照作者的步骤跟了一遍,下面是stasi的原文:
加壳类型:UPX-Scrambler RC1.x -> ┫nT?L [重叠]
壳类介绍:UPX-Scrambler并不是壳,而是简单在的UPX加壳的程序动了些手脚,这样的目的就是不能用UPX-d或UPX外壳程序脱壳。壳的强度不是很大具体的脱壳方法和upx基本一样。
脱壳对象:小凤居的密码结巴4.20注册版chinesehack.exe(软件发到我邮箱的,指明举这个例子,小凤不要在意啊)
查壳工具:PEiD
脱壳工具:Ollydbg+ollydump
修正pe工具:LordPE  (当然用ImportREC也可以的,两者各有千秋)

用Ollydbg载入,提示是压缩代码吗?就是加过壳的意思!是否要继续分析?它要能分析了,我们还干什么啊?选不要。
看到代码初始段:
00427EBF >  90              NOP                           
00427EC0    61              POPAD                         〈=是不是很熟啊?UPX的出口特征指令,但
                                                             UPX-Scrambler把它放在入口处
00427EC1    BE 00E04100     MOV ESI,chineseh.0041E000
00427EC6    8DBE 0030FEFF   LEA EDI,DWORD PTR DS:[ESI+FFFE3000]
00427ECC    57              PUSH EDI
00427ECD    83CD FF         OR EBP,FFFFFFFF
00427ED0    EB 10           JMP SHORT chineseh.00427EE2   〈=跳
00427ED2    EB 00           JMP SHORT chineseh.00427ED4
00427ED4  ^ EB EA           JMP SHORT chineseh.00427EC0
00427ED6  ^ EB E8           JMP SHORT chineseh.00427EC0
00427ED8    8A06            MOV AL,BYTE PTR DS:[ESI]
00427EDA    46              INC ESI
00427EDB    8807            MOV BYTE PTR DS:[EDI],AL
00427EDD    47              INC EDI
00427EDE    01DB            ADD EBX,EBX
00427EE0    75 07           JNZ SHORT chineseh.00427EE9
00427EE2    8B1E            MOV EBX,DWORD PTR DS:[ESI]
00427EE4    83EE FC         SUB ESI,-4
00427EE7    11DB            ADC EBX,EBX
00427EE9  ^ 72 ED           JB SHORT chineseh.00427ED8   〈=有回跳
00427EEB    B8 01000000     MOV EAX,1                    〈=直接执行到这
00427EF0    01DB            ADD EBX,EBX
00427EF2    75 07           JNZ SHORT chineseh.00427EFB  〈=跳
00427EF4    8B1E            MOV EBX,DWORD PTR DS:[ESI]
00427EF6    83EE FC         SUB ESI,-4
00427EF9    11DB            ADC EBX,EBX
00427EFB    11C0            ADC EAX,EAX
00427EFD    01DB            ADD EBX,EBX
00427EFF  ^ 73 EF           JNB SHORT chineseh.00427EF0
00427F01    75 09           JNZ SHORT chineseh.00427F0C   〈=跳
00427F03    8B1E            MOV EBX,DWORD PTR DS:[ESI]
00427F05    83EE FC         SUB ESI,-4
00427F08    11DB            ADC EBX,EBX
00427F0A  ^ 73 E4           JNB SHORT chineseh.00427EF0
00427F0C    31C9            XOR ECX,ECX
00427F0E    83E8 03         SUB EAX,3
00427F11    72 0D           JB SHORT chineseh.00427F20
00427F13    C1E0 08         SHL EAX,8
00427F16    8A06            MOV AL,BYTE PTR DS:[ESI]
00427F18    46              INC ESI
00427F19    83F0 FF         XOR EAX,FFFFFFFF
00427F1C    74 74           JE SHORT chineseh.00427F92
00427F1E    89C5            MOV EBP,EAX
00427F20    01DB            ADD EBX,EBX
00427F22    75 07           JNZ SHORT chineseh.00427F2B    〈=跳
00427F24    8B1E            MOV EBX,DWORD PTR DS:[ESI]
00427F26    83EE FC         SUB ESI,-4
00427F29    11DB            ADC EBX,EBX
00427F2B    11C9            ADC ECX,ECX
00427F2D    01DB            ADD EBX,EBX
00427F2F    75 07           JNZ SHORT chineseh.00427F38     〈=跳
00427F31    8B1E            MOV EBX,DWORD PTR DS:[ESI]
00427F33    83EE FC         SUB ESI,-4
00427F36    11DB            ADC EBX,EBX
00427F38    11C9            ADC ECX,ECX
00427F3A    75 20           JNZ SHORT chineseh.00427F5C     〈=跳
00427F3C    41              INC ECX
00427F3D    01DB            ADD EBX,EBX
00427F3F    75 07           JNZ SHORT chineseh.00427F48
00427F41    8B1E            MOV EBX,DWORD PTR DS:[ESI]
00427F43    83EE FC         SUB ESI,-4
00427F46    11DB            ADC EBX,EBX
00427F48    11C9            ADC ECX,ECX
00427F4A    01DB            ADD EBX,EBX
00427F4C  ^ 73 EF           JNB SHORT chineseh.00427F3D
00427F4E    75 09           JNZ SHORT chineseh.00427F59
00427F50    8B1E            MOV EBX,DWORD PTR DS:[ESI]
00427F52    83EE FC         SUB ESI,-4
00427F55    11DB            ADC EBX,EBX
00427F57  ^ 73 E4           JNB SHORT chineseh.00427F3D
00427F59    83C1 02         ADD ECX,2
00427F5C    81FD 00F3FFFF   CMP EBP,-0D00
00427F62    83D1 01         ADC ECX,1
00427F65    8D142F          LEA EDX,DWORD PTR DS:[EDI+EBP]
00427F68    83FD FC         CMP EBP,-4
00427F6B    76 0F           JBE SHORT chineseh.00427F7C     〈=跳
00427F6D    8A02            MOV AL,BYTE PTR DS:[EDX]
00427F6F    42              INC EDX
00427F70    8807            MOV BYTE PTR DS:[EDI],AL
00427F72    47              INC EDI
00427F73    49              DEC ECX
00427F74  ^ 75 F7           JNZ SHORT chineseh.00427F6D
00427F76  ^ E9 63FFFFFF     JMP chineseh.00427EDE
00427F7B    90              NOP
00427F7C    8B02            MOV EAX,DWORD PTR DS:[EDX]
00427F7E    83C2 04         ADD EDX,4
00427F81    8907            MOV DWORD PTR DS:[EDI],EAX
00427F83    83C7 04         ADD EDI,4
00427F86    83E9 04         SUB ECX,4
00427F89  ^ 77 F1           JA SHORT chineseh.00427F7C
00427F8B    01CF            ADD EDI,ECX
00427F8D  ^ E9 4CFFFFFF     JMP chineseh.00427EDE        〈=有回跳
00427F92    5E              POP ESI                      〈=直接执行到这
00427F93    89F7            MOV EDI,ESI
00427F95    B9 EA060000     MOV ECX,6EA
00427F9A    8A07            MOV AL,BYTE PTR DS:[EDI]
00427F9C    47              INC EDI
00427F9D    2C E8           SUB AL,0E8
00427F9F    3C 01           CMP AL,1
00427FA1  ^ 77 F7           JA SHORT chineseh.00427F9A
00427FA3    803F 05         CMP BYTE PTR DS:[EDI],5
00427FA6  ^ 75 F2           JNZ SHORT chineseh.00427F9A
00427FA8    8B07            MOV EAX,DWORD PTR DS:[EDI]   〈=直接执行到这
00427FAA    8A5F 04         MOV BL,BYTE PTR DS:[EDI+4]
00427FAD    66:C1E8 08      SHR AX,8
00427FB1    C1C0 10         ROL EAX,10
00427FB4    86C4            XCHG AH,AL
00427FB6    29F8            SUB EAX,EDI
00427FB8    80EB E8         SUB BL,0E8
00427FBB    01F0            ADD EAX,ESI
00427FBD    8907            MOV DWORD PTR DS:[EDI],EAX
00427FBF    83C7 05         ADD EDI,5
00427FC2    89D8            MOV EAX,EBX
00427FC4  ^ E2 D9           LOOPD SHORT chineseh.00427F9F
00427FC6    8DBE 00500200   LEA EDI,DWORD PTR DS:[ESI+25000] 〈=直接执行到这
00427FCC    8B07            MOV EAX,DWORD PTR DS:[EDI]
00427FCE    09C0            OR EAX,EAX
00427FD0    74 45           JE SHORT chineseh.00428017
00427FD2    8B5F 04         MOV EBX,DWORD PTR DS:[EDI+4]
00427FD5    8D8430 A0940200 LEA EAX,DWORD PTR DS:[EAX+ESI+294A0]
00427FDC    01F3            ADD EBX,ESI
00427FDE    50              PUSH EAX
00427FDF    83C7 08         ADD EDI,8
00427FE2    FF96 7C950200   CALL DWORD PTR DS:[ESI+2957C]
00427FE8    95              XCHG EAX,EBP
00427FE9    8A07            MOV AL,BYTE PTR DS:[EDI]
00427FEB    47              INC EDI
00427FEC    08C0            OR AL,AL
00427FEE  ^ 74 DC           JE SHORT chineseh.00427FCC
00427FF0    89F9            MOV ECX,EDI
00427FF2    79 07           JNS SHORT chineseh.00427FFB   〈=跳
00427FF4    0FB707          MOVZX EAX,WORD PTR DS:[EDI]
00427FF7    47              INC EDI
00427FF8    50              PUSH EAX
00427FF9    47              INC EDI
00427FFA    B9 5748F2AE     MOV ECX,AEF24857
00427FFF    55              PUSH EBP
00428000    FF96 80950200   CALL DWORD PTR DS:[ESI+29580]
00428006    09C0            OR EAX,EAX
00428008    74 07           JE SHORT chineseh.00428011
0042800A    8903            MOV DWORD PTR DS:[EBX],EAX
0042800C    83C3 04         ADD EBX,4
0042800F  ^ EB D8           JMP SHORT chineseh.00427FE9
00428011    FF96 84950200   CALL DWORD PTR DS:[ESI+29584]
00428017    60              PUSHAD                          〈=出口特征指令,oep就在jmp后
00428018  - E9 C969FEFF     JMP chineseh.0040E9E6

0040E9E6    55              PUSH EBP                          〈=是oep 用Od的Dump插件直接脱壳。
0040E9E7    8BEC            MOV EBP,ESP
0040E9E9    6A FF           PUSH -1
0040E9EB    68 60124100     PUSH chineseh.00411260
0040E9F0    68 72EB4000     PUSH chineseh.0040EB72                   ; JMP to MSVCRT._except_handler3
0040E9F5    64:A1 00000000  MOV EAX,DWORD PTR FS:[0]
0040E9FB    50              PUSH EAX
0040E9FC    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
0040EA03    83EC 68         SUB ESP,68
0040EA06    53              PUSH EBX

运行软件发现初始错误,就要修正pe,打开LordPE,选择rebulidpe,选择要修复的文件,ok之后,整个脱壳就完成了。软件可以正常运行,查壳发现没有加壳,那是意料之中的时:)

◇与我联系
作者:stasi[dfcg]   qq:199882871  email:stasi@citiz.net & [email]stasi@163.com[/email]
2004年2月19日
现在的问题是脱壳解决了,peid也显示脱壳成功了,然后用lordpe来rebuildpe.修复后,程序执行出现了错误!见图!
先谢谢大家了,很想利用这个教程联系下手动脱壳!希望能得到大家的指点!


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

收藏
点赞2
打赏
分享
最新回复 (19)
雪    币: 508
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
911xx 2004-7-15 23:14
2
0
不好意思,怎么搞的不小心上传了两张图片呢?我是上传了一张的??
斑竹谅解!
另外问一下,在loadpe修复的时候,我用的loadpe的默认选项,是不是要做什么设置呢??
雪    币: 508
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
911xx 2004-7-15 23:27
3
0
我顺便把原程序和我脱壳修复后的程序放上来.不过这东西杀毒会提示的!点击下载:附件!program.rar
雪    币: 674
活跃值: (1668)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
daxia200N 6 2004-7-16 10:18
4
0
iat呢
雪    币: 255
活跃值: (165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dREAMtHEATER 2004-7-16 10:24
5
0
UPX ShellExt 支持UPX-Scrambler RC1.x的变形脱壳
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2004-7-16 11:49
6
0
:o
OPE:0000E9E6   RAV:0000FFFC  大小:0000055C
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dINO 2004-7-16 12:00
7
0
File Scancer
雪    币: 896
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 85 2004-7-16 12:48
8
0
UPX脱壳没这么麻烦的

UPX-Scrambler 搜索:60 E9
即到入口
然后修复输入表
雪    币: 508
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
911xx 2004-7-16 13:29
9
0
谢谢诸位大侠的帮助!
首先,我用工具UPX ShellExt 的确可以脱壳也修复成功了
我只是想练习下如何手动修复输入表??一直以来依赖工具,具体手动也没托过壳,就想联系下!能不能推荐点文章看看
还有"小侠"兄提到的代码:--------------------------------------------------------------------------------
OPE:0000E9E6   RAV:0000FFFC  大小:0000055C
--------------------------------------------------------------------------------
具体如何用?
问题很菜,希望大家谅解!:)
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2004-7-16 13:41
10
0
最初由 911xx 发布
谢谢诸位大侠的帮助!
首先,我用工具UPX ShellExt 的确可以脱壳也修复成功了
我只是想练习下如何手动修复输入表??一直以来依赖工具,具体手动也没托过壳,就想联系下!能不能推荐点文章看看
还有"小侠"兄提到的代码:--------------------------------------------------------------------------------
OPE:0000E9E6 RAV:0000FFFC 大小:0000055C
--------------------------------------------------------------------------------
具体如何用?
问题很菜,希望大家谅解!:)


OEP:0040E9E6-00400000=0000E9E6   //是脱壳后程序的入口点。
RAV:0040FFFC-00400000=0000FFFC  //是IAT输入表的开始位置。
大小:0000055C                   //是IAT输入表从开始到结束的总大小。

程序脱壳后必须用Import REC修复输入表,以上的代码就能用上了。
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dINO 2004-7-16 14:04
11
0
No junks no SEH no Exception no...
Just F2,F8,F9 and click.
雪    币: 508
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
911xx 2004-7-16 17:55
12
0
问题依然存在,又要麻烦大家了.问题如下
我按照fly的方法直接在olldbg里面搜索-二进制60 E9.然后来到
00428017    60              PUSHAD                          00428018  - E9 C969FEFF     JMP chineseh.0040E9E6  F4到这里,然后来到程序的入口处
0040E9E6    55             PUSH EBP                          〈=是oep 用Od的Dump插件直接脱壳
脱壳程序当然还是不能执行了,我双击打开后等出现错误提示对话框的时候,打开Import REC.入口地址是0000E9E6(不用改我dump后就是这个地址).参照上面各位的建议,填入RAV:0000FFFC  大小:0000055C
然后IAT Autosearch,提示:无法发现任何东西在这个OEP.具体请参考图.
谢谢!~
雪    币: 508
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
911xx 2004-7-16 18:00
13
0
为什么我每次上传个图片,会帖两张呢?每次都要编辑删除一张重复的
期待大家的恢复中!
:)
雪    币: 896
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 85 2004-7-16 18:00
14
0
二进制60 E9 对应的是PUSHAD 、jmp
只是说UPX-Scrambler

有些UPX是popad 、jmp
不要把问题看死了
灵活点

建议看看《加密与解密》,充实点基础知识
雪    币: 508
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
911xx 2004-7-16 18:02
15
0
谢谢斑竹的指点,正在恶补中,边实践边学习嘛,呵呵
现在是无法解决IAT的修复问题,应该是脱掉壳了.
雪    币: 896
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 85 2004-7-16 18:02
16
0
看你OD调试的进程和Import REC选择的进程怎么不一样?
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2004-7-16 18:26
17
0
最初由 911xx 发布
问题依然存在,又要麻烦大家了.问题如下
我按照fly的方法直接在olldbg里面搜索-二进制60 E9.然后来到
00428017 60 PUSHAD 00428018 - E9 C969FEFF JMP chineseh.0040E9E6 F4到这里,然后来到程序的入口处
0040E9E6 55 PUSH EBP 〈=是oep 用Od的Dump插件直接脱壳
脱壳程序当然还是不能执行了,我双击打开后等出现错误提示对话框的时候,打开Import REC.入口地址是0000E9E6(不用改我dump后就是这个地址).参照上面各位的建议,填入RAV:0000FFFC 大小:0000055C
然后IAT Autosearch,提示:无法发现任何东西在这个OEP.具体请参考图.
谢谢!~

晕,修复IAT的时候必须启动原程序用Import REC加载原程序来修复Dump来的程序,你用Dump来的程序来修复Dump出来的程序当然不可能了,能成功才怪。
雪    币: 508
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
911xx 2004-7-16 21:09
18
0
哦。我是用dump的程序来修复的 .
呵呵终于知道了.原来是先打开原来的程序然后填入OPE:0000E9E6 RAV:0000FFFC 大小:0000055C
等找到后,fix dump就选择已经脱好壳的冬冬,这次是可以执行了
这样应该对的把?请fly和小虾等高手指点!
另外我发现手动脱的壳和用工具UPX ShellExt脱后的大小不同,手动脱的大8kb,这是什么原因呢?难道这样还是没有脱干净?
再次感谢诸位回帖!
:)
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2004-7-16 21:49
19
0
最初由 911xx 发布
另外我发现手动脱的壳和用工具UPX ShellExt脱后的大小不同,手动脱的大8kb,这是什么原因呢?难道这样还是没有脱干净?
再次感谢诸位回帖!
:)

那里很正常的事,UPX ShellExt脱壳优化过程序,而手脱的没优化过,所以手脱的程序比用工具脱的大小不同是正常的。
雪    币: 508
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
911xx 2004-7-17 16:52
20
0
哦 谢谢
游客
登录 | 注册 方可回帖
返回