吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19480|回复: 16
收起左侧

[原创] 吾爱破解脱壳练习第五期------upx壳

 关闭 [复制链接]
小生我怕怕 发表于 2008-9-30 00:02
一转眼我们的脱壳练习已经第5期啦,在这其中我相信许多的朋友也学习到了东西
必能脱掉此壳
本期考核主题为:unopixe v1.0
1.脱壳后的文件大家以千脑形式上传,目的是为了便于隐藏文件和节约论坛空间
2.脱壳后的文件,请大家以脱文附带脱壳后程序打包压缩传于千脑网盘
3.对于回帖过程中千万不要出现灌水,否则BAN了ID
4.对于有优秀脱文或优秀脱壳方法的朋友,给于适当威望奖励
5.鉴于此练习是针对论坛的所有人,请大家踊跃参加,如果不是脱了壳教作业的,请不要顶帖子,方便管理查阅,及时给出评分
6.以下为需要设置威望的格式
7.脱壳一以周期计算,(周期=等于三天)
8.脱壳周期一结束,就开始公布答案让大家能有更充分的学习环境,让不懂脱的朋友去寻找你失误的地方争取早日赶上论坛的积极份子
9.我们要的是脱文,并不是脱壳机去脱的,如果用脱机脱了别拿来,请一定附带上脱文
10.对本次参加加密壳脱壳练习的,给出脱文全部给予10CB奖励!

经过了几次的脱壳练习,相信大家都多少有所收获,以后脱壳练习,会长期开设,但不定期调整脱壳的类别加密壳和压缩壳会进行叉着,根据大家交脱文的质量来判断该放出什么壳,希望大家踊跃参与,后期脱壳练习,也可能会对时间进行调整为2天为一周期,这个有利于大家对脱壳方法的熟练掌握,方便进步
在一次申明:对于不是交作业顶帖的人,一律扣处10CB,严重的扣处威望处理,请大家自觉,保持良好的学习环境

练习一:(结果已经公布)
http://www.52pojie.cn/thread-10496-1-1.html

练习二:(结果已经公布)
http://www.52pojie.cn/thread-10607-1-1.html

练习三:(结果已经公布)
http://www.52pojie.cn/thread-10688-1-1.html

练习四:(结果已经公布)
http://www.52pojie.cn/thread-10850-1-1.html

UnPackMe.rar

16 KB, 下载次数: 1241, 下载积分: 吾爱币 -1 CB

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

维护世界和平 发表于 2008-9-30 00:49

00400104 >83EC 04 SUB ESP,4
00400107C70424 00C04000 MOV DWORD PTR SS:[ESP],UnPackMe.0040C000
0040010EC3RETN

内存镜像法

Memory map, 项目 25//F2 运行
地址=00409000
大小=00005000 (20480.)
属主=UnPackMe 00400000
区段=.rsrc
包含=数据,导入,资源
类型=映像 01001002
访问=R
初始访问=RWE
0040C000F5CMC
0040C00150PUSH EAX
0040C00273 04 JNB SHORT UnPackMe.0040C008
0040C00466:C1C6 50ROL SI,50; 位移常数超出 1..31 的范围
0040C00858POP EAX
0040C00966:A9 04FDTEST AX,0FD04
0040C00D51PUSH ECX
0040C00E66:83CE 00OR SI,0



Memory map, 项目 23//F2 运行
地址=00401000
大小=00007000 (28672.)
属主=UnPackMe 00400000
区段=.data
包含=代码
类型=映像 01001002
访问=R
初始访问=RWE


0040892B8807MOV BYTE PTR DS:[EDI],AL//来到这里
0040892D47INC EDI
0040892E01DBADD EBX,EBX
0040893075 07 JNZ SHORT UnPackMe.00408939
004089328B1EMOV EBX,DWORD PTR DS:[ESI]
0040893483EE FC SUB ESI,-4
0040893711DBADC EBX,EBX
00408939^ 72 ED JB SHORT UnPackMe.00408928

往下拉
00408A9D39C4CMP ESP,EAX
00408A9F^ 75 FA JNZ SHORT UnPackMe.00408A9B
00408AA183EC 80 SUB ESP,-80
00408AA4- E9 AE460000 JMP UnPackMe.0040D157 //来到这里下F2 运行,然后单步


