ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

逆向工程核心原理——第十八章

2020-09-12 15:00:36  阅读:287  来源: 互联网

标签:逆向 SizeOfOptionalHeader 加壳 第十八章 IMAGE HEADER 文件 原理 upack


分析upack壳

我们使用add.exe文件

我们将add.exe文件拖入upack加壳工具,这里的版本是0.39final,LC选择6:

点击确定后得到add.exe.bak的文件,我们去掉.bak后就可以直接使用了,这里为了区分,我将加壳后的文件取名为add_upack_6.exe。

首先我们先使用hex浏览器查看加壳和没加壳的区别吧:

加壳的:

不加壳的:

我们可以看到,加壳和不加壳的区别还是很明显的。

重叠文件夹也是其他压缩器经常使用的方法,该方法可以把MZ文件头,PE文件头巧妙重叠在一起。

接下来我们使用Stud_PE看一下MZ文件头。

MZ文件头有两个重要的成员:

根据PE文件格式规范,IMAGE_NT_HEADERS的起始位置是可变动的。而NT头的起始位置是由e_lfanew决定的,在一般的文件中e_lfanew拥有不同的。

​ 而在upack中e_lfanew的值为40,而40正好就可以把MZ文件头和PE文件头重叠在一起。

IMAGE_FILE_HEADER-SizeOfOptionalHeader

​ upack的作者就是修改了IMAGE_FILE_HEADER-SizeOfOptionalHeader的值,使得头文件的大小增加了,因此就可以在头文件中加入解码代码了。

​ 我们知道SizeOfOptionalHeader是确定节区头(IMAGE_SECTION_HEADER)的起始偏移。IMAGE_SECTION_HEADER的起始位置=SizeOfOptionalHeader+IMAGE_OPTIONAL_HEADER的起始偏移地址。

​ 而没有加壳的文件,(32位)SizeOfOptionalHeader为E0,64位为F0。而upack则将这个值加大到了148,因此IMAGE_SECTION_HEADER的偏移位置就变为了170(IMAGE_OPTIONAL_HEADER的起始偏移(28)+SizeOfOptionalHeader(148)=170)。这样,在IMAGE_OPTIONAL_HEADER和IMAGE_SECTION_HEADER之间就产生了一个原来没有的空间,upack的作者就是将upack的解压代码放在这个空间中的。

IMAGE_SECTION_HEADER-NumberOfRvaAndSizes

NumberOfRvaAndSizes的值用来指出IMAGE_DATA_DIRECTORY结构体数组的元素个数。正常的文件中IMAGE_DATA_DIRECTORY数组元素的个数是0x10,但是在upack中将其改为了A个。

本来有16个元素,但现在被改为了10个,所以IMAGE_DATA_DIRECTORY结构体后6个元素被忽略了,因此这6个元素的位置,也可以用来放置解压代码。

标签:逆向,SizeOfOptionalHeader,加壳,第十八章,IMAGE,HEADER,文件,原理,upack
来源: https://www.cnblogs.com/lex-shoukaku/p/13657058.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有