【交作业贴】吾爱破解培训第一课交作业专帖
前提介绍:《吾爱破解培训第一课:破解基础知识之介绍常见工具和壳的特征》,讲师:Hmily
http://www.52pojie.cn/thread-378612-1-1.html
请跟贴回复作业,回复内容包括说明程序加的是什么壳,和基本的脱壳步骤哦,成品可以上传网盘贴地址,节省论坛空间就不要上传到论坛了。
作业截至到2015年7月16号00:00前提交算数,没有加报名群的同学也可以提交,后期会通过作业的提交情况,来淘汰没有交作业的,让交作业的新人加入。
对于作业的解答我已经更新到上面培训贴中,作业遇到问题的可以参考一下。
帖子我设置只有我可见,等一周后取消,切记不要回复和作业无关内容,否则会被扣分,前50个名交作业的同学有奖励。
本帖最后由 cyw 于 2015-7-10 20:19 编辑
@xh5510 首先很感谢XH师傅对我的悉心指导。师傅谢谢你!
第一个作业分析如下
首先先对课件查壳:
UPX -> Markus & Laszlo ver. [ ] <- from file. [ ! Modified ! ] ( sign like UPX packer )
可以确定为是UPX壳
然后我用的方法是ESP定律手脱UPX壳
第一步:载入程序,取消分析
00457580 >60 pushad
00457581 BE 00A04300 mov esi,吾爱破解.0043A000
00457586 8DBE 0070FCFF lea edi,dword ptr ds:
0045758C 57 push edi
0045758D 83CD FF or ebp,-0x1
00457590 EB 10 jmp short 吾爱破解.004575A2
00457592 90 nop
00457593 90 nop
00457594 90 nop
00457595 90 nop
00457596 90 nop
00457597 90 nop
第二步:F8单步一次,观察寄存器窗口 ESP突变红色
第三步:右击击ESP寄存器值0012FFA4然后数据窗口跟随
0012FFA47C930208ntdll.7C930208
0012FFA8FFFFFFFF
0012FFAC0012FFF0
0012FFB00012FFC4
0012FFB47FFD3000
0012FFB87C92E4F4ntdll.KiFastSystemCallRet
0012FFBC0012FFB0
第四步:在数据窗口下硬件断点
第五步:F9运行,删除硬件断点
00457758 8D4424 80 lea eax,dword ptr ss:
0045775C 6A 00 push 0x0
0045775E 39C4 cmp esp,eax
00457760^ 75 FA jnz short 吾爱破解.0045775C
00457762 83EC 80 sub esp,-0x80
00457765- E9 4266FCFF jmp 吾爱破解.0041DDAC
0045776A 0000 add byte ptr ds:,al
0045776C 48 dec eax
0045776D 0000 add byte ptr ds:,al
0045776F 0000 add byte ptr ds:,al
00457771 0000 add byte ptr ds:,al
00457773 0000 add byte ptr ds:,al
00457775 0000 add byte ptr ds:,al
00457777 0000 add byte ptr ds:,al
00457779 0000 add byte ptr ds:,al
第六步:继续F8单步
0045775E 39C4 cmp esp,eax
00457760^ 75 FA jnz short 吾爱破解.0045775C //向上跳转不能实现
00457762 83EC 80 sub esp,-0x80 //在此行F4运行至此
00457765- E9 4266FCFF jmp 吾爱破解.0041DDAC
0045776A 0000 add byte ptr ds:,al
0045776C 48 dec eax
第七步:继续两次F8,顺利到达OEP
0041DDAC E8 EF4E0000 call 吾爱破解.00422CA0
0041DDB1^ E9 79FEFFFF jmp 吾爱破解.0041DC2F
0041DDB6 3B0D B0074400 cmp ecx,dword ptr ds:
0041DDBC 75 02 jnz short 吾爱破解.0041DDC0
0041DDBE F3: prefix rep:
0041DDBF C3 retn
0041DDC0 E9 714F0000 jmp 吾爱破解.00422D36
0041DDC5 8BFF mov edi,edi
0041DDC7 55 push ebp
0041DDC8 8BEC mov ebp,esp
0041DDCA 51 push ecx
0041DDCB 53 push ebx
0041DDCC 56 push esi
第八步:用OD自带插件脱壳。结束。。。。
第二个作业分析如下
还是用ESP定律脱
首先查壳nsPack ver.3.x-4.1 reg by North Star 北斗压缩壳
第一步:接着载入OD。
0044C0BF >9C pushfd
0044C0C0 60 pushad
0044C0C1 E8 00000000 call 吾爱破解.0044C0C6
0044C0C6 5D pop ebp
0044C0C7 83ED 07 sub ebp,0x7
0044C0CA 8D85 61FCFFFF lea eax,dword ptr ss:
0044C0D0 8038 00 cmp byte ptr ds:,0x0
0044C0D3 74 0F je short 吾爱破解.0044C0E4
0044C0D5 8D85 89FCFFFF lea eax,dword ptr ss:
0044C0DB 8038 01 cmp byte ptr ds:,0x1
0044C0DE 0F84 42020000 je 吾爱破解.0044C326
0044C0E4 C600 01 mov byte ptr ds:,0x1
0044C0E7 8BD5 mov edx,ebp
第二步:观察ESP寄存器突变红色,右键数据窗口跟随
第三步:下硬件断点
第四步:F9运行,删除硬件断点
0044C33C- E9 6B1AFDFF jmp 吾爱破解.0041DDAC
0044C341 8BB5 15FCFFFF mov esi,dword ptr ss:
0044C347 0BF6 or esi,esi
0044C349 0F84 97000000 je 吾爱破解.0044C3E6
0044C34F 8B95 1DFCFFFF mov edx,dword ptr ss:
0044C355 03F2 add esi,edx
0044C357 833E 00 cmp dword ptr ds:,0x0
0044C35A 75 0E jnz short 吾爱破解.0044C36A
0044C35C 837E 04 00 cmp dword ptr ds:,0x0
0044C360 75 08 jnz short 吾爱破解.0044C36A
0044C362 837E 08 00 cmp dword ptr ds:,0x0
第五步:继续F8单步。
0041DDAC E8 db E8
0041DDAD EF db EF
0041DDAE 4E db 4E ;CHAR 'N'
0041DDAF 00 db 00
0041DDB0 00 db 00
0041DDB1 E9 db E9
0041DDB2 79 db 79 ;CHAR 'y'
0041DDB3 FE db FE
0041DDB4 FF db FF
0041DDB5 FF db FF
0041DDB6 3B db 3B ;CHAR ';'
0041DDB7 0D db 0D
0041DDB8 B0 db B0
0041DDB9 07 db 07
0041DDBA 44 db 44 ;CHAR 'D'
接着右键删除分析,到达OEP,接着脱壳!
0041DDAC E8 EF4E0000 call 吾爱破解.00422CA0
0041DDB1^ E9 79FEFFFF jmp 吾爱破解.0041DC2F
0041DDB6 3B0D B0074400 cmp ecx,dword ptr ds:
0041DDBC 75 02 jnz short 吾爱破解.0041DDC0
0041DDBE F3: prefix rep:
0041DDBF C3 retn
0041DDC0 E9 714F0000 jmp 吾爱破解.00422D36
0041DDC5 8BFF mov edi,edi
0041DDC7 55 push ebp
0041DDC8 8BEC mov ebp,esp
OEP代码
第三个作业分析如下
查壳:FSG v2.0 F S G
ESP定律不能用了 单步F8直到软件跑起来
第一步:载入程序
00400154 >8725 E4624700 xchg dword ptr ds:,esp
0040015A 61 popad
0040015B 94 xchg eax,esp
0040015C 55 push ebp
0040015D A4 movs byte ptr es:,byte ptr ds:
0040015E B6 80 mov dh,0x80
00400160 FF13 call dword ptr ds:
00400162^ 73 F9 jnb short 吾爱破解.0040015D//下一行F4,打断上跳
00400164 33C9 xor ecx,ecx
00400166 FF13 call dword ptr ds:
00400168 73 16 jnb short 吾爱破解.00400180
0040016A 33C0 xor eax,eax
继续用上面的步骤直到程序跑起来
00400168 /73 16 jnb short 吾爱破解.00400180
0040016A |33C0 xor eax,eax
0040016C |FF13 call dword ptr ds:
0040016E |73 1F jnb short 吾爱破解.0040018F
00400170 |B6 80 mov dh,0x80
00400172 |41 inc ecx
00400173 |B0 10 mov al,0x10
00400175 |FF13 call dword ptr ds:
00400177 |12C0 adc al,al
00400179^|73 FA jnb short 吾爱破解.00400175//这里有两个跳
0040017B |75 3A jnz short 吾爱破解.004001B7
0040017D |AA stos byte ptr es: //在这行F4
0040017E^|EB E0 jmp short 吾爱破解.00400160
00400180 \FF53 08 call dword ptr ds:
00400183 02F6 add dh,dh
00400172 41 inc ecx
00400173 B0 10 mov al,0x10
00400175 FF13 call dword ptr ds:
00400177 12C0 adc al,al
00400179^ 73 FA jnb short 吾爱破解.00400175
0040017B 75 3A jnz short 吾爱破解.004001B7
0040017D AA stos byte ptr es:
0040017E^ EB E0 jmp short 吾爱破解.00400160 //这里要打断上跳
00400180 FF53 08 call dword ptr ds:
00400183 02F6 add dh,dh //在此行F4
00400185 83D9 01 sbb ecx,0x1
004001C6 FF53 10 call dword ptr ds:
004001C9 95 xchg eax,ebp
004001CA 8B07 mov eax,dword ptr ds:
004001CC 40 inc eax
004001CD^ 78 F3 js short 吾爱破解.004001C2
004001CF 75 03 jnz short 吾爱破解.004001D4
004001D1 FF63 0C jmp dword ptr ds:
004001D4 50 push eax
004001D5 55 push ebp
004001D6 FF53 14 call dword ptr ds:
004001D9 AB stos dword ptr es:
004001DA^ EB EE jmp short 吾爱破解.004001CA
004001DC 33C9 xor ecx,ecx //运行到此行,程序跑起来了
004001DE 41 inc ecx
004001DF FF13 call dword ptr ds:
程序跑起来了。在运行的那个jmp地方上面找最近的jmp F2下断
重新运行后,F9运行
004001D1- FF63 0C jmp dword ptr ds: ; 吾爱破解.0041DDAC
004001D4 50 push eax
004001D5 55 push ebp
004001D6 FF53 14 call dword ptr ds:
004001D9 AB stos dword ptr es:
004001DA^ EB EE jmp short 吾爱破解.004001CA
004001DC 33C9 xor ecx,ecx
004001DE 41 inc ecx
004001DF FF13 call dword ptr ds:
004001E1 13C9 adc ecx,ecx
004001E3 FF13 call dword ptr ds:
004001E5^ 72 F8 jb short 吾爱破解.004001DF
004001E7 C3 retn
程序已经断下来了,F7进入,右键删除分析,到达OEP
0041DDAC E8 EF4E0000 call 吾爱破解.00422CA0
0041DDB1^ E9 79FEFFFF jmp 吾爱破解.0041DC2F
0041DDB6 3B0D B0074400 cmp ecx,dword ptr ds:
0041DDBC 75 02 jnz short 吾爱破解.0041DDC0
0041DDBE F3: prefix rep:
0041DDBF C3 retn
0041DDC0 E9 714F0000 jmp 吾爱破解.00422D36
0041DDC5 8BFF mov edi,edi
0041DDC7 55 push ebp
0041DDC8 8BEC mov ebp,esp
0041DDCA 51 push ecx
0041DDCB 53 push ebx
然后OD插件脱壳、打开程序提示找不到入口点
显然这个OD插件脱这种壳不管用
换LordPE脱壳dumped完成后,发现程序还是不能打开。
用Import REC修复输入表
OEP:0001DDAC
RVA:00032000
Size:00000200
终于脱壳完成了。OK了!
作业地址:链接:http://share.weiyun.com/eda90c075683fb3444cca016a0767741 (密码:LHjx)
虽然这次作业不是自己独立完成的,靠着师傅的指导完成,但是我从中体会到了自己手动脱壳成功的喜悦,本来之前要放弃了,但是经过今天的小小的成功,我顿时感觉信心足足的!我会继续努力的!
续。。。。。。。。
之前做的作业在XP环境下运行正常,但是在WIN7下运行就出问题了,今天在群里得到了答案,现在再把修复好的作业再提交上来,这次在WIN7和XP环境下都可以完美运行了!
修复作业地址:链接:http://share.weiyun.com/bbf9d6a0a2978bee1482e54bf4e3d3b9 (密码:7BcW)
1 upx壳
2 FSG壳
3 NsPack 本帖最后由 海盗小K 于 2015-7-5 14:09 编辑
这是H大留给我们的第一次作业了,理所当然应该好好对待。
我本以为这种没有安全风险的程序直接在我Win7 x64非虚拟机环境下调试就可以分分钟搞定了,哪知道昨晚搞到三点都没能让dumped的程序跑起来。
后来查了查,发现并不能使用win7 x64环境,于是转战吾爱破解专用虚拟机,分分钟就搞定了。
下面说一下思路。
作者玩了狡猾,把区段的名字都改掉了,应该为upx0,upx1的位置变成了www.52pojie.cn之类,然后这种简单的壳,其实用PEiD效果也很好。
下面查壳。
所以 吾爱破解培训第一课作业一.exe 的壳为UPX 0.89.6 - 1.02 /1.05 -1.24 -> Markus&Laszlo
UPX脱壳非常简单,我之前在Win7下试过好多UPX脱壳机都不行,唉,可爱又可恨的Win7啊。脱壳调试还是认准XP吧亲们。
载入后问是否分析代码,点否后来到pushad处,可以直接往下拉,就能找到popad,下面不远处就是一个大跳jmp,F2下断,F9跑起来会停下,在jmp处按一下F8即可到达OEP。
很明显的VS2008入口特征。
直接右键,使用OllyDump脱壳调试进程,保存,OK。
XP中可以完美运行。再次查壳:
C++ 8.0即为VS2008啦,脱壳成功。
第二个UnpackMe直接PEiD查壳:
NsPack北斗压缩壳,也很简单。直接ESP定律,硬件断点,硬件访问->Word,F9会停下,删除硬件断点后,F8一下即可到达OEP。
使用OllyDump脱壳调试进程,OK。程序完美运行,无需修复。
再次查壳,也为Microsoft Virtual C++ 8.0,为VS2008程序。
第三个UnpackMe也直接PEiD查壳:
FSG 2.0的壳,可以手脱,但是重点在修复。
重点说一下这个。看了ximo脱这个壳很有感触。
首先OD载入,停在这里。
单步走两下后,来到这里,其中堆栈窗口的显示是这样的:
在第四个那里右键,数据窗口中跟随。
然后数据窗口第一行右键,下硬件执行断点。(FSG专用ESP定律)
F9运行,停在这里:
CPU窗口第一行右键,分析->从模块删除分析。
这样此时显示的就是我们的OEP了。
此时我们用OllyDump脱壳,是跑不起来的。(OD暂时不要关闭)错误如下:
所以我们还需要修复该文件的输入表。打开Import REConsturctor,将第三课.exe附加进来。
从OEP看出,入口地址的偏移为1DDAC,我们输入Improt REC 中的OEP处,然后点击自动查找IAT,然后点击获取输入表:
将那个输入表展开后,我们发现第一个RVA为000320BC,玩过FSG的应该知道,这种自动查找的IAT肯定是不完全的。
但是在这里OEP跟VC++ 6.0的OEP不同,找不到教程里的那种call地址,怎么办呢?
我们直接根据第一个RVA来找。
在OD的command栏里面输入 d 4320bc回车
此时数据窗口出现一堆API函数,如下图所示:
正好与Import REC中的那些相对应。
我们往上找找,一直找到为空的地方,记下此时的位置:
此时第一个API的地址为00432000
我们再往下找,找到最后一个API的地址:
最后一个地址是00432558
所以我们根据这些信息让Import REC手动查找IAT:
输入这数据后,直接点获取输入表,然后点无效函数,右键,剪切。然后转存,即可。
OK,大功告成,现在程序能正常运行了。查壳为Microsoft Virtual C++ 8.0,已经脱壳成功。
作业到现在完全结束。
脱壳成果:链接:http://pan.baidu.com/s/1gdCQjyr 密码:gt71
仅能在XP下运行。Win7以上均不可。
本帖最后由 dagangwood 于 2015-7-5 02:05 编辑
作业1:UPX壳
作业2:nsPack壳
作业3:FSG壳
作业1:UPX壳: 使用ESP定律,程序入口点截图如下
作业2:nsPack壳:
使用ESP定律,程序入口点截图如下
作业3:FSG壳:
单步执行F8+F4+大跳转,程序入口点截图如下
本帖最后由 1094483658 于 2015-7-5 11:59 编辑
吾爱破解培训第一课作业一.exe是UPX -> Markus & Laszlo ver加的壳
脱壳:用ESP定律或右键直接查找POPAD或单步,往下几行就会看到
00457765- E9 4266FCFF jmp 吾爱破解.0041DDAC
这个跳转,直接跳向程序入口点
0041DDAC E8 EF4E0000 call 吾爱破解.00422CA0
用LordPE和ImpREC脱壳保存
吾爱破解培训第一课作业二.exe是nsPack ver.3.x-4.1 reg by North Star加的壳
脱壳:用ESP定律或单步,来到
0044C33C- E9 6B1AFDFF jmp 吾爱破解.0041DDAC
跳向程序入口点
0041DDAC .E8 EF4E0000 call 吾爱破解.00422CA0
用LordPE和ImpREC脱壳保存
吾爱破解培训第一课作业三.exe是FSG v2.0 F S G加的壳
脱壳:但不往下第三行,来到
0040015B 94 xchg eax,esp
这时我们观察堆栈窗口。如下
004762E8 004001E8吾爱破解.004001E8
004762EC 004001DC吾爱破解.004001DC
004762F0 004001DE吾爱破解.004001DE
004762F4 0041DDAC吾爱破解.0041DDAC
004762F8 > 7C801D7Bkernel32.LoadLibraryA
004762FC > 7C80AE40kernel32.GetProcAddress
我们在004762F4 0041DDAC吾爱破解.0041DDAC处
右键——数据窗口跟随——选中四个字节直接下硬件执行断点
按F9运行,程序直接跳向OEP处
0041DDAC .E8 EF4E0000 call 吾爱破解.00422CA0
修复IAT时要手动查找IAT的起始位置和大小。随便找一个像这样的CALL
call dword ptr ds:
下硬件访问断点,重载程序,观察数据窗口,就能发现IAT的起始位置和大小
之后用LordPE和ImpREC脱壳保存
本帖最后由 lyxsh2013 于 2015-7-8 21:22 编辑
[一]OD加载看见一大群nop,就知道是UPX的,F8一次用ESP定律来到
00457758 8D4424 80 lea eax,dword ptr ss:
0045775C 6A 00 push 0x0
0045775E 39C4 cmp esp,eax
00457760^ 75 FA jnz short 吾爱破解.0045775C
00457762 83EC 80 sub esp,-0x80//这里F4
00457765- E9 4266FCFF jmp 吾爱破解.0041DDAC//这里跳过去后就到OEP
0045776A 0000 add byte ptr ds:,al
0045776C 48 dec eax
0045776D 0000 add byte ptr ds:,al
0045776F 0000 add byte ptr ds:,al
00457771 0000 add byte ptr ds:,al
00457773 0000 add byte ptr ds:,al
在向上jnz下面一行F4(奇怪的是要按两次)
接下来F8单步走两次,大跳后,就到了入口
目测判断是VS2008的程序
0041DDAC E8 EF4E0000 call 吾爱破解.00422CA0
0041DDB1^ E9 79FEFFFF jmp 吾爱破解.0041DC2F
0041DDB6 3B0D B0074400 cmp ecx,dword ptr ds:
0041DDBC 75 02 jnz short 吾爱破解.0041DDC0
0041DDBE F3: prefix rep:
0041DDBF C3 retn
脱下来的程序用PE查怪怪的...{:301_982:}
[二]OD加载完全看不懂,用PE一查是:nsPack ver.3.x-4.1 reg by North Star
百度查一下这壳,能用EPS定律脱
F8,单步走后ESP定律到了0044C33C,直接是个JMP,F8跟过去后出现了一大堆看不懂的
右键--分析--从模块中删除分析后,发现和第一个程序入口完全一样
[三]OD加载也目测不出是什么壳,PE查出是:FSG v2.0 F S G- www.xtreeme.prv.pl
自己试了下ESP定律发现不好使
看了http://www.52pojie.cn/thread-338937-1-1.html 分享 FSG 2.0的一次脱壳经历,IAT API修复--wanttobeno 的帖子后
学她点击跳转F4跑,找到跑飞的JMP
004001CD^\78 F3 js short 吾爱破解.004001C2
004001CF 75 03 jnz short 吾爱破解.004001D4
004001D1 FF63 0C jmp dword ptr ds: ; 这个跳转
004001D4 50 push eax
004001D5 55 push ebp
下断,重载,F9运行到004001D1这个跳转,F8跟过去后,发现又是一堆看不懂的,从模块中删除分析后,看见了程序入口.
在入口脱壳后,运行却出问题了,想必是要修复{:301_977:}
看了小生大大的压缩壳练习二,以及百度上手动寻找IAT方法后,成功修复啦.{:301_1003:}
脱壳脱到OEP的时候,右键当前CALL:数据窗口中跟随-内存地址,然后在左下角右键:长型-地址
这时左下角大概是这个样
向上翻,找一大堆数值为00000000和有英文注释交界的地方
OEP:1DDAC RVA:32000,长度不会算,填的2000,修复之后就好了
壳
作业一:UPX
作业二:nsPack ver.3.x-4.1
作业三:FSG v2.0
脱壳
作业一:查找命令popad,00457765处下断点,F9,jmp 0041DDAC。用LordPE dump,用ImportREC修复,oep为1DDAC。
作业二:查找命令序列popad popfd,0044C33C处下断点,F9,来到0041DDAC。用LordPE dump,用ImportREC修复,oep为1DDAC。
作业三:观察代码,稍微往下拉,即可发现004001D1处的可疑跳转,下断点,F9,来到0041DDAC,从模块删除分析。用LordPE dump,用ImportREC修复,oep为1DDAC,特别修改rva为00032000,大小为554。
作业链接:http://pan.baidu.com/s/1ntvIPo1 密码: vdjn
成品
链接:http://pan.baidu.com/s/1eQwDfbk 密码:kcg8
{:1_924:}路过领CB 作业一的壳是UPX壳,我使用的是单步跟踪法,遇见向上跳转就到下一步F4。也可以使用ESP定律法。
作业二的壳是Nspack壳,我使用的是ESP定律法,瞬间到达~!
作业三的壳是FSG壳,他有好几次跑飞要注意,还有OEP的地址隐藏也要注意,在三个跳转的一个位置。
我作业答案~。H大,如果有问题纠正我啊~!
链接:http://pan.baidu.com/s/1jGvOXCU 密码:sxdy 作业1:
壳:UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
脱壳方法:ESP定律
在第一个pushad执行完以后,选择设置esp刚刚压进去的数据的硬件访问断点,然后F9.就到了这里
00457758 8D4424 80 lea eax,dword ptr ss:
0045775C 6A 00 push 0x0
0045775E 39C4 cmp esp,eax
00457760^ 75 FA jnz short 吾爱破解.0045775C
00457762 83EC 80 sub esp,-0x80
00457765- E9 4266FCFF jmp 吾爱破解.0041DDAC
0045776A 0000 add byte ptr ds:,al
0045776C 48 dec eax
取消硬件断点,单步下去,有个跳转。
就到了这里:
0041DDAC E8 EF4E0000 call 吾爱破解.00422CA0
0041DDB1^ E9 79FEFFFF jmp 吾爱破解.0041DC2F
0041DDB6 3B0D B0074400 cmp ecx,dword ptr ds:
0041DDBC 75 02 jnz short 吾爱破解.0041DDC0
0041DDBE F3: prefix rep:
然后用od的插件脱,保存,查壳(这里有个疑问,EXEinfo查脱完的壳的程序,居然是未知的壳,用peid查就是VC8.0,不知道是不是我弄错了),已脱运行没有报错。
作业2:
壳:nsPack
脱壳方法:ESP定律
0044C0BF >9C pushfd
0044C0C0 60 pushad
0044C0C1 E8 00000000 call 吾爱破解.0044C0C6
用od加载了以后,是这样的,让od执行pushfd,pushad,然后把刚压进栈的数据设置硬件访问断点,然后F9,来到这里。
0044C33B 9D popfd
0044C33C- E9 6B1AFDFF jmp 吾爱破解.0041DDAC
0044C341 8BB5 15FCFFFF mov esi,dword ptr ss:
0044C347 0BF6 or esi,esi
0044C349 0F84 97000000 je 吾爱破解.0044C3E6
取消硬件断点,继续单步下去,下面的那个jmp,直接跳到OEP
0041DDAC .E8 EF4E0000 call 吾爱破解.00422CA0
0041DDB1 .^ E9 79FEFFFF jmp 吾爱破解.0041DC2F
0041DDB6 $3B0D B0074400 cmp ecx,dword ptr ds:
0041DDBC .75 02 jnz short 吾爱破解.0041DDC0
0041DDBE .F3: prefix rep:
0041DDBF .C3 retn
VS2008的入口点。
用od的插件脱,搞定。
作业3:
壳:FSG v2.0
脱壳方法:ESP定律+单步
刚加载的时候
00400154 >8725 E4624700 xchg dword ptr ds:,esp
0040015A 61 popad
0040015B 94 xchg eax,esp
0040015C 55 push ebp
0040015D A4 movs byte ptr es:,byte ptr ds:
看见popad,我还是在popad执行后,把压入的数据设硬件访问断点。
然后f9到这里。
004001E8 02D2 add dl,dl
004001EA 75 05 jnz short 吾爱破解.004001F1
004001EC 8A16 mov dl,byte ptr ds:
004001EE 46 inc esi ; 吾爱破解.00455CCD
004001EF 12D2 adc dl,dl
004001F1 C3 retn
去掉硬件断点,让其跑起来,向下跳转让其实现,向上跳转,则到它的下一行F4,最后在一个地方跑飞了。
004001CD^\78 F3 js short 吾爱破解.004001C2
004001CF 75 03 jnz short 吾爱破解.004001D4
004001D1- FF63 0C jmp dword ptr ds: ; 吾爱破解.0041DDAC
004001D4 50 push eax ; kernel32.RaiseException
004001D5 55 push ebp ; kernel32.7C800000
004001D6 FF53 14 call dword ptr ds: ; kernel32.GetProcAddress
004001D9 AB stos dword ptr es:
004001DA^ EB EE jmp short 吾爱破解.004001CA
004001DC 33C9 xor ecx,ecx ; ntdll.7C937DE9
在004001DC这里F4跑飞了,看起来是哪个jmp里面有问题,继续看了哪个jmp循环里面的代码,发现004001D1- FF63 0C jmp dword ptr ds: 这个是最有可能跑飞的了。下断后,重新载入,F9,然后F8,跳到OEP
0041DDAC .E8 EF4E0000 call 吾爱破解.00422CA0
0041DDB1 .^ E9 79FEFFFF jmp 吾爱破解.0041DC2F
0041DDB6 $3B0D B0074400 cmp ecx,dword ptr ds:
0041DDBC .75 02 jnz short 吾爱破解.0041DDC0
0041DDBE .F3: prefix rep:
0041DDBF .C3 retn
接下来脱壳,遇到点小问题,就是用od的插件脱出来,用i汉化版的import修复了一下输入表,结果还是跑不起来,折腾了一下,还是没搞定,在论坛里搜了一下,发现有人也遇到了这个问题,看了一下帖子,发现,它的修复有点复杂,又是对比,又是添加,重点是用脱壳机脱了再对比修复(不想下脱壳机),最后看帖子,看见H大,说把import的查找范围设置大一些,果断试了,结果还是不行。也是醉了,看见说是要关机重启电脑,想想就麻烦,然后试了一下用loadPe脱,然后用原版的import把查找范围弄大,然后查找把无效的也干掉,然后修复,结果成功运行了。收工了,菜鸟也是不容易啊。
脱完壳的程序
链接: http://pan.baidu.com/s/1jG4CzaA 密码: gi8a
谢谢,H大。最后请问,loadpe的完全脱壳的原理是怎么样的呢?疑问2,EXEinfo查脱完的壳的程序,居然是未知的壳,用peid查就是VC8.0,不知道是不是我弄错了。上面的脱完用exeinfo都查不出来。用peid就没问题。
用记事本敲的,看起来可能会有点累,辛苦了H大。谢谢:loveliness:
本帖最后由 冲动IS魔鬼 于 2015-7-6 23:21 编辑
百度网盘 作业
http://pan.baidu.com/s/1c0jQcFY
作业一 UPX 一步法
起始 搜索
popad
找到出栈并找到关键跳
00457757 .61 popad
00457758 .8D4424 80 lea eax,dword ptr ss:
0045775C >6A 00 push 0x0
0045775E .39C4 cmp esp,eax
00457760 .^ 75 FA jnz short 吾爱破解.0045775C
00457762 .83EC 80 sub esp,-0x80
00457765 .- E9 4266FCFF jmp 吾爱破解.0041DDAC
大跳过后就是oep
0041DDAC E8 EF4E0000 call 吾爱破解.00422CA0
0041DDB1^ E9 79FEFFFF jmp 吾爱破解.0041DC2F
0041DDB6 3B0D B0074400 cmp ecx,dword ptr ds:
0041DDBC 75 02 jnz short 吾爱破解.0041DDC0
0041DDBE F3: prefix rep:
0041DDBF C3 retn
0041DDC0 E9 714F0000 jmp 吾爱破解.00422D36
0041DDC5 8BFF mov edi,edi
0041DDC7 55 push ebp
0041DDC8 8BEC mov ebp,esp
0041DDCA 51 push ecx
0041DDCB 53 push ebx
0041DDCC 56 push esi
0041DDCD 57 push edi
作业二 NsPack ESP定律法
单步执行到
0044C0C1 E8 00000000 call 吾爱破解.0044C0C6
ESP断点并运行 直达出栈
0044C33B 9D popfd
0044C33C- E9 6B1AFDFF jmp 吾爱破解.0041DDAC
0044C341 8BB5 15FCFFFF mov esi,dword ptr ss:
0044C347 0BF6 or esi,esi
0044C349 0F84 97000000 je 吾爱破解.0044C3E6
0044C34F 8B95 1DFCFFFF mov edx,dword ptr ss:
0044C355 03F2 add esi,edx ; ntdll.KiFastSystemCallRet
并找到关键跳 大跳之后就是oep
0041DDAC .E8 EF4E0000 call 吾爱破解.00422CA0
0041DDB1 .^ E9 79FEFFFF jmp 吾爱破解.0041DC2F
0041DDB6 $3B0D B0074400 cmp ecx,dword ptr ds:
0041DDBC .75 02 jnz short 吾爱破解.0041DDC0
0041DDBE .F3: prefix rep:
0041DDBF .C3 retn
0041DDC0 >E9 714F0000 jmp 吾爱破解.00422D36
0041DDC5 $8BFF mov edi,edi
0041DDC7/.55 push ebp
0041DDC8|.8BEC mov ebp,esp
0041DDCA|.51 push ecx
0041DDCB|.53 push ebx
作业三 FSG ESP定律法
单步走到
0040015D A4 movs byte ptr es:,byte ptr ds:
esp下断点
运行到如下位置
004001C2 AD lods dword ptr ds:
004001C3 97 xchg eax,edi ; 吾爱破解.00453000
004001C4 AD lods dword ptr ds:
004001C5 50 push eax
004001C6 FF53 10 call dword ptr ds: ; kernel32.LoadLibraryA
004001C9 95 xchg eax,ebp
004001CA 8B07 mov eax,dword ptr ds:
004001CC 40 inc eax
004001CD^ 78 F3 js short 吾爱破解.004001C2
004001CF 75 03 jnz short 吾爱破解.004001D4
004001D1- FF63 0C jmp dword ptr ds: ; 吾爱破解.0041DDAC
找到三个关键跳转 大跳之后到达oep
0041DDAC .E8 EF4E0000 call 吾爱破解.00422CA0
0041DDB1 .^ E9 79FEFFFF jmp 吾爱破解.0041DC2F
0041DDB6 $3B0D B0074400 cmp ecx,dword ptr ds:
0041DDBC .75 02 jnz short 吾爱破解.0041DDC0
0041DDBE .F3: prefix rep:
0041DDBF .C3 retn
0041DDC0 >E9 714F0000 jmp 吾爱破解.00422D36
0041DDC5 $8BFF mov edi,edi ;吾爱破解.004322F4
0041DDC7/.55 push ebp ;oleaut32.770F0000
0041DDC8|.8BEC mov ebp,esp
0041DDCA|.51 push ecx ;ntdll.7C937DE9
0041DDCB|.53 push ebx ;吾爱破解.004762E8
0041DDCC|.56 push esi ;吾爱破解.0043CF04
0041DDCD|.57 push edi ;吾爱破解.004322F4
用loadpe 保存脱壳
寻找call
0041E0E6 .FF15 3C224300 call dword ptr ds: ;ntdll.RtlGetLastWin32Error
指针起始位置 3200 大小选择1000 然后剪切无效指针 保存修复即可