- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五十八章-ExeCryptor v2.2.50.h
好,本章还剩下ExeCryptor的最后三个UnP
ackMe,这三个UnPackMe是本系列教程中最
难脱的。我们来尝试对它们进行脱壳,如
果没有脱壳成功的话,至少也会记录下脱
壳思路,供大家学习。
我们双击运行UnPackMe H,可以看到它新
增了如下保护:
我们可以看到入口点保护开启了。也就是
说,入口点可能被隐藏起来了。
好,我们还是跟之前一样对代码段设置bre
ak-on-execute断点,运行起来,断到了这
里。
貌似有点不对劲,我们看看之前脱壳过的
版本。
我们可以看到入口点处的代码明显被隐藏
了。
这是之前脱壳版本的截图:
这是现在UnPackMe H的截图:
对比着看,明显有差别。
我们来看看UnPackMe H此时堆栈的情况:
我们再来看看之前脱过壳的版本:
我们可以看到之前脱壳修复后的版本断在
OEP处时,栈顶指针指向的地址是12FFC4 (
不同的机器这个地址可能会不同)。根据
堆栈平衡的原理,对于大部分壳(PS:有少
数壳可能会玩一些把戏,譬如说:ExeCrypt
or,它利用了TLS在入口点之前执行代码,
所以此时的栈顶指针可能与OEP处时的栈
顶指针不一致)来说,用OD加载断在入口点
处时的栈顶指针应该和断在OEP处时的栈
顶指针是保持一致的。
就我们当前这个例子来说,入口点处时栈
顶指针ESP指向的地址是12FFC4。大家在
平时脱壳的时候也要多多留意入口点处的
栈顶指针指向了哪里。
成功脱壳后,OEP处的第一条指令应该是PU
SH EBP。
下面我们来执行PUSH EBP这条指令。
我们可以看到EBP的值被压入到堆栈中了:
我们可以看到EBP的值被保存到12FFC0中
了,这是原程序执行的第一条指令。下面
我们来看看UnPackMe H,此时的栈顶指针
指向的地址明显高于12FFC4,也不等于12F
FC0。
我们继续观察堆栈:
正常来说,到达OEP处时,栈顶指针指向12F
FC4才对,这里我们姑且算它执行了PUSH E
BP,那么栈顶指针也应该指向的是12FFC0
才对。
也就是说该UnPackMe模拟执行了PUSH EBP
,并且中间掺杂了大量的垃圾指令。
这里我们对黄色标注出来的区域设置硬件
执行断点或者BP断点。
从这里开始该UnPackMe就没有继续模拟执
行指令了,跟原程序是一样的。我们来看
看断在这里时的堆栈情况:
断在了这里,我们来看下堆栈:
我们可以看到此时12FFC0中已经存放了12
FFF0 (EBP寄存器的初始值),也就说该UnPa
ckMe已经成功模拟执行了PUSH EBP指令,
接着12FFBC中存放了FFFFFFFF,相当于模
拟执行了PUSH -1指令。我们知道PUSH EB
P与PUSH -1这两条指令之间应该有一条MO
V EBP,ESP指令才对。
我们耐心看的话,就会发现4271CD前面的
几条指令都被成功模拟执行了。
我们会发现在剥离了TLS以后,每次断在OE
P处时,唯一会变化的就是EBX寄存器的值,
但是无论怎么变,总是在7FFDB000~7FFDF0
00这个范围之内,反观其他寄存器的值都
是固定不变的。
好,我们重启OD,再次断到ADD EBP,-58指
令处。
004271CD 83C4 A8 ADD ESP,-58
我们将当前未脱壳和之前已脱壳的寄存器
组情况进行对比:
已脱壳:
未脱壳:
我们可以看到在UnPackMe模拟执行指令的
过程中连同堆栈以及除ECX,EDX以外的其
他通用寄存器也都模拟了。也就是当已脱
壳和未脱壳的版本处于同一个位置时,我
们要留意EAX,EBX,ESP,EBP,ESI,EDI这几
个寄存器的情况,ECX,EDX的话,我们并不
关心。
好,现在我们回到该UnPackMe模拟执行指
令的起始地址处。
我们可以看到在4271B5~4271CD之间掺杂
了大量的垃圾指令-起到混淆的作用。实
际上它们是要完成5条指令的功能。
我们按F7单步执行RET指令,到了这里。
首先是利用PUSHFD保存EFLAGS (标志寄存
器)的值。
接下来我们对ExeCryptor壳所在区段设置
内存写入断点,看看其在执行的过程中会
不会保存什么值之类的东西,这里ExeCryp
tor有好几个区段,大家可以逐一尝试。
设置完内存写入断点以后,我们运行起来,
看看会发生什么。
断在了这里。
这里我们可以看到将EAX的值保存到47AD0
C这个内存单元中,但是此时EAX的值并
您可能关注的文档
最近下载
- 人教精通版五年级上册英语Lesson25.pdf VIP
- 内蒙古包头市昆都仑区2024-2025学年七年级上学期期末考试数学试题(原卷版+解析版).docx VIP
- 商业、道德与国家——丹尼尔·笛福的商业理论探究.pdf VIP
- JC∕T 2241-2014 预制混凝土检查井(完整版).doc VIP
- 中药保留灌肠操作流程图.doc
- 《人工智能通识基础》全套教学课件.pptx
- 生化分离分析技术与原理智慧树知到期末考试答案2024年.docx VIP
- 《旅游美学》课程教学大纲.pdf VIP
- 驾校车辆维修维护记录.doc VIP
- T∕CFA 0308054.1-2019 铸造绿色工厂 第1部分 :通用要求.docx VIP
原创力文档


文档评论(0)