吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 22329|回复: 12
上一主题 下一主题
收起左侧

[原创] 吾爱破解脱壳练习------简单加密壳

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



UnPackMe.rar

10 KB, 下载次数: 1366, 下载积分: 吾爱币 -1 CB

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

推荐
 楼主| 小生我怕怕 发表于 2008-9-27 00:20 |楼主
我来个怪式内存法
━━━━━━━━━━━━━━━━━━━━━━━━━━
00401000 >60pushad //OD载入
0040100181C0 5735821F add eax,1F823557 //ait+m打开内存镜像
0040100760pushad
0040100861popad
0040100981E8 5735821F sub eax,1F823557
0040100F61popad
004010106A 00 push 0
━━━━━━━━━━━━━━━━━━━━━━━━━━
内存映射,项目 22 //在此设置F2访问中断
地址=00404000//接着shift+f9运行
大小=00003000 (12288.)
物主=UnPackMe 00400000
区段=.ximo
包含=resources
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C93280D66:8B50 0Cmov dx,word ptr ds:[eax+C]//程序停在此处
7C93281166:8955 B0mov word ptr ss:[ebp-50],dx //在次打开内存镜像ait+m
7C9328158D70 10 lea esi,dword ptr ds:[eax+10]
7C9328188975 90 mov dword ptr ss:[ebp-70],esi
7C93281B8B55 0C mov edx,dword ptr ss:[ebp+C]
7C93281E66:F742 02 FFFF test word ptr ds:[edx+2],0FFFF
━━━━━━━━━━━━━━━━━━━━━━━━━━
内存映射,项目 30 //在此设置f2访问中断
地址=00407000//接着shift+f9运行
大小=00002000 (8192.)
物主=UnPackMe 00400000
区段=.ximo
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
004070000F31rdtsc //程序停在这里,把这里nop掉
0040700233C9xor ecx,ecx //NOP掉上面一句,开始f8单步
0040700403C8add ecx,eax //因为那一句不NOP掉程序就会跑飞
00407006EB 58 jmp short UnPackMe.00407060
00407008E8 DD000000 call UnPackMe.004070EA
0040700D894D FC mov dword ptr ss:[ebp-4],ecx
0040701089F2mov edx,esi
━━━━━━━━━━━━━━━━━━━━━━━━━━
004070600F31rdtsc //还是老规矩NOP掉这一句
004070622BC1sub eax,ecx //nop掉上面一句,开始f8单步走
004070643D FF0F0000 cmp eax,0FFF//因为不nop掉程序就会跑飞
004070690F83 A3000000 jnb UnPackMe.00407112
0040706FE9 84000000 jmp UnPackMe.004070F8
━━━━━━━━━━━━━━━━━━━━━━━━━━
004070F8B8 00174000 mov eax,UnPackMe.00401700 //注意这里已经出现我们的OEP
004070FD33F6xor esi,esi //即解码已经完成
004070FF33DBxor ebx,ebx
004071018A1C06mov bl,byte ptr ds:[esi+eax]
0040710480EB FF sub bl,0FF
00407107881C06mov byte ptr ds:[esi+eax],bl
0040710A46inc esi
0040710B83FE 32 cmp esi,32
0040710E^ 75 F1 jnz short UnPackMe.00407101
00407110FFE0jmp eax //单步走到此处即飞向我们的OEP
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040170055push ebp//此处即为我们的OEP
004017018BECmov ebp,esp //运行lordPE把程序dump,在运行lmportRCE修复即可
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

dumped_.rar

10 KB, 下载次数: 15, 下载积分: 吾爱币 -1 CB

3#
 楼主| 小生我怕怕 发表于 2008-9-27 00:21 |楼主
