加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

进修“免杀技能”前应该把握的“基本常识”

发布时间:2019-03-26 16:22:41 所属栏目:建站 来源:信息安全我来讲你来听
导读:一、 什么是PE文件? 在Windows下所谓PE文件即Portable Executable,意为可移植的可执行的文件。常见的.EXE、.DLL、.OCX、.SYS、.COM都是PE文件。PE文件有一个配合特点:前两个字节为4D 5A(MZ)。假如一个文件前两个字节不是4D 5A则其必定不是可执行文件。比
副问题[/!--empirenews.page--]

一、 什么是PE文件?

在Windows下所谓PE文件即Portable Executable,意为可移植的可执行的文件。常见的.EXE、.DLL、.OCX、.SYS、.COM都是PE文件。PE文件有一个配合特点:前两个字节为4D 5A(MZ)。假如一个文件前两个字节不是4D 5A则其必定不是可执行文件。好比用16进制文本编辑器打开一个".xls"文件其前两个字节为:0XD0 0XCF;打开一个".pdf"其前两个字节为:0X25 0X50。

PE文件布局:DOS头+PE头+节表+.data/.rdata/.text。目前天我们就来详细相识一下PE文件的DOS头和PE头的布局成员与部门成员的浸染。留意:一个exe文件自己是一个PE文件,可是因为包括dll库,以是一个exe文件也是很多PE文件构成的(包括多个dll)一个PE文件

1. DOS头:共40H(64字节)

DOS头中声明用的寄存器(我们可以看到e_ss、e_sp、e_ip、e_cs照旧16位的寄存器),以是在32位/64为体系顶用到的只有两个成员了(第一个和最后一个):

  • e_magic:判定一个文件是不是PE文件;
  • e_lfanew:相对付文件首的偏移量,用于找到PE头;

进修“免杀技能”前应该把握的“基本常识”

2. PE头

PE头分为尺度PE头和可选PE头,其同为NT布局的成员:

  1. //NT头  
  2. //pNTHeader = dosHeader + dosHeader->e_lfanew;  
  3. struct _IMAGE_NT_HEADERS{  
  4. 0x00 DWORD Signature; //PE文件标识:ASCII的"PE"  
  5. 0x04 _IMAGE_FILE_HEADER FileHeader;  
  6. 0x18 _IMAGE_OPTIONAL_HEADER OptionalHeader;  
  7. }; 

按照DOS头的e_lfanew成员我们就可以找到NT头,NT头的第一个成员是"PE"(0X50 0X45 0X00 0X00四字节的署名,可以在上图00000100H地点处调查),后两个成员则别离是尺度PE头(_IMAGE_FILE_HEADER)和可选PE头(_IMAGE_OPTIONAL_HEADER)。

3. 几个重点的数据成员

(1) 文件对齐(FileAlignment)和内存对齐(SectionAlignment):

一个PE文件加载进内存中也许大于在硬盘上的巨细,而且无论是在内存中照旧硬盘上,都是是分块打点(分节),一块和一块存储空间之间是旷地。在硬盘上旷地有也许小于内存中旷地;在内存中旷地较大(相较于硬盘)。而存在间隙的缘故起因则是分块打点。

分块的一个缘故起因是节减硬盘:好比notepad.exe,,因为是早期的措施,其时硬盘容量较量小,编译器在天生可执行文件时,不只要思量服从题目使得内存对齐/文件对齐,还必要计划成节减硬盘空间的布局。以是这种布局遵循的对齐原则:内存对齐(1000H)和硬盘对齐(200H),对齐的增补数据(0X0000)即是间隙。硬盘的对齐值较小,增补间隙天然小,因此统一个可执行措施在内存中也许比在硬盘上大。可是现现在的硬盘空间更大,以是编译器天生的可执行措施在硬盘上与内存中对齐方法都是1000H。同一对齐为1000H的目标仍旧是进步服从。

而分块的另一个目标是节减内存空间,好比同时在电脑上运行登录多个QQ账号,就必要运行多次QQ可执行措施。而代码段为只读数据必要一份即可,数据段则必要为每个账号均开发一份,,多个QQ措施共享代码块,单独行使数据块,这样就节减了多份代码块的内存。(这些块是行使布局体来维护的,分块即建设布局体)。

(2) 镜像地点/基址ImageBase的浸染:

FileBuffer是磁盘上.exe文件在内存中的一份拷贝,可是FileBuffer无法直接在内存中运行,必需颠末PE loader(装载器)装载往后成为ImageBuffer。ImageBuffer是FileBuffer的"拉伸"。即".exe–>FileBuffer–>ImageBuffer"

  • .exe首地点(基址)为0
  • FileBuffer首地点也为0
  • ImageBuffer首地点为ImageBase
  • 而真正的措施进口地点是:ImageBase + AddressOfEntryPoint(OEP)

一个exe文件默认镜像地点为400000H(有也许不是,总之有一个默认值),假如一个exe文件顶用到了多个dll,而dll文件作为一个PE文件,其默认镜像地点也均是400000H,操纵体系不会修改exe的镜像基址。由于.exe先被加载,在.exe中才加载的dll库,因为400000已经被.exe占用,以是装载器会修改dll的镜像基址。而回收ImageBase + OEP的目标也就是:回收偏移地点的方法可以更利便地修改基址,使得任何一个dll文件基址修改后措施仍旧不会堕落。好比:dll和exe基址有斗嘴,本只必要将斗嘴的.dll的文件基址修改为600000H(假设是编译器为其分派的是600000H);假如不回收"基址+偏移地点"的方法,而回收绝对地点,那么要修改的就不是一个基址为600000H了,而是dll中全部的地点同一加上200000H(由于原本默以为400000H)。

二、 汇编基本常识

1. 寄存器

顾名思义,寄存器就是暂且存储数据的处所,寄存器被计划在CPU内部,对付一个汇编措施员来说,CPU中最首要的部门就是寄存器了。寄存器是措施员能通过指令读写的部件,措施员通过改变寄存器的值间接的节制CPU

  • eax:拓展累加寄存器;
  • ecx:轮回计数器;
  • edx:数据寄存器;
  • ebx:基址寄存器;

2. 仓库

仓库是持续的内存单位,存取方法遵循"先辈后出"原则,栈是一种非凡的存储方法,非凡在最先辈入这个空间的数据却是最后出去的。可是堆和栈不是统一个观念,栈一样平常由编译器自动分派开释,存储函数的参数值、局部变量值等;而堆,一样平常由措施员分派开释,措施竣事时也许由OS(体系)接纳。

  • esp:栈顶;
  • ebp:栈底;
  • esi:拓展目地指针;
  • edi:拓展目地指针;
  • eip:指令指针。

3. 汇编指令

汇编指令有5类:

  • 数据传输指令:mov
  • 逻辑计较指令:add
  • 串操纵指令:movs
  • 节制转移指令:jmp
  • 处理赏罚器节制指令:nop

个中1,2,4类指令对免杀有效。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读