吾爱专题脱壳练习----压缩壳练习之三
本次主题是压缩壳,fly说,脱尽压缩壳,再去学加密壳,因此,先放压缩壳练习本次壳为NsPacK V3.7,上次的壳答案也随之公开,让大家看下大家的脱壳基础到底如何
请大家在回复中注意以下几点:
1.脱壳后的文件大家以千脑形式上传,目的是为了便于隐藏文件和节约论坛空间
2.脱壳后的文件,请大家以脱文附带脱壳后程序打包压缩传于千脑网盘
3.对于回帖过程中千万不要出现灌水,否则BAN了ID
4.对于有优秀脱文或优秀脱壳方法的朋友,给于适当威望奖励
5.鉴于此练习是针对论坛的所有人,请大家踊跃参加,如果不是脱了壳教作业的,请不要顶帖子,方便管理查阅,及时给出评分
6.以下为需要设置威望的格式
7.脱壳一以周期计算,(周期=等于三天)
8.脱壳周期一结束,就开始公布答案让大家能有更充分的学习环境,让不懂脱的朋友去寻找你失误的地方争取早日赶上论坛的积极份子
9.我们要的是脱文,并不是脱壳机去脱的,如果用脱机脱了别拿来,请一定附带上脱文
练习一:(结果已经公布)
http://www.52pojie.cn/thread-10496-1-1.html
练习二:(结果已经公布)
http://www.52pojie.cn/thread-10607-1-1.html 哈哈,还是偶滴沙发,占座
这次不手跟了esp最快
载入OD
004087A2 > 9C pushfd
004087A3 60 pushad
004087A4 E8 00000000 call 004087A9到这里hr esp
004087A9 5D pop ebp
F9 三次到这里
0040C0D85Dpop ebp; UnPackMe.<模块入口点>
0040C0D95Fpop edi
0040C0DA5Dpop ebp
0040C0DB5Bpop ebx
0040C0DC9Dpopfd
0040C0DD5Epop esi
0040C0DE58pop eax
0040C0DFC3retn下一步,就到OEP
00401700 55 push ebp
Dump + Fix,就不放附件了 传说中的OEP
004017018BECmov ebp, esp
004017036A FF push-1
0040170568 00254000 push00402500
0040170A68 86184000 push00401886 ; jmp 到 msvcrt._except_handler3
0040170F64:A1 00000000mov eax, dword ptr fs: 首先我们来执行一下这个不常规的内存法
━━━━━━━━━━━━━━━━━━━━━━━━━━
004087A2 >9Cpushfd //OD载入
004087A360pushad //ait+m打开内存镜象
004087A4E8 00000000 call UnPackMe.004087A9
004087A95Dpop ebp
004087AA83ED 07 sub ebp,7
004087AD8D8D 36FEFFFF lea ecx,dword ptr ss:
━━━━━━━━━━━━━━━━━━━━━━━━━━
内存映射,项目 26//此处设置F2访问中断
地址=0040C000 //紧跟着shift+f9运行
大小=00001000 (4096.)
物主=UnPackMe 00400000
区段=.ximo0
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040C58850push eax //程序停在了这里
0040C58956push esi //在次ait+m打开内存镜象
0040C58A9Cpushfd
0040C58B53push ebx
0040C58C55push ebp
0040C58D57push edi
0040C58E52push edx
━━━━━━━━━━━━━━━━━━━━━━━━━━
内存映射,项目 23//此处设置F2访问中断
地址=00401000 //紧跟着shift+f9运行
大小=00006000 (24576.)
物主=UnPackMe 00400000
区段=.ximo0
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
00401734830D 2C314000 F>or dword ptr ds:,FFFFFFFF //此时程序停在了这里
0040173B830D 30314000 F>or dword ptr ds:,FFFFFFFF //拉动滚动条,找向上段首
00401742FF15 8C214000 call dword ptr ds: ; msvcrt.__p__fmode
004017488B0D 20314000 mov ecx,dword ptr ds:
0040174E8908mov dword ptr ds:,ecx
00401750FF15 88214000 call dword ptr ds: ; msvcrt.__p__commode
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040170055push ebp//右键在此新建EIP,dump程序吧
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: 占位
首先单步F8 来到这里
004087A4E8 00000000 CALL UnPackMe.004087A9
下ESP 硬件访问断点 3次运行F9 来到这里
0040C0D85DPOP EBP; UnPackMe.<ModuleEntryPoint>
0040C0D95FPOP EDI
0040C0DA5DPOP EBP
0040C0DB5BPOP EBX
0040C0DC9DPOPFD
0040C0DD5EPOP ESI
0040C0DE58POP EAX
0040C0DFC3RETN
接下来单步F8走到返回就来到了OEP 删除分析 DUMP修复成功
个人思路不正确的地方还请多多指教 在来玩一次ESP定律法
━━━━━━━━━━━━━━━━━━━━━━━━━━
004087A2 >9Cpushfd //OD载入
004087A360pushad //这次执行esp定律或者命令行输入 hr esp
004087A4E8 00000000 call UnPackMe.004087A9
004087A95Dpop ebp
004087AA83ED 07 sub ebp,7
004087AD8D8D 36FEFFFF lea ecx,dword ptr ss:
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040C5FF83C5 04 add ebp,4//esp定律后停在此处
0040C602891407mov dword ptr ds:,edx
0040C605^ E9 9DFFFFFF jmp UnPackMe.0040C5A7//f8单步到此,跳转向上跳,让他跳
0040C60A8B55 00 mov edx,dword ptr ss:
0040C60D83C5 02 add ebp,2
━━━━━━━━━━━━━━━━━━━━━━━━━━ //下面的jmp跳到了这里
0040C5A78A06mov al,byte ptr ds:
0040C5A983EE FF sub esi,-1
0040C5AC0FB6C0movzx eax,al
0040C5AFFF2485 71C14000 jmp dword ptr ds: //f8单步到此,跳转向上跳,让他跳
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040C07680E0 3C and al,3C //经过那个jmp我们来到这里
0040C0798B1407mov edx,dword ptr ds://此时我们直接在段尾设置F2访问中断
0040C07C83ED 04 sub ebp,4 //紧跟着shift+f9运行
0040C07F8955 00 mov dword ptr ss:,edx//注意要删除硬件断点
0040C082E9 95050000 jmp UnPackMe.0040C61C
0040C0878A45 00 mov al,byte ptr ss:
0040C08A8A4D 02 mov cl,byte ptr ss:
0040C08D83ED 02 sub ebp,2
0040C090D2E0shl al,cl
0040C09266:8945 04mov word ptr ss:,ax
0040C0969Cpushfd
0040C0978F45 00 pop dword ptr ss:
0040C09AE9 7D050000 jmp UnPackMe.0040C61C
0040C09F8B45 00 mov eax,dword ptr ss:
0040C0A266:8B55 04mov dx,word ptr ss:
0040C0A683C5 06 add ebp,6
0040C0A966:8910 mov word ptr ds:,dx
0040C0ACE9 F6040000 jmp UnPackMe.0040C5A7
0040C0B166:8B45 00mov ax,word ptr ss:
0040C0B583ED 02 sub ebp,2
0040C0B866:0145 04add word ptr ss:,ax
0040C0BC9Cpushfd
0040C0BD8F45 00 pop dword ptr ss:
0040C0C0E9 57050000 jmp UnPackMe.0040C61C
0040C0C589E8mov eax,ebp
0040C0C783ED 02 sub ebp,2
0040C0CA66:8945 00mov word ptr ss:,ax
0040C0CEE9 49050000 jmp UnPackMe.0040C61C
0040C0D389ECmov esp,ebp
0040C0D559pop ecx
0040C0D659pop ecx
0040C0D75Apop edx
0040C0D85Dpop ebp
0040C0D95Fpop edi
0040C0DA5Dpop ebp
0040C0DB5Bpop ebx
0040C0DC9Dpopfd
0040C0DD5Epop esi
0040C0DE58pop eax
0040C0DFC3retn//在此设置F2访问中断,紧跟着shift+f9运行
0040C0E08B45 00 mov eax,dword ptr ss://然后在单步一下通过上面的retn直接返回到OEP
0040C0E38B55 04 mov edx,dword ptr ss:
0040C0E683C5 08 add ebp,8
━━━━━━━━━━━━━━━━━━━━━━━━━━
0040170055push ebp //运行lordpe把程序dump,在运行lmportRCE修复完工
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:
0040171550push eax
0040171664:8925 0000000>mov dword ptr fs:,esp
od载入后停在这里:
004087A2 >9Cpushfd
004087A360pushad
004087A4E8 00000000 call UnPackMe.004087A9//ESP 定律,F9运行
004087A95Dpop ebp
004087AA83ED 07 sub ebp,7
004087AD8D8D 36FEFFFF lea ecx,dword ptr ss:
第一次F9运行到这里
0040C5FF83C5 04 add ebp,4 //到这里
0040C602891407mov dword ptr ds:,edx
0040C605^ E9 9DFFFFFF jmp UnPackMe.0040C5A7
0040C60A8B55 00 mov edx,dword ptr ss:
0040C60D83C5 02 add ebp,2
0040C61036:8A02 mov al,byte ptr ss:
0040C61366:8945 00mov word ptr ss:,ax
0040C617^ E9 8BFFFFFF jmp UnPackMe.0040C5A7
0040C61C8D47 50 lea eax,dword ptr ds:
0040C61F39C5cmp ebp,eax
0040C621^ 0F87 80FFFFFF ja UnPackMe.0040C5A7
0040C62789E2mov edx,esp
第二次F9运行到这里
0040C082 /E9 95050000 jmp UnPackMe.0040C61C
0040C087 |8A45 00 mov al,byte ptr ss:
0040C08A |8A4D 02 mov cl,byte ptr ss:
0040C08D |83ED 02 sub ebp,2
0040C090 |D2E0shl al,cl
0040C092 |66:8945 04mov word ptr ss:,ax
0040C096 |9Cpushfd
0040C097 |8F45 00 pop dword ptr ss:
第三次F9运行到这里
0040C0D85Dpop ebp; UnPackMe.<ModuleEntryPoint>
0040C0D95Fpop edi
0040C0DA5Dpop ebp
0040C0DB5Bpop ebx
0040C0DC9Dpopfd
0040C0DD5Epop esi
0040C0DE58pop eax
0040C0DFC3retn //到这里返回到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:
0040171550push eax
0040171664:8925 0000000>mov dword ptr fs:,esp
0040171D83EC 68 sub esp,68
0040172053push ebx
0040172156push esi
0040172257push edi
004017238965 E8 mov dword ptr ss:,esp
可以dump,进行修复了。 1、OD打开文件 2、F8一次,看寄存器,esp=12ffc0,命令行下断 bp 12ffc0 F9一次 f8单步过,遇见往上跳的跳转,点击下一行,按F4,遇见下跳的跳转,f8继续 几次后,就达到目标 vc++编译 3、不会组织文字,见谅 1700.rar **** Hidden Message ***** **** Hidden Message ***** **** Hidden Message *****