0040D157 /76 04 JBE SHORT UnPackMe.0040D15D //来到这里
0040D159 |56PUSH ESI
0040D15A |83C4 04 ADD ESP,4
0040D15D \70 07 JO SHORT UnPackMe.0040D166
0040D15F56PUSH ESI
0040D16057PUSH EDI
0040D161C1E3 60 SHL EBX,60 ; 位移常数超出 1..31 的范围
0040D1645FPOP EDI
0040D1655EPOP ESI
0040D16666:83C1 00ADD CX,0
0040D16AF9STC
0040D16B66:83C4 00ADD SP,0
0040D16F05 00000000 ADD EAX,0


Memory map, 项目 23 //F2运行
地址=00401000
大小=00007000 (28672.)
属主=UnPackMe 00400000
区段=.data
包含=代码
类型=映像 01001002
访问=R
初始访问=RWE
0040D2228038 CC CMP BYTE PTR DS:[EAX],0CC //来到这里
0040D225^ 0F84 0BF8FFFF JE UnPackMe.0040CA36
0040D22B56PUSH ESI
0040D22C50PUSH EAX
0040D22D83C6 00 ADD ESI,0
0040D23058POP EAX
0040D2315EPOP ESI
0040D23266:A9 1C25TEST AX,251C
0040D23671 06 JNO SHORT UnPackMe.0040D23E
0040D23857PUSH EDI
0040D23966:A9 56A2TEST AX,0A256
0040D23D5FPOP EDI
0040D23E57PUSH EDI
0040D23F56PUSH ESI
0040D240BE 7E653BEE MOV ESI,EE3B657E
0040D2455EPOP ESI
0040D2465FPOP EDI
0040D24766:C1C1 60ROL CX,60; 位移常数超出 1..31 的范围
0040D24BF5CMC
0040D24C8038 55 CMP BYTE PTR DS:[EAX],55//比较OEP头的第一个字节是否等55,如果是,下面则不跳!
0040D24F75 24 JNZ SHORT UnPackMe.0040D275 //这里改成JMP 否是 OEP头会被NOP掉
0040D251C600 90 MOV BYTE PTR DS:[EAX],90//这里是把OEP头的第一个字节修改为90 NOP掉
0040D25435 00000000 XOR EAX,0
0040D25985C9TEST ECX,ECX
0040D25B53PUSH EBX
0040D25C80EA 00 SUB DL,0
0040D25F5BPOP EBX
0040D26035 00000000 XOR EAX,0
0040D26581FA 0E86733A CMP EDX,3A73860E
0040D26B79 06 JNS SHORT UnPackMe.0040D273
0040D26D7C 04 JL SHORT UnPackMe.0040D273
0040D26F66:83F4 00XOR SP,0
0040D2732C 00 SUB AL,0
0040D275FFE0JMP EAX//在这里下F2,运行,单步


0040170055PUSH EBP //OEP
004017018BECMOV EBP,ESP
004017036A FF PUSH -1
0040170568 00254000 PUSH UnPackMe.00402500
0040170A68 86184000 PUSH UnPackMe.00401886 ; JMP 到 msvcrt._except_handler3
0040170F64:A1 00000000MOV EAX,DWORD PTR FS:[0]
0040171550PUSH EAX
0040171664:8925 0000000>MOV DWORD PTR FS:[0],ESP
0040171D83EC 68 SUB ESP,68
0040172053PUSH EBX
0040172156PUSH ESI
0040172257PUSH EDI
004017238965 E8 MOV DWORD PTR SS:[EBP-18],ESP

暂时先这样了,困了,睡觉咯!脱壳脚本,明天没事再写吧!

UnPack.rar

19 KB, 下载次数: 9, 下载积分: 吾爱币 -1 CB

 楼主| 小生我怕怕 发表于 2008-9-30 00:17