现在我们又来开始说下断点的方法
这个是我单步跟来觉得最快的断点
bp GetProcAddress
━━━━━━━━━━━━━━━━━━━━━━━━━━
00401000 >60pushad //OD载入,程序停于此处
0040100181C0 5735821F add eax,1F823557 //在命令栏输入:bp GetProcAddress
0040100760pushad
0040100861popad
0040100981E8 5735821F sub eax,1F823557
0040100F61popad
004010106A 00 push 0
0040101287F1xchg ecx,esi
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C80ADA0 >8BFFmov edi,edi //shift+f9运行9次
7C80ADA255push ebp//运行9次之后,ait+b取消断点
7C80ADA38BECmov ebp,esp //取消断点后,ait+f9返回程序领空
7C80ADA551push ecx
7C80ADA651push ecx
7C80ADA753push ebx
7C80ADA857push edi
7C80ADA98B7D 0C mov edi,dword ptr ss:[ebp+C]
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040991B83EC 04 sub esp,4//ait+f9返回后停在此处
0040991E50push eax //向下拉到断尾
0040991F33DBxor ebx,ebx
004099218B45 00 mov eax,dword ptr ss:[ebp]
004099248B8418 00004000 mov eax,dword ptr ds:[eax+ebx+400000]
0040992BA9 00000080 test eax,80000000
0040993074 07 je short UnPackMe.00409939
0040993225 FFFF0000 and eax,0FFFF
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040999B55push ebp //这里即是断尾
0040999C83EC FC sub esp,-4
0040999F83EC E0 sub esp,-20
004099A2C3retn //在此f2下断,shift+f9运行到此
004099A30000add byte ptr ds:[eax],al //停在上面的retn处后,f8单步走
004099A50000add byte ptr ds:[eax],al
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040998A60pushad //程序即会向上返回到这里
0040998BE8 05000000 call UnPackMe.00409995 //这里单步F7步入
0040999083B40D 6A18EB05>xor dword ptr ss:[ebp+ecx+5EB186A],41
00409998F6F9idiv cl
━━━━━━━━━━━━━━━━━━━━━━━━━━
00409995 /EB 05 jmp short UnPackMe.0040999C//这里开始f8单步走
00409997 |41inc ecx
00409998 |F6F9idiv cl
0040999A |2Fdas
0040999B |55push ebp
0040999C \83EC FC sub esp,-4
0040999F83EC E0 sub esp,-20
004099A2C3retn //这里又在此返回
━━━━━━━━━━━━━━━━━━━━━━━━━━
004070000F31rdtsc //程序停在这里,把这里nop掉
0040700233C9xor ecx,ecx //NOP掉上面一句,开始f8单步
0040700403C8add ecx,eax //因为那一句不NOP掉程序就会跑飞
00407006EB 58 jmp short UnPackMe.00407060
00407008E8 DD000000 call UnPackMe.004070EA
0040700D894D FC mov dword ptr ss:[ebp-4],ecx
0040701089F2mov edx,esi
━━━━━━━━━━━━━━━━━━━━━━━━━━
004070600F31rdtsc //还是老规矩NOP掉这一句
004070622BC1sub eax,ecx //nop掉上面一句,开始f8单步走
004070643D FF0F0000 cmp eax,0FFF//因为不nop掉程序就会跑飞
004070690F83 A3000000 jnb UnPackMe.00407112
0040706FE9 84000000 jmp UnPackMe.004070F8
━━━━━━━━━━━━━━━━━━━━━━━━━━
004070F8B8 00174000 mov eax,UnPackMe.00401700 //注意这里已经出现我们的OEP
004070FD33F6xor esi,esi //即解码已经完成
004070FF33DBxor ebx,ebx
004071018A1C06mov bl,byte ptr ds:[esi+eax]
0040710480EB FF sub bl,0FF
00407107881C06mov byte ptr ds:[esi+eax],bl
0040710A46inc esi
0040710B83FE 32 cmp esi,32
0040710E^ 75 F1 jnz short UnPackMe.00407101
00407110FFE0jmp eax //单步走到此处即飞向我们的OEP
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040170055push ebp//此处即为我们的OEP
004017018BECmov ebp,esp //运行lordPE把程序dump,在运行lmportRCE修复即可
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





