- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
壳的工作原理及手动脱壳的方法.doc
壳的工作原理及手动脱壳的方法
相关名词 1)Entry Point (入口点) PE格式的可执行文件的执行时的入口点,即是PE格式中的Entry Point。 用PEditor或者LordPE之类的PE查看工具看看NotePad.exe,你就会看到Entry Point的值。 也就是说NotePad.exe在执行时的第一行代码的地址应该就是这个值。(
相关名词
1)Entry Point (入口点)
PE格式的可执行文件的执行时的入口点,即是PE格式中的Entry Point。
用PEditor或者LordPE之类的PE查看工具看看NotePad.exe,你就会看到Entry Point的值。
也就是说NotePad.exe在执行时的第一行代码的地址应该就是这个值。(当然应该加上基地址)
2)Section (节区)
PE格式文件是按节区进行规划组织的,不同的节区一般保存的数据的作用也不相同。通常使用缺省方式编译的程序文件,有CODE/DATA/TLS/.text/.data/.tls/.rsrc/.rdata/.edata/.reloc等不同的名称,有的用于保存程序代码,如CODE和.text节区,有的用于保存程序中的变量的,如DATA/.data节区,有的保存重定位信息,如.reloc,有的用于保存资源数据,如.rsrc。等等等等,当然这是缺省情况下编译器产生的结构。
而节区名称和节区中的数据其实没有必然的联系,节区中保存的数据也没有什么硬性的限制。所以你可以在编译时用开关参数改变这些情况。
3)ImageBase (基地址)
不仅程序文件按节区规划,而且程序文件在运行时Windows系统也是按节区加载的。那么每一块的节区的顺序如何?起始的地址是什么呢?
这就由基地址决定。在程序的文件头部保存了每个节区的描述信息,比如有前面提到的节区名称,还有节区的大小,以及节区的相对虚拟地址(RVA)。
如果我们把节区的相对虚拟地址(RVA)加上基地址(ImageBase)就可以知道节区在内存中的虚拟地址(VA)了。Windows系统就是按照这个要求来加载各个节区的。这样Windows系统依次把各个节区放到了它相应的虚拟地址空间。
所以如果我们把相对虚拟地址(RVA)看成是坐标的偏移量的话,那么ImageBase就是原点了。有了这个原点,一切都简单了。
好了有了简要的介绍,我们来看看壳的加载过程吧。注意这里说的是一般情况,不特指某个壳,如果那样的话,我想那大概是洋洋洒洒几万字的了,好象我没有写过这么长的。虽然我的五笔练得还不错。
1)获取壳自己所需要使用的API地址
如果你用PE查看工具看看加壳后的程序文件,会发现未加壳的程序文件和加壳后的程序文件的Import Table不太一样,加壳后的Import Table一般所引入的DLL和API很少,甚至只有Kernel32.dll以及GetProcAddress这个API。
我想你不会认为壳只用这个API就可以做所有的事吧。壳还需要很多其他的API来完成它的工作。当然他并不想让你知道他想用哪个API,所以一般他只是在壳的代码中动态加载这些API,而只把一些你嗅不过什么味道的几个API放在Import Table中。当然这其中壳可能会用到一些Anti技术,不过这和本文主旨无关,所以就不说了。
2)解密原程序的各个节区(Section)的数据
壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个节区。既然是加密保存,那么在程序执行时你总不能也保持加密状态吧,所以解密是壳必做的工作之一。一般壳按节区加密的,那么在解密时也按节区解密,并且把解密的节区数据按照节区的定义放在合适的内存位置。
如果加壳时用到了压缩技术,那么在解密之前还有一道工序,当然是解压缩。这也是一些壳的特色之一,比如说原来的程序文件未加壳时1-2M大小,加壳后反而只有几百K,这种瘦身技术当然会吸引了不少眼球。
3)重定位
前面我们提到了ImageBase,即程序的基地址,当然这只是程序文件中声明的,程序运行时能够保证系统一定满足你的要求吗?
对于EXE的程序文件来说,Windows系统会尽量满足你的要求。
比如一般EXE文件的基地址为0x400000,而运行时Windows系统提供给程序的基地址也同样是0x400000。在这种情况下就不需要进行地址重定位了。
由于不需要对EXE文件进行重定位,所以很多壳在加壳时把原程序文件中用于保存重定位信息的节区干脆也去掉了,这样使得加壳后的文件更加小巧。有些工具提供Wipe Reloc的功能,其实就是这个作用。
不过对于DLL的动态链接库文件来说,Windows系统没有办法保证每一次DLL运行时提供相同的基地址。这样重定位就很重要了。
此时壳中也需要提供进行重定位的代码,
您可能关注的文档
- 基于单片机的电流电压测量.doc
- 基于单片机的电饭锅温度监测及控制系统.doc
- 基于单片机的视力保护器电路设计开题报告.doc
- 基于单片机高精度超声波测距系统的设计与实现免费.doc
- 基于单片的温度控制.doc
- 基于单片的简易PLC设计.doc
- 基于双层PDF技术的数字档案馆全文检索实践.doc
- 基于句类模型的人机对话系统研究.doc
- 基于噪声分析的机械故障诊断方法研究.doc
- 基于图形化衬底的氮化镓薄膜生长方法月日.doc
- 2025AACR十大热门靶点推荐和解读报告52页.docx
- 财务部管理报表.xlsx
- 高中物理新人教版选修3-1课件第二章恒定电流第7节闭合电路欧姆定律.ppt
- 第三单元知识梳理(课件)-三年级语文下册单元复习(部编版).pptx
- 俄罗斯知识点训练课件-七年级地理下学期人教版(2024).pptx
- 课外古诗词诵读龟虽寿-八年级语文上学期课内课件(统编版).pptx
- 高三语文二轮复习课件第七部分实用类文本阅读7.2.1.ppt
- 高考物理人教版一轮复习课件第4章第3讲圆周运动.ppt
- 高考英语一轮复习课件53Lifeinthefuture.ppt
- 2025-2030衣柜行业风险投资发展分析及投资融资策略研究报告.docx
最近下载
- 票据管理系统单位端操作手册.pdf VIP
- 2022年湖北医药学院药护学院教师招聘笔试试题及答案解析.docx VIP
- 无人机公司培训宣讲.pptx VIP
- 宝鸡市检察机关招聘聘用制书记员笔试真题2024.docx VIP
- 2024年湖北医药学院药护学院教师招聘考试笔试题库及答案解析.docx VIP
- 2024年社区工作者考试必背1000题题库及参考答案(考试直接用).docx VIP
- 矿山矿产资源储量年度报告编制要求.pdf VIP
- 急性心肌梗死医学检查.ppt VIP
- 2022年湖北医药学院药护学院辅导员招聘考试笔试试题及答案解析.docx VIP
- 2025年湖北医药学院药护学院辅导员招聘考试笔试备考题库及答案解析.docx VIP
文档评论(0)