两次内存法
━━━━━━━━━━━━━━━━━━━━━━━━━━
00400104 >83EC 04 sub esp,4//OD载入
00400107C70424 00C04000 mov dword ptr ss:[esp],UnPackMe.0040C000 //ait+m打开内存镜象
0040010EC3retn
0040010F000401add byte ptr ds:[ecx+eax],al
004001120000add byte ptr ds:[eax],al
004001140000add byte ptr ds:[eax],al
━━━━━━━━━━━━━━━━━━━━━━━━━━
内存映射,项目 25//F2下断
地址=00409000 //shift+f9运行
大小=00005000 (20480.)
物主=UnPackMe 00400000
区段=.rsrc
包含=data,imports,resources
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040C000F5cmc//停在此处
0040C00150push eax //在次打开ait+m
0040C00273 04 jnb short UnPackMe.0040C008
0040C00466:C1C6 50rol si,50
0040C00858pop eax
0040C00966:A9 04FDtest ax,0FD04
0040C00D51push ecx
0040C00E66:83CE 00or si,0
━━━━━━━━━━━━━━━━━━━━━━━━━━
内存映射,项目 23//F2下断
地址=00401000 //shift+f9运行
大小=00007000 (28672.)
物主=UnPackMe 00400000
区段=.data
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040892B8807mov byte ptr ds:[edi],al//打断所有向上的跳转
0040892D47inc edi //F8开始单步跟
0040892E01DBadd ebx,ebx //分标准的upx壳的特征
0040893075 07 jnz short UnPackMe.00408939
004089328B1Emov ebx,dword ptr ds:[esi]
0040893483EE FC sub esi,-4
0040893711DBadc ebx,ebx
00408939^ 72 ED jb short UnPackMe.00408928
0040893BB8 01000000 mov eax,1
━━━━━━━━━━━━━━━━━━━━━━━━━━
004089C4^\75 F7 jnz short UnPackMe.004089BD//此跳向上
004089C6^ E9 63FFFFFF jmp UnPackMe.0040892E//此跳向上
004089CB90nop//这里是空代码
004089CC8B02mov eax,dword ptr ds:[edx] //只能在这句执行F4运行到所选
004089CE83C2 04 add edx,4
004089D18907mov dword ptr ds:[edi],eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
00408A5F^\EB D8 jmp short UnPackMe.00408A39//此跳向上
00408A61FF96 D4AD0000 call dword ptr ds:[esi+ADD4] //此CALL会飞
00408A678BAE D0AD0000 mov ebp,dword ptr ds:[esi+ADD0]//只能在此执行F4运行到所选
00408A6D8DBE 00F0FFFF lea edi,dword ptr ds:[esi-1000]
━━━━━━━━━━━━━━━━━━━━━━━━━━
00408A9661popad
00408A978D4424 80 lea eax,dword ptr ss:[esp-80]
00408A9B6A 00 push 0
00408A9D39C4cmp esp,eax
00408A9F^ 75 FA jnz short UnPackMe.00408A9B
00408AA183EC 80 sub esp,-80
00408AA4- E9 AE460000 jmp UnPackMe.0040D157//原来的UPX这里是飞向OEP,但是此壳还需要在多跟下才到OEP
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D157 /76 04 jbe short UnPackMe.0040D15D//经过上面的JMP来到此处
0040D159 |56push esi //在次F8单步跟
0040D15A |83C4 04 add esp,4//老规矩打断向上跳转执行向下跳转
0040D15D \70 07 jo short UnPackMe.0040D166
0040D15F56push esi
0040D16057push edi
0040D161C1E3 60 shl ebx,60
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D275- FFE0jmp eax;//此处飞向我们的OEP
0040D27775 07 jnz short UnPackMe.0040D280
0040D2797B 05 jpo short UnPackMe.0040D280
0040D27B7E 03 jle short UnPackMe.0040D280
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040170090nop //很明显OEP被抽了一个字节,我们把他改为push ebp这个是VC++的开头
004017018BECmov ebp,esp //然后用OD的脱壳插件来脱壳,因为LORDPE脱壳要设置下,所以OD插件简单些
004017036A FF push -1
0040170568 00254000 push UnPackMe.00402500
0040170A68 86184000 push UnPackMe.00401886 ; jmp to msvcrt._except_handler3
0040170F64:A1 00000000mov eax,dword ptr fs:[0]
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040170055push ebp //修改后OEP便可进行DUMP
004017018BECmov ebp,esp
004017036A FF push -1
0040170568 00254000 push UnPackMe.00402500
0040170A68 86184000 push UnPackMe.00401886 ; jmp to msvcrt._except_handler3

unpack.rar

17 KB, 下载次数: 19, 下载积分: 吾爱币 -1 CB

 楼主| 小生我怕怕 发表于 2008-9-30 00:27