[/hide]

dumped_.rar

10 KB, 下载次数: 0, 下载积分: 吾爱币 -1 CB

4#
下雪天 发表于 2008-9-27 01:24
看来这次蛮速度的都好了

【文章标题】: 52破解的一个UnPackMe脱壳
【文章作者】: 小小菜鸟
【软件名称】: UnPackMe.exe
【软件大小】: 34.4 KB
【下载地址】: 自己搜索下载
【保护方式】: AT4RE PROTECTOR V1.0
【使用工具】: OllyDBG 汉化第三版过VM的 LordPE_hh.EXEImportREC_fix_HH.exe
【操作平台】: XP SP2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!感谢小生师傅对我的帮助和关照!
--------------------------------------------------------------------------------
【详细过程】
打开OD程序停留在这里
00401000 >60PUSHAD
0040100181C0 5735821F ADD EAX,1F823557
0040100760PUSHAD
0040100861POPAD
0040100981E8 5735821F SUB EAX,1F823557
看起来非常麻烦
想到了两次内存断点
ALT +M
先在项目
地址=404000大小=3000包含 内容为 资源
下断 设置内存访问断点 快捷键为A
F9运行 到系统领空
7C93280D66:8B50 0CMOV DX,WORD PTR DS:[EAX+C]
7C93281166:8955 B0MOV WORD PTR SS:[EBP-50],DX
7C9328158D70 10 LEA ESI,DWORD PTR DS:[EAX+10]
7C9328188975 90 MOV DWORD PTR SS:[EBP-70],ESI
7C93281B8B55 0C MOV EDX,DWORD PTR SS:[EBP+C]

再打开内存
ALT +M
地址=402000大小=1000包含 内容为 数据
下断 设置内存访问断点 快捷键为A
F9运行 到
004099218B45 00 MOV EAX,DWORD PTR SS:[EBP]
004099248B8418 00004000 MOV EAX,DWORD PTR DS:[EAX+EBX+400000]
0040992BA9 00000080 TEST EAX,80000000
0040993074 07 JE SHORT UnPackMe.00409939
0040993225 FFFF0000 AND EAX,0FFFF
00409937EB 09 JMP SHORT UnPackMe.00409942
0040993985C0TEST EAX,EAX
断点----------删除内存断点
向下拉到
004099704ADEC EDX
0040997183C4 04 ADD ESP,4
0040997461POPAD----------F4断点---------运行到所选.前面很容易出现一个错误 F2也不好下 ,老是出提醒

往下看
0040997461POPAD
0040997541INC ECX
0040997687D3XCHG EBX,EDX
00409978E8 02000000 CALL UnPackMe.0040997F
0040997DF9STC
0040997EC9LEAVE
0040997F83C4 04 ADD ESP,4
0040998287D3XCHG EBX,EDX
0040998449DEC ECX
00409985E8 00000000 CALL UnPackMe.0040998A
0040998A60PUSHAD--------------堆栈操作想到ESP定律为了加速用下ESP

0040998449DEC ECX
00409985E8 00000000 CALL UnPackMe.0040998A
0040998A60PUSHAD---------运行到选定
0040998BE8 05000000 CALL UnPackMe.00409995---------数据窗口跟随-----看寄存器---50FF90---到数据窗口
右键------断点-------硬件访问----W
F9运行到这里
00409995 /EB 05 JMP SHORT UnPackMe.0040999C
00409997 |41INC ECX
00409998 |F6F9IDIV CL
0040999A |2FDAS
0040999B |55PUSH EBP
0040999C \83EC FC SUB ESP,-4
删除硬件断点单步跟入 一个RETN和回到这里
004070000F31RDTSC
0040700233C9XOR ECX,ECX
0040700403C8ADD ECX,EAX
00407006EB 58 JMP SHORT UnPackMe.00407060

