PE知识复习之PE的导入表 一丶简介 上一讲讲解了导出表. 也就是一个PE文件给别人使用的时候.导出的函数 函数的地址 函数名称 序号 等等. ...一个进程是一组PE文件构成的. PE文件需要依赖那些模块.以及依赖这些模块中的那些函数.这个就是导入表需要做的. 确定PE依赖那个模块. 确定PE依赖的那个函数. 以及确定函数地址....会一一进行讲解.首先从最简单的成员开始. 2.1 Name成员. 确定依赖的模块的名字是什么 我们说过.一个PE文件.依赖模块....PE加载前加载后的区别. 一样是一样的.但是需要分清 PE加载前.还有PE加载后.如果加载前,那么IAT跟INT一样.都可以找到依赖的函数名称....如果是加载后.也就是在内存中的话.那么IAT表保存的就是函数的地址. PE加载后如下图: ? IAT表保存的就是函数地址了. 从导入表中找到IAT表. ?
PE知识复习之PE的导出表 一丶简介 在说明PE导出表之前.我们要理解.一个PE可执行程序.是由一个文件组成的吗....答案: 不是.是由很多PE文件组成.DLL也是PE文件.如果我们PE文件运行.那么就需要依赖DLL.系统DLL就是Kerner32.dll user32.dll等等.这些都是PE文件....什么是导出表: 导出表就是当前的PE文件提供了那些函数.给别人用. 举个例子: PE文件相当于一个饭店.那么菜单就是导出表....在导入表中我们的函数地址表中的地址会有5个.原因就是.序号会给我们用0填充. 1 2 3 4 5 虽然第二项并没有.但是也会给我们导出....如果在内存中.我们直接RVA + 当前PE的ImageBase就可以看到函数导出的名称了.不过我们现在算一下.
<param name=“option”>false</param> –是否可以为空,不写就默认为false
PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思. 如一个地址位 0x401234 ,Imagebase = 0x400000 ....首先我们知道.一个EXE文件.会调用很多DLL(PE) 有多个PE文件组成. exe文件启动的基址 (ImageBase) 是0x40000. 假设我们调用三个DLL A B C....但是我们知道.PE文件中有很多RVA .RVA 是相对于ImageBase的偏移进行存放的. 如果PE文件中都是 RVA 那就好办了. 但是不一定呀....我们知道.一个PE文件需要很多地方进行重定位的.比如这个记录的 大小为16....所以修复的位置是 0x116b0的位置. 0x116b0 + 当前PE文件的ImageBase就是要进行重定位的位置 当前PE的Imagebase为0x400000 重定位地方为 0x4116b0位置
PE知识复习之PE的节表 一丶节表信息,PE两种状态.以及重要两个成员解析. 确定节表位置: DOS + NT头下面就是节表. ...} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; 节表重要成员都标红了.我们知道.PE文件有两种状态.一种是内存状态.一种则是文件状态....而节就是分别保存了内存中节展开的位置偏移. 以及文件展开后.节数据在文件中的那个偏移位置. 1.内存中节开始的位置 我们分别以PE两种状态.来加深一下.在内存中跟文件中节数据起始位置....这也解释了PE在内存中展开跟在文件中是不一样的. 也加深了节表中 VirtualAddress成员 以及 PointerToRawData成员了....节的属性.也就是最后一个成员.表明了这个节是可读的可写的.还是可读可写可执行. 具体可以查看一下宏.
PE知识复习之PE的绑定导入表 一丶简介 根据前几讲,我们已经熟悉了导入表结构.但是如果大家尝试过打印导入表的结构. INT IAT的时候. 会出现问题....PE在加载前 INT IAT表都指向一个名称表. 这样说是没错的. 但是如果你打印过导入表.会发现一个问题. 有的EXE程序.在打印IAT表的时候.发现里面是地址....原因: 我们的PE程序在加载的时候.我们知道. PE中导入表的子表. IAT表.会填写函数地址. 但是这就造成了一个问题.PE程序启动慢.每次启动都要给IAT表填写函数地址. ...这样是可以的. 优点: PE程序启动变快. 缺点: 如果DLL的ImageBase变了.那么就需要进行重定位.因为在文件中你填写的地址是固定的地址....PE的文件名 WORD NumberOfModuleForwarderRefs; //依赖的另外的DLL有几个 // Array of zero or more IMAGE_BOUND_FORWARDER_REF
PE知识复习之PE的RVA与FOA的转换 一丶简介PE的两种状态 首先我们知道PE有两种状态.一种是内存展开.一种是在文件中的状态.那么此时我们有一个需求....三丶转换方法 既然上方了解了PE的内存状态.以及文件状态形式....第一步: 我们知道PE在内存中展开.是在ImageBase位置展开的.头跟文件是一样的.只不过节数据展开位置不一样. ...我们的RVA在这个值里面. 其中节虚拟地址结束位置 就是用节数据对齐后的大小+虚拟地址大小. 具体可以参考上一讲节表解析....RVA怎么计算我们也知道了.我们需要查看PE中扩展头的ImageBase成员的值. 这里我已经查看好了.值为0x400000.
PE知识复习之PE的各种头属性解析 一丶DOS头结构体 typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header...LONG e_lfanew 这个成员指向PE头.也很重要. 如果上面两个成员更改了.那么文件就不能运行了. 二丶NT头解析 NT头也是我们所指的PE头....DOS头的最后一个成员的偏移.就是NT头.(PE) 例如: ? 操作系统会检查PE头.以及MZ头.检查是否是正确的值. 而NT头中有两个子结构体.一个是文件头.一个是扩展头.这两个头比较重要....PE文件是x86的还是x64的.有一系列宏标识....PE文件的导入表.导出表等等一些列表格在哪里存放.
PE知识复习之PE的两种状态 一丶熟悉PE的整体结构 ?...从下面依次网上看.可以得出PE结构 其中DOS头有DOS头结构 也就是 IMAGE_DOS_HEADER 关于结构体的各项属性.前边已经写过了.本系列博客就是加深PE印象.理解复杂的原理....MZ头就是标出来的 4D 5A 大小是两个字节. 操作系统会以检查这个标识.判断是否是PE文件. PE偏移 0x00000138 大小是4个字节.指向PE头....NT头中的PE标识.操作系统不光检查MZ 也检查PE. 三丶DOS stub Dos stub 大小是不确定的,他的大小是 PE头减掉 DOS头大小.其中成员都是Dos stub. ?...填写AAAA的地方是对其后没有使用的.所以我们如果熟悉PE可以添加任何成员进去. 八丶PE中的两种状态 根据上面简单了介绍了一下PE的存储结构.也知道了节数据跟节数据之间.都是根据文件对齐存放的.
,具体标识请查看MSDN,一般我们用这样几个就足够了 一般只需要更改标题,内存缓冲区指针和它的大小,其余按照上面的代码默认就好 用户选择后,将用户选择的文件的全路径显示出来,并调用CPefileInfo...在程序中有一个判断该文件是否是PE文件的操作。...在PE的DOS头结构中的e_magic结构保存的是’MZ’这个标志对应的16进制数是0x4d5a,另外在pe头中有一个Sinature成员保存了0x50450000这个值,它对应的字符是‘PE’只有满足这两个条件的文件才是一个正常的...获取DOS头和PE头 在之前我们说过,PE文件开始的位置是一个DOS头结构——IMAGE_DOS_HEADER STRUCT,它的第一个成员作为DOS头的标识,一般保存的都是‘MZ’,而它里面的e_lfanew...则保存真正的PE头所在的偏移 所在获取DOS头的时候简单的将前面的几个字节转化为这个结构即可,在寻址PE头的时候用e_lfanew成员加上文件的起始地址就可以得到PE头的地址。
在我们准备安装一些软件之前,我们希望查看当前安装 CentOS 的服务器版本。 如果查看我们安装的 CentOS 服务器版本?...---- 如果你使用的是 CentOS ,你可以使用命令: lsb_release -d 进行查看: 可选的,你也可以使用 lsb_release -d 命令进行查看: https://www.cwiki.us
通过运用LyScript插件并配合pefile模块,即可实现对特定PE文件的扫描功能,例如载入PE程序到内存,验证PE启用的保护方式,计算PE节区内存特征,文件FOA与内存VA转换等功能的实现,首先简单介绍一下...pefile模块是一个用于解析Windows可执行文件(PE文件)的Python模块,它可以从PE文件中提取出文件头、节表、导入表、导出表、资源表等信息,也可以修改PE文件的一些属性。...;图片总体上,这段代码的作用是利用调试器将调试程序的首地址处的4096字节读入内存,然后使用pefile模块将其解析为PE文件,最后输出PE文件的可选头信息。...RVA通常是用于描述PE文件中的各个段的相对位置,它不像VA一样是用于真正运行程序的,而是在加载 PE 文件时进行重定位所使用的。...,至于PE结构的解析问题,详细度过PE结构篇的你不需要我做太多的解释了。
这是一个典型的以邮件作为传播媒介,以非PE文件作为攻击载荷的攻击过程。本文将以该案例为切入点,针对现有的非PE攻击手法进行分析与总结,内容包括脚本类型以及文档类型攻击,下面开始今天的正文。...2.对抗&绕过 2.1 猜猜我是谁 对于杀软厂商来讲,PE文件类型的识别较为容易,因为它们有固定的格式以及标记,但对于非PE样本来讲,识别文件类型是一个比较困难的问题,通常有两种可选方案,各有优缺点,方案...PE文件,而目前对于第2级PE的执行方式,也渐渐从之前的直接允许转换到延迟执行,如下:通过设置计划任务方式在开机时执行。...CVE-2017-0199 EXP程序中带恶意URL 2.关于pdf文档攻击 PDF(便携式文件格式,Portable Document Format)是由Adobe Systems在1993年用於文件交换所发展出的文件格式...三、总结 与PE相比,非PE拥有更多的攻击方式及技巧。对于杀毒软件厂商而言,检测与分析也极具挑战,可以想象彼此的攻防转换也不会有停止的那一刻,作为防守方,我们要做的还有很多。
大家好,又见面了,我是你们的朋友全栈君。 首先,写在前面的话,从网上下载的winpe 用着总是觉得不安心(。。。),在然后自己做的pe可以封装进去自己常用的工具。...我这用的是一个64位的程序。 (下载地址http://download.csdn.net/detail/aei2uem/4721439) 下面开始制作ISO包。...\pe 复制修改后的boot.wim文件到d:\winpe\pe\sources(X为windows7光盘符) 3....用UltraISO提取windows7光盘引导文件,保存为windows7.bif 4....用UltraISO将d:\winpe\pe下的目录和文件添加到光盘镜像,加载windows7.bif,保存镜像为PE 3.0.iso 至此PE3.0.ISO就是做的winpe了。
有些漏洞利用代码需要在某个保护模式被关闭的情况下才可以利用成功,在此之前需要得到程序开启了何种保护方式。...验证其实有很多方法,其原理是读入PE文件头部结构,找到OPTIONAL_HEADER.DllCharacteristics结构,通过与不同的操作数与运算得到,LyScript插件完全可以实现这个验证功能...,实现起来也是很简单的。...插件地址:https://github.com/lyshark/LyScript 验证PE保护方式: 验证自身保护方式无需要遍历加载过的模块,读入DllCharacteristics并依次与操作数与运算得到主程序的保护方式...: 得到了程序开启的保护方式以后,就可以对症下药,提前判断出漏洞攻击后是否可以反弹了。
在可执行文件PE文件结构中,通常我们需要用到地址转换相关知识,PE文件针对地址的规范有三种,其中就包括了VA,RVA,FOA三种,这三种该地址之间的灵活转换也是非常有用的,本节将介绍这些地址范围如何通过编程的方式实现转换...= IMAGE_NT_SIGNATURE) { return NULL; } return pNtHeaders; } // 读取PE结构的封装 HANDLE OpenPeFile...} } return -1; } int main(int argc, char * argv[]) { HANDLE lpMapAddress = NULL; // 打开PE...= IMAGE_NT_SIGNATURE) { return NULL; } return pNtHeaders; } // 读取PE结构的封装 HANDLE OpenPeFile...= IMAGE_NT_SIGNATURE) { return NULL; } return pNtHeaders; } // 读取PE结构的封装 HANDLE OpenPeFile
大家好,又见面了,我是你们的朋友全栈君。...电脑出现系统故障是一个很正常的现象,在这个时候只能通过重组系统的方法来解决故障,如果我们此前有将正常的系统备份到U盘里面那么重装系统就会变得很简单,接下来就教给大家怎样用GHOST备份系统。...1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USD HDD模式选择好,然后按F10键保存,电脑就会马上重启。...通过上面的方法借助一键GHOST工具将系统备份好了,如果下次再次碰到需要重装系统的情况则可以直接使用这个备份好的系统进行重装操作,当然如果碰到更好的系统,也可以重复操作一遍上面的步骤来备份更好的系统。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
有些漏洞利用代码需要在某个保护模式被关闭的情况下才可以利用成功,在此之前需要得到程序开启了何种保护方式。...验证其实有很多方法,其原理是读入PE文件头部结构,找到OPTIONAL_HEADER.DllCharacteristics结构,通过与不同的操作数与运算得到,LyScript插件完全可以实现这个验证功能...,实现起来也是很简单的。...插件地址:https://github.com/lyshark/LyScript验证PE保护方式: 验证自身保护方式无需要遍历加载过的模块,读入DllCharacteristics并依次与操作数与运算得到主程序的保护方式...:图片得到了程序开启的保护方式以后,就可以对症下药,提前判断出漏洞攻击后是否可以反弹了。
在可执行文件PE文件结构中,通常我们需要用到地址转换相关知识,PE文件针对地址的规范有三种,其中就包括了VA,RVA,FOA三种,这三种该地址之间的灵活转换也是非常有用的,本节将介绍这些地址范围如何通过编程的方式实现转换...= IMAGE_NT_SIGNATURE) { return NULL; } return pNtHeaders;}// 读取PE结构的封装HANDLE OpenPeFile(LPTSTR...return FOA; } } return -1;}int main(int argc, char * argv[]){ HANDLE lpMapAddress = NULL; // 打开PE...= IMAGE_NT_SIGNATURE) { return NULL; } return pNtHeaders;}// 读取PE结构的封装HANDLE OpenPeFile(LPTSTR...= IMAGE_NT_SIGNATURE) { return NULL; } return pNtHeaders;}// 读取PE结构的封装HANDLE OpenPeFile(LPTSTR
首先感谢cyxvc老哥,他的代码可读性超高,精简有用以理解,我找这方面的资料好久了,这篇文章对我帮助很大。...= IMAGE_DOS_SIGNATURE) { //不是PE printf("不是PE文件\n"); system("pause"); return 0; } PIMAGE_NT_HEADERS...= IMAGE_NT_SIGNATURE) { //不是PE文件 printf("不是PE文件\n"); system("pause"); return 0; } //获取基本...PE头信息 //获取信息所用到的两个结构体指针 (这两个结构体都属于NT头) PIMAGE_FILE_HEADER pFileHeader = &(pNtHeader->FileHeader);...break; case 14:printf("COM:\t\t"); break; case 15:printf("保留:\t\t"); break; } } 效果图: 另外附上我的代码
领取专属 10元无门槛券
手把手带您无忧上云