老规矩,既然单步跟了,就有单步的好处,得来一个断点
如下断点可直接跳过UPX入口
bp VirtualProtect
━━━━━━━━━━━━━━━━━━━━━━━━━━
00400104 >83EC 04 sub esp,4//OD载入
00400107C70424 00C04000 mov dword ptr ss:[esp],UnPackMe.0040C000 //下断bp VirtualProtect
0040010EC3retn //shift+f9两次
0040010F000401add byte ptr ds:[ecx+eax],al
004001120000add byte ptr ds:[eax],al
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C801AD0 >8BFFmov edi,edi //第二次后程序停于此
7C801AD255push ebp//ait+b取消断点
7C801AD38BECmov ebp,esp //接着ait+f9返回到用户代码
7C801AD5FF75 14 push dword ptr ss:[ebp+14]
7C801AD8FF75 10 push dword ptr ss:[ebp+10]
━━━━━━━━━━━━━━━━━━━━━━━━━━
00408A9558pop eax //程序停在此处
00408A9661popad
00408A978D4424 80 lea eax,dword ptr ss:[esp-80]
00408A9B6A 00 push 0
00408A9D39C4cmp esp,eax
00408A9F^ 75 FA jnz short UnPackMe.00408A9B
00408AA183EC 80 sub esp,-80
00408AA4- E9 AE460000 jmp UnPackMe.0040D157 //原来的UPX这里是飞向OEP,但是此壳还需要在多跟下才到OEP
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D157 /76 04 jbe short UnPackMe.0040D15D//经过上面的JMP来到此处
0040D159 |56push esi //在次F8单步跟
0040D15A |83C4 04 add esp,4//老规矩打断向上跳转执行向下跳转
0040D15D \70 07 jo short UnPackMe.0040D166
0040D15F56push esi
0040D16057push edi
0040D161C1E3 60 shl ebx,60
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040D275- FFE0jmp eax;//此处飞向我们的OEP
0040D27775 07 jnz short UnPackMe.0040D280
0040D2797B 05 jpo short UnPackMe.0040D280
0040D27B7E 03 jle short UnPackMe.0040D280
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040170090nop //很明显OEP被抽了一个字节,我们把他改为push ebp这个是VC++的开头
004017018BECmov ebp,esp //然后用OD的脱壳插件来脱壳,因为LORDPE脱壳要设置下,所以OD插件简单些
004017036A FF push -1
0040170568 00254000 push UnPackMe.00402500
0040170A68 86184000 push UnPackMe.00401886 ; jmp to msvcrt._except_handler3
0040170F64:A1 00000000mov eax,dword ptr fs:[0]
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040170055push ebp //修改后OEP便可进行DUMP
004017018BECmov ebp,esp
004017036A FF push -1
0040170568 00254000 push UnPackMe.00402500
0040170A68 86184000 push UnPackMe.00401886 ; jmp to msvcrt._except_handler3
zapline 发表于 2008-9-30 01:11
小生好,小生妙,小生呱呱叫!!!
此法 傻!
00400104 >83EC 04 sub esp, 4
00400107C70424 00C04000 mov dword ptr ss:[esp], UnPackMe.004>
/*
alt+m
地址=00409000
大小=00005000 (20480.)
物主=UnPackMe 00400000
区段=.rsrc
包含=data,imports,resources
F2
F9
*/

0040C000F5cmc
/*
alt+m
地址=00401000
大小=00007000 (28672.)
物主=UnPackMe 00400000
区段=.data
包含=code
F2
F9
*/

F8 F4 一路向下 直到:
00408A5C83C3 04 add ebx, 4
00408A5F^ EB D8 jmp short UnPackMe.00408A39
00408A61FF96 D4AD0000 callnear dword ptr ds:[esi+ADD4] ; kernel32.ExitProcess
00408A678BAE D0AD0000 mov ebp, dword ptr ds:[esi+ADD0] ; kernel32.VirtualProtect

移到 00408A67F4

又是 F8 F4 的跑
突然一个JMP 跳到了:
0040170090nop
00401701 .8BECmov ebp, esp
00401703 .6A FF push-1
00401705 .68 00254000 pushUnPackMe.00402500
0040170A .68 86184000 pushUnPackMe.00401886;jmp to msvcrt._except_handler3; SE 句柄安装
0040170F .64:A1 0000000>mov eax, dword ptr fs:[0]

传说中的OEP,0040170090nop 这句被修改了
移到 00401700space push ebp enter
ODJUMP 保存 完···

不会分析 不会写脱文 根本就不会脱······
下雪天 发表于 2008-9-30 01:32
OK