单步jmp以后便到了这里

004070600F31RDTSC
004070622BC1SUB EAX,ECX
004070643D FF0F0000 CMP EAX,0FFF
004070690F83 A3000000 JNB UnPackMe.00407112------------通过无数次失败后明白这里不能跳--跳了便异常了
修改寄存器的值让跳转不能实现
0040706FE9 84000000 JMP UnPackMe.004070F8
这样就jmp到了这里

004070F8B8 00174000 MOV EAX,UnPackMe.00401700
004070FD33F6XOR ESI,ESI
004070FF33DBXOR EBX,EBX
004071018A1C06MOV BL,BYTE PTR DS:[ESI+EAX]
0040710480EB FF SUB BL,0FF
00407107881C06MOV BYTE PTR DS:[ESI+EAX],BL
0040710A46INC ESI
0040710B83FE 32 CMP ESI,32
0040710E^ 75 F1 JNZ SHORT UnPackMe.00407101----这里有个往回跳 看下面一行
00407110FFE0JMP EAX---------跳向了OEP,断点----运行到选定 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]


LordPE_hh.EXE纠正景象大小
ImportREC_fix_HH.exe
OEP填1700
其他的自动获取
----------IAT全部有效













--------------------------------------------------------------------------------
【经验总结】
不要纠缠在循环里面根据自己的经验在合适的地方下断 跳出循环
当多次出现 异常就要考虑怎么过异常 或许异常过了 就是OEP了

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

2008年09月27日 1:01:30


http://www.禁止使用网挣网盘/spac ... %D1%BF%C7.rar/.page 脱文
http://www.禁止使用网挣网盘/space/show/apple731/dumped_.rar/.page脱壳后文件
5#
wgz001 发表于 2008-9-27 09:09
方法有点生硬内存法(忽略所有异常)

首先查看内存 在00409000处下断 F2
内存映射,项目 23
地址=00409000
大小=00001000 (4096.)
物主=UnPackMe 00400000
区段=.ximo
包含=imports
类型=Imag 01001002
访问=R
初始访问=RWE
运行 到此处
0040908955PUSH EBP
0040908AE8 03000000 CALL UnPackMe.00409092
0040908F^ 77 F2 JA SHORT UnPackMe.00409083
00409091F787 F787F783 C>TEST DWORD PTR DS:[EDI+83F787F7],B95D04C>
0040909B8908MOV DWORD PTR DS:[EAX],ECX
0040909D0000ADD BYTE PTR DS:[EAX],AL

然后在00409200处下断F2
内存映射,项目 19
地址=00402000
大小=00001000 (4096.)
物主=UnPackMe 00400000
区段=.ximo
包含=data
类型=Imag 01001002
访问=R
初始访问=RWE
运行到此处
0040954B8002 D3 ADD BYTE PTR DS:[EDX],0D3
0040954EE8 00000000 CALL UnPackMe.00409553
00409553C70424 2C17371B MOV DWORD PTR SS:[ESP],1B37172C
0040955A40INC EAX
0040955B68 0E01B4DB PUSH DBB4010E
0040956060PUSHAD
然后在00407000处下断F2
内存映射,项目 20
地址=00407000
大小=00002000 (8192.)
物主=UnPackMe 00400000
区段=.ximo
类型=Imag 01001002
访问=R
初始访问=RWE
运行到此处
0040976B8032 BC XOR BYTE PTR DS:[EDX],0BC
0040976EEB 03 JMP SHORT UnPackMe.00409773
0040977088F4MOV AH,DH
004097722251 68 AND DL,BYTE PTR DS:[ECX+68]
0040977598CWDE
然后在0043000处下断F2
内存映射,项目 18
地址=00403000
大小=00001000 (4096.)
物主=UnPackMe 00400000
区段=.ximo
类型=Imag 01001002
访问=R
初始访问=RWE
运行 此时程序停留在00401734处
00401734830D 2C314000 F>OR DWORD PTR DS:[40312C],FFFFFFFF
0040173B830D 30314000 F>OR DWORD PTR DS:[403130],FFFFFFFF
00401742FF15 8C214000 CALL DWORD PTR DS:[40218C] ; msvcrt.__p__fmode
004017488B0D 20314000 MOV ECX,DWORD PTR DS:[403120]
0040174E8908MOV DWORD PTR DS:[EAX],ECX