【文章标题】: UnPackMe5的破文
【文章作者】: 小小菜鸟
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
UnPackMe5的脱壳
一开od就出一个错误 忽略
到了这里
00400104 >83EC 04sub esp,4
00400107C70424 00C04000mov dword ptr ss:[esp],UnPackMe.0040C000
0040010EC3 retn
0040010F000401 add byte ptr ds:[ecx+eax],al
打开内存
地址409000 大小5000
F2下断
shift+F9 运行
到这里
0040C000F5 cmc
0040C00150 push eax
0040C00273 04jnb short UnPackMe.0040C008
0040C00466:C1C6 50 rol si,50
0040C00858 pop eax
0040C00966:A9 04FD test ax,0FD04
再打开内存
地址401000 大小7000
F2下断
shift+F9 运行
到这里
0040892B8807 mov byte ptr ds:[edi],al
0040892D47 inc edi
0040892E01DB add ebx,ebx
单步跟踪

单步到这里
004089C4^\75 F7jnz short UnPackMe.004089BD
004089C6^ E9 63FFFFFFjmp UnPackMe.0040892E
004089CB90 nop
跳不过
找到一个跳出循环的
0040896C /74 74je short UnPackMe.004089E2先F4运行到这里
0040896E |89C5 mov ebp,eax
00408970 |01DB add ebx,ebx
右键跟随 然后F4轻松跳出

继续向下
00408A0B01F0 add eax,esi
00408A0D8907 mov dword ptr ds:[edi],eax
00408A0F83C7 05add edi,5
00408A1288D8 mov al,bl
00408A14^ E2 D9loopd short UnPackMe.004089EF
有LOOP
在下方
00408A168DBE 00600000lea edi,dword ptr ds:[esi+6000]
F4
00408A5F^\EB D8jmp short UnPackMe.00408A39往回跳
00408A61FF96 D4AD0000call dword ptr ds:[esi+ADD4]在这里不能F4跑飞了向上找
跳出循环的跳转
00408A20 /74 45je short UnPackMe.00408A67
00408A22 |8B5F 04mov ebx,dword ptr ds:[edi+4]

跳出了
到00408A5F^\EB D8jmp short UnPackMe.00408A39
00408A61FF96 D4AD0000call dword ptr ds:[esi+ADD4]
00408A678BAE D0AD0000mov ebp,dword ptr ds:[esi+ADD0]; kernel32.VirtualProtect
一直单步到
00408A9F^\75 FAjnz short UnPackMe.00408A9B
00408AA183EC 80sub esp,-80
00408AA4- E9 AE460000jmp UnPackMe.0040D157
大的跳转到这里
0040D157 /76 04jbe short UnPackMe.0040D15D
0040D159 |56 push esi
0040D15A |83C4 04add esp,4
中间一直向下单步
一直到

0040D26F66:83F4 00 xor sp,0
0040D2732C 00sub al,0
0040D275- FFE0 jmp eax; UnPackMe.00401700
看寄存器窗口EAX有一个大跳转
到OEP了
0040170090 nop
004017018BEC mov ebp,esp
004017036A FFpush -1
0040170568 00254000push UnPackMe.00402500
呵呵 原来是 偷换了代码啊
很显然 NOP 应该是 堆栈的初始化操作
PUSH EBP
收工
LORDPE和修复IAT很简单就不说了

--------------------------------------------------------------------------------
【版权声明】: 本文原创于小小菜鸟, 转载请注明作者并保持文章的完整, 谢谢小生的支持,谢谢!

2008年09月30日 1:19:51
看来这次蛮速度的都好了

http://www.禁止使用网挣网盘/spac ... %C6%CE%C4.rar/.page
http://www.禁止使用网挣网盘/spac ... 5-dumped_.rar/.page
xyjx0044 发表于 2008-9-30 05:40
OD载入停在
00400104 > 83EC 04 sub esp,4
00400107 C70424 00C04000 mov dword ptr ss:[esp],UnPackMe.0040C000
0040010E C3 retn
━━━━━━━━━━━━━━━━━━━━━━━━━━
经过前面的RETN来到
0040C000 F5 cmc //esp定律 F9 三次
━━━━━━━━━━━━━━━━━━━━━━━━━━
F9三次后停在这里
00408A9D 39C4 cmp esp,eax
00408A9F ^ 75 FA jnz short UnPackMe.00408A9B
00408AA1 83EC 80 sub esp,-80
00408AA4 - E9 AE460000 jmp UnPackMe.0040D157 //F4到这 F8
━━━━━━━━━━━━━━━━━━━━━━━━━━
跳到这里
0040D157 /76 04 jbe short UnPackMe.0040D15D
0040D159 |56 push esi
0040D15A |83C4 04 add esp,4
0040D15D \70 07 jo short UnPackMe.0040D166
0040D15F 56 push esi
━━━━━━━━━━━━━━━━━━━━━━━━━━
F8到
0040D1FC B8 00174000 mov eax,UnPackMe.00401700 //有点可疑
━━━━━━━━━━━━━━━━━━━━━━━━━━
F8向下走到
0040D24F /75 24 jnz short UnPackMe.0040D275 //这里跳向OPE 如果没 跳 就算到了ope也是看不清的 ∴改成JMP
0040D251 |C600 90 mov byte ptr ds:[eax],90
0040D254 |35 00000000 xor eax,0
0040D259 |85C9 test ecx,ecx
0040D25B |53 push ebx
0040D25C |80EA 00 sub dl,0
0040D25F |5B pop ebx
0040D260 |35 00000000 xor eax,0
0040D265 |81FA 0E86733A cmp edx,3A73860E
0040D26B |79 06 jns short UnPackMe.0040D273
0040D26D |7C 04 jl short UnPackMe.0040D273
0040D26F |66:83F4 00 xor sp,0
0040D273 |2C 00 sub al,0
0040D275 \FFE0 jmp eax //跳向OPE
━━━━━━━━━━━━━━━━━━━━━━━━━━
跳到OEP后删除下分析
00401700 55 push ebp //这里Dump
00401701 8BEC mov ebp,esp
00401703 6A FF push -1
00401705 68 00254000 push UnPackMe.00402500
0040170A 68 86184000 push UnPackMe.00401886
0040170F 64:A1 00000000 mov eax,dword ptr fs:[0]
00401715 50 push eax
━━━━━━━━━━━━━━━━━━━━━━━━━━
脱壳后的文件 也不知道脱的对不对..
dumped_.exe
Hmily 发表于 2008-9-30 10:47
载入

00400104 >83EC 04 sub esp, 4
00400107C70424 00C04000 mov dword ptr [esp], 0040C000
0040010EC3retn
0040010F000401add byte ptr [ecx+eax], al
004001120000add byte ptr [eax], al
004001140000add byte ptr [eax], al

打开内存镜象在代码段下内存写入断点

Memory map, item 23
Address=00401000
Size=00007000 (28672.)
Owner=UnPackMe 00400000
Section=.data
Contains=code
Type=Imag 01001002
Access=R
Initial access=RWE

F9,取消内存断点,这里就可以很清楚的看到我们熟悉的UPX代码了,你可以单步,我直接把代码拉到结尾,然后F4

00408AA4- E9 AE460000 jmp 0040D157

F8一下,本以为到OEP,一看怎么也不像,到处都是像花一样的代码,这时候单步走能到OEP,我只喜欢讨巧,现在继续往下拉代码

0040D26B /79 06 jns short 0040D273
0040D26D |7C 04 jlshort 0040D273
0040D26F |66:83F4 00xor sp, 0
0040D273 \2C 00 sub al, 0
0040D275FFE0jmp eax
0040D27775 07 jnz short 0040D280
0040D2797B 05 jpo short 0040D280
0040D27B7E 03 jle short 0040D280