壳已经全部解码 找到段首
0040170055PUSH EBP
004017018BECMOV EBP,ESP
004017036A FF PUSH -1
0040170568 00254000 PUSH UnPackMe.00402500
0040170A68 86184000 PUSH UnPackMe.00401886 ; JMP to msvcrt._except_handler3


右键新建EIP就可以DUMP修复正常

个人思路 不对之处还请多多指教

QQ截图未命名.jpg (27 KB, 下载次数: 0)

QQ截图未命名.jpg

dumped_.rar

10 KB, 下载次数: 0, 下载积分: 吾爱币 -1 CB

6#
lqiulu 发表于 2008-9-27 11:28
采用内存镜像法进行脱壳:

alt+m

00404000resources 此段F2下断,shift+f9运行,停在这里

7C9322DD66:8B50 0Cmov dx,word ptr ds:[eax+C]
7C9322E166:8955 B4mov word ptr ss:[ebp-4C],dx
7C9322E58D70 10 lea esi,dword ptr ds:[eax+10]
7C9322E88975 94 mov dword ptr ss:[ebp-6C],esi
7C9322EB8B55 0C mov edx,dword ptr ss:[ebp+C]
7C9322EE66:F742 02 FFFF test word ptr ds:[edx+2],0FFFF

alt+m

00401000段 F2下断,shift+f9运行,停在这里

004071018A1C06mov bl,byte ptr ds:[esi+eax]
0040710480EB FF sub bl,0FF
00407107881C06mov byte ptr ds:[esi+eax],bl
0040710A46inc esi
0040710B83FE 32 cmp esi,32
0040710E^ 75 F1 jnz short UnPackMe.00407101
00407110FFE0jmp eax //F4,这里跳向OEP,
00407112A3 64324000 mov dword ptr ds:[403264],eax
0040711761popad
00407118FF35 64324000 push dword ptr ds:[403264]
0040711E8F00pop dword ptr ds:[eax]

---------------------------------------------------------
00401700/.55push ebp
00401701|.8BECmov ebp,esp
00401703|.6A FF push -1
00401705|.68 00254000 push UnPackMe.00402500
0040170A|.68 86184000 push UnPackMe.00401886 ;jmp to msvcrt._except_handler3; SE handler installation
0040170F|.64:A1 0000000>mov eax,dword ptr fs:[0]
00401715|.50push eax
00401716|.64:8925 00000>mov dword ptr fs:[0],esp
0040171D|.83EC 68 sub esp,68
00401720|.53push ebx

修复后运行正常。
7#
傻人有傻福 发表于 2008-9-27 11:39
是不是附件有问题啊 这个壳是加密壳吗? 好像是压缩壳吧?
00401000 > $60pushad ;载入到这里
00401001 .81C0 5735821F add eax,1F823557
00401007 .60pushad
00401008 .61popad
00401009 .81E8 5735821F sub eax,1F823557
0040100F .61popad
00401010 .6A 00 push 0
00401012 .87F1xchg ecx,esi
00401014 .60pushad
00401015 .E8 04000000 call UnPackMe.0040101E