0040D275FFE0jmp eax这中经典的到OEP方式,我怎么也要试一试,直接在这里F4,再F8一下,熟悉的VC出来了,只是被偷了一个字节55,补上OEP,Dump,FIX完工。
Tale 发表于 2008-9-30 10:49
bp VirtualProtectExF9运行
7C801A5D >8BFFmov edi,edi; UnPackMe.00400000
7C801A5F55push ebp
7C801A608BECmov ebp,esp
7C801A6256push esi
7C801A638B35 B812807C mov esi,dword ptr ds:[<&ntdll.NtProtectV>; ntdll.ZwProtectVirtualMemory
7C801A6957push edi
7C801A6AFF75 18 push dword ptr ss:[ebp+18]
7C801A6D8D45 10 lea eax,dword ptr ss:[ebp+10]
7C801A70FF75 14 push dword ptr ss:[ebp+14]
7C801A7350push eax
7C801A748D45 0C lea eax,dword ptr ss:[ebp+C]
7C801A7750push eax
到了这里F8跟
00408A9558pop eax
00408A9661popad
00408A978D4424 80 lea eax,dword ptr ss:[esp-80]
00408A9B6A 00 push 0
00408A9D39C4cmp esp,eax
00408A9F^ 75 FA jnz short UnPackMe.00408A9B//这里是个循环直接F4到下面一个地址
00408AA183EC 80 sub esp,-80
00408AA4- E9 AE460000 jmp UnPackMe.0040D157
jmp到这里继续F8
0040D157 /76 04 jbe short UnPackMe.0040D15D
0040D159 |56push esi
0040D15A |83C4 04 add esp,4
0040D15D \70 07 jo short UnPackMe.0040D166
0040D15F56push esi
到这里 jmp就到OEP了 !~~~~
0040D2732C 00 sub al,0
0040D275FFE0jmp eax//跳往OEP
0040D27775 07 jnz short UnPackMe.0040D280
0040D2797B 05 jpo short UnPackMe.0040D280
0040D27B7E 03 jle short UnPackMe.0040D280

看了一下OEP被偷了是C++的程序 push ebpOK
fox2006 发表于 2008-9-30 11:17
吾爱专题脱壳练习
--------------------------------------------------------------------------------
【编写程序】:Microsoft Visual C++ v6.0
【调试环境】:WinXP、OllyDbg、PEiD、LordPE、ImportREC
【程序查壳】:查不到壳
__________________________________________________________________________________________________________________________
00400104 >83EC 04 sub esp,4; OD载入后到这里,ALT+M,在00409000下内存断点,F9
00400107C70424 00C04000 mov dword ptr ss:[esp],UnPackMe.0040C000
0040010EC3retn
0040010F000401add byte ptr ds:[ecx+eax],al
004001120000add byte ptr ds:[eax],al
----------------------------------------------------------------------------------------------------------------
0040C000F5cmc; F9后,到了这里,继续ALT+M,在00401000下内存断点,F9
0040C00150push eax
0040C00273 04 jnb short UnPackMe.0040C008
0040C00466:C1C6 50rol si,50
0040C00858pop eax
0040C00966:A9 04FDtest ax,0FD04
0040C00D51push ecx
0040C00E66:83CE 00or si,0
0040C01259pop ecx
--------------------------------------------------------------------------------------------------------
0040892B8807mov byte ptr ds:[edi],al ; F9后,到了这里,然后F8单步跟进
0040892D47inc edi
0040892E01DBadd ebx,ebx
0040893075 07 jnz short UnPackMe.00408939
004089328B1Emov ebx,dword ptr ds:[esi]
0040893483EE FC sub esi,-4

00408A9B6A 00 push 0
00408A9D39C4cmp esp,eax
00408A9F^ 75 FA jnz short UnPackMe.00408A9B
00408AA183EC 80 sub esp,-80
00408AA4- E9 AE460000 jmp UnPackMe.0040D157 ;F8一直到这里,这里是大跳转,然后会跳往OEP附近
-------------------------------------------------------------------------------------------------------------
0040D157 /76 04 jbe short UnPackMe.0040D15D; 跳到这里,继续F8单步跟进
0040D159 |56push esi
0040D15A |83C4 04 add esp,4
0040D15D \70 07 jo short UnPackMe.0040D166
0040D15F56push esi
0040D16057push edi

0040D26581FA 0E86733A cmp edx,3A73860E
0040D26B79 06 jns short UnPackMe.0040D273
0040D26D7C 04 jl short UnPackMe.0040D273
0040D26F66:83F4 00xor sp,0
0040D2732C 00 sub al,0
0040D275- FFE0jmp eax; F8一直到这里,这里就是跳往 OEP的地方

---------------------------------------------------------------------------------------------------------------------------
0040170090nop;到达OEP,dump。
(很明显是VC++入口,可以把这句汇编成PUSH EBP,这样核心查壳的时候可以正 常显示是VC++了,不会再误显示还有upx壳)
004017018BECmov ebp,esp
004017036A FF push -1
0040170568 00254000 push UnPackMe.00402500
0040170A68 86184000 push UnPackMe.00401886 ; jmp to msvcrt._except_handler3
0040170F64:A1 00000000mov eax,dword ptr fs:[0]
0040171550push eax
0040171664:8925 0000000>mov dword ptr fs:[0],esp
0040171D83EC 68 sub esp,68
0040172053push ebx
0040172156push esi






吾爱破解脱壳练习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 11:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表