用2次内存镜像法 先在resource段下段 SHIFT+F9 来到这里
7C93280D66:8B50 0Cmov dx,ds:[eax+C]; 断在这里
7C93281166:8955 B0mov ss:[ebp-50],dx
7C9328158D70 10 lea esi,ds:[eax+10]
7C9328188975 90 mov ss:[ebp-70],esi
7C93281B8B55 0C mov edx,ss:[ebp+C]
7C93281E66:F742 02 FFFF test word ptr ds:[edx+2],0FFFF
7C93282475 11 jnz short ntdll.7C932837

再在CODE段下段 SHIFT+F9 来到这里 我这里还要先右键分析一下代码才会出来
004071018A1C06mov bl,ds:[esi+eax]; 来到这里
0040710480EB FF sub bl,0FF
00407107881C06mov ds:[esi+eax],bl
0040710A46inc esi
0040710B83FE 32 cmp esi,32
0040710E^ 75 F1 jnz short UnPackMe.00407101
00407110FFE0jmp eax; 跳向OEP

接着就来到OEP了
0040170055push ebp ; OEP
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,fs:[0]
0040171550push eax
0040171664:8925 00000000mov fs:[0],esp
0040171D83EC 68 sub esp,68
0040172053push ebx
0040172156push esi
0040172257push edi
004017238965 E8 mov ss:[ebp-18],esp
0040172633DBxor ebx,ebx
00401728895D FC mov ss:[ebp-4],ebx
0040172B6A 02 push 2
0040172DFF15 90214000 call ds:[402190] ; msvcrt.__set_app_type

直接OD脱壳就可以运行了用IMPORTREC看一下指针也没有加密的
8#
wgz001 发表于 2008-9-27 15:35
(RDTSC-------一种ANTI-debug的方法,首先得知道这一点)
下断点bp LoadlibraryAF9运行经过几次F9后看堆栈出现下面的语句
0050FF8C 0040991B/CALL 到 LoadLibraryA 来自 UnPackMe.00409919
0050FF90 004029C2\FileName = "USER32.dll"
ALT+F9返回(删除断点)来到这里
0040991B83EC 04 SUB ESP,4
0040991E50PUSH EAX
0040991F33DBXOR EBX,EBX
004099218B45 00 MOV EAX,DWORD PTR SS:[EBP]
004099248B8418 00004000 MOV EAX,DWORD PTR DS:[EAX+EBX+400000]
单步并且打断向上跳转(近跳转用F7)走到下面位置
004070000F31RDTSC
0040700233C9XOR ECX,ECX
0040700403C8ADD ECX,EAX
00407006EB 58 JMP SHORT UnPackMe.00407060
00407008E8 DD000000 CALL UnPackMe.004070EA

看到ANTI了吧如果执行了RDTSC就完蛋 所以NOP掉 单步来到这里
004070600F31RDTSC
004070622BC1SUB EAX,ECX
004070643D FF0F0000 CMP EAX,0FFF
004070690F83 A3000000 JNB UnPackMe.00407112

又是ANTINOP掉单步走

0040710B83FE 32 CMP ESI,32
0040710E^ 75 F1 JNZ SHORT UnPackMe.00407101
00407110FFE0JMP EAX

熟悉的面孔JMP EAX去OEP了
0040170055PUSH EBP
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

然后DUMP 修复了 正常

(附件就不传了)

个人思路不对之处还请多多指教
9#
fox2006 发表于 2008-9-27 15:57
[hide=0]吾爱专题脱壳练习----压缩壳练习

--------------------------------------------------------------------------------
【编写程序】:Microsoft Visual C++ v6.0
【调试环境】:WinXP、OllyDbg、PEiD、LordPE、ImportREC
【程序查壳】:查不到壳
―――――――――――――――――――――――――――――――

00401000 > 60 pushad ; OD载入挺在这里,ALT+M,00404000下内存断点,F9
00401001 81C0 5735821F add eax, 1F823557
00401007 60 pushad
00401008 61 popad
00401009 81E8 5735821F sub eax, 1F823557
0040100F 61 popad
00401010 6A 00 push 0

7C9322DD 66:8B50 0C mov dx, word ptr [eax+C] ; 到这里后,ALT+M,00401000下内存断点,F9
7C9322E1 66:8955 B4 mov word ptr [ebp-4C], dx
7C9322E5 8D70 10 lea esi, dword ptr [eax+10]
7C9322E8 8975 94 mov dword ptr [ebp-6C], esi
7C9322EB 8B55 0C mov edx, dword ptr [ebp+C]
7C9322EE 66:F742 02 FFFF test word ptr [edx+2], 0FFFF
7C9322F4 75 11 jnz short 7C932307
7C9322F6 0FB755 B4 movzx edx, word ptr [ebp-4C]
7C9322FA 8D34D6 lea esi, dword ptr [esi+edx*8]
7C9322FD 8975 94 mov dword ptr [ebp-6C], esi
7C932300 0FB740 0E movzx eax, word ptr [eax+E]

00407101 8A1C06 mov bl, byte ptr [esi+eax] ; 到这里后,F8
00407104 80EB FF sub bl, 0FF
00407107 881C06 mov byte ptr [esi+eax], bl
0040710A 46 inc esi
0040710B 83FE 32 cmp esi, 32
0040710E ^ 75 F1 jnz short 00407101
00407110 FFE0 jmp eax ; F4到这里,F8一下就跳到OEP了
00407112 A3 64324000 mov dword ptr [403264], eax
00407117 61 popad
00407118 FF35 64324000 push dword ptr [403264]
0040711E 8F00 pop dword ptr [eax]
00407120 C740 04 0000000>mov dword ptr [eax+4], 0
00407127 C742 24 E00000E>mov dword ptr [edx+24], E00000E0
0040712E 8B46 14 mov eax, dword ptr [esi+14]
00407131 0346 10 add eax, dword ptr [esi+10]
00407134 68 00020000 push 200
00407139 50 push eax

00401700 55 push ebp ; ----这里就是OEP啦,dump吧
00401701 8BEC mov ebp, esp
00401703 6A FF push -1
00401705 68 00254000 push 00402500
0040170A 68 86184000 push 00401886 ; jmp 到 msvcrt._except_handler3
0040170F 64:A1 00000000 mov eax, dword ptr fs:[0]
00401715 50 push eax
00401716 64:8925 0000000>mov dword ptr fs:[0], esp
0040171D 83EC 68 sub esp, 68
00401720 53 push ebx






[url=http://www.禁止使用网挣网盘/space/show/fox2006/上传·窒í/唯ⅰ惝ר题脱壳痢は°----
10#
unpack 发表于 2008-9-27 16:05
单步跟踪法
首先 OD载入程序 停在这儿
00401000 >60pushad ; OD载入,停在这儿0040100181C0 5735821F add eax, 1F8235570040100760pushad0040100861popad0040100981E8 5735821F sub eax, 1F8235570040100F61popad004010106A 00 push00040101287F1xchgecx, esi0040101460pushad00401015E8 04000000 call0040101E ; 这个F7
F7进入后来到
0040101E42inc edx0040101F4Adec edx0040102083EC FC sub esp, -40040102361popad0040102487F1xchgecx, esi00401026810424 1344ECB8 add dword ptr [esp], B8EC44130040102D46inc esi0040102EEB 01 jmp short 004010310040103061popad0040103147inc edi004010324Fdec edi004010334Edec esi00401034813424 6A9771E4 xor dword ptr [esp], E471976A0040103B81C3 5BE110CA add ebx, CA10E15B00401041E8 04000000 call0040104A ; 这个F7
接着来到
0040104A6A 00 push00040104C810424 20BA55A6 add dword ptr [esp], A655BA200040105383C4 04 add esp, 40040105683C4 04 add esp, 40040105981EB 5BE110CA sub ebx, CA10E15B0040105F810424 2884E20E add dword ptr [esp], 0EE284280040106687E9xchgecx, ebp0040106860pushad0040106956pushesi0040106A83C4 04 add esp, 40040106D61popad0040106E87E9xchgecx, ebp00401070810424 E838C094 add dword ptr [esp], 94C038E80040107745inc ebp0040107881C7 80B82EE7 add edi, E72EB8800040107EEB 02 jmp short 00401082 ; 这个跳后会来到下面的地方
0040108260pushad0040108383C4 20 add esp, 200040108681EF 80B82EE7 sub edi, E72EB8800040108C4Ddec ebp0040108D68 83ECF8C3 pushC3F8EC8300401092E8 03000000 call0040109A ; 这里F700401097204E 03 and [esi+3], cl0040109A53pushebx; F7后来到这儿0040109B60pushad0040109CE8 05000000 call004010A6 ; 这儿F7004010A18ACBmov cl, bl004010A3DA15 1883C404 ficom dword ptr [4C48318]004010A983EC E0 sub esp, -20004010AC83C4 04 add esp, 4004010AF83C4 04 add esp, 4004010B2FFD4callesp; 这里F8,然后就会跳向 到OEP
00401700 >55pushebp; OEP004017018BECmov ebp, esp004017036A FF push-10040170568 00254000 push004025000040170A68 86184000 push<jmp.&msvcrt.#238>0040170F64:A1 00000000mov eax, fs:[0]0040171550pusheax

还有一种方法,我记得用peid查的入口点,在入口点下断,然后shift+F9运行,就能到了(最懒的方法)

但是不知道我的电脑怎么了,由于这个壳报毒。我关了杀毒软件,但是我后来重新打开电脑再来用其他方法试试的时候
发现老是出错,而且连单步跟踪都有错误,不知道怎么回事!!!
郁闷了,看看哪儿出来问题~~~~~
思考中:为什么开始的时候能成功,到后来就不行了呢???郁闷中
那个开始感觉应该不是call esp就到oep了,为什么又会到呢??搞不明白~~~


思考了一下,两次内存镜像也成功了,不知道你们是不是能成功,为什么我成功后,第二次电脑重启就会有问题
首先打开内存(alt+m)
找到
Memory map, 条目 18 地址=00407000 大小=00002000 (8192.) 属主=UnPackMe 00400000 区段=.ximo 类型=Imag 01001002 访问=R 初始访问=RWE
F2下断

然后SHIFT+F9 运行


来到这儿
0040976B8032 BC xor byte ptr [edx], 0BC0040976EEB 03 jmp short 004097730040977088F4mov ah, dh004097722251 68 and dl, [ecx+68]
再打开内存
在这个地方F2下断
Memory map, 条目 25 地址=00403000 大小=00001000 (4096.) 属主=UnPackMe 00400000 区段=.ximo 类型=Imag 01001002 访问=R 初始访问=RWE
然后SHIFT+F9运行
来到下面的地方
00401734830D 2C314000 F>ordword ptr [40312C], FFFFFFFF ; 来到这儿0040173B830D 30314000 F>ordword ptr [403130], FFFFFFFF00401742FF15 8C214000 call[40218C] ; msvcrt.__p__fmode004017488B0D 20314000 mov ecx, [403120]0040174E8908mov [eax], ecx00401750FF15 88214000 call[402188] ; msvcrt.__p__commode004017568B0D 1C314000 mov ecx, [40311C]0040175C8908mov [eax], ecx
然后往上看,可以看到程序的oep
0040170055pushebp; 在这个地方右键-->此处为新的EIP004017018BECmov ebp, esp004017036A FF push-10040170568 00254000 push004025000040170A68 86184000 push00401886 ; jmp 到 msvcrt._except_handler30040170F64:A1 00000000mov eax, fs:[0]0040171550pusheax0040171664:8925 0000000>mov fs:[0], esp0040171D83EC 68 sub esp, 68
然后用loadPE脱壳,Import REC修复
即可


dumped_.rar
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 02:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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