初来知乎分享,还请各位大佬多多包涵。系统安全系列作者将深入研究恶意样本分析、逆向分析、攻防实战和Windows漏洞防护等,通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步。
作者前文介绍了三个漏洞,包括Chrome浏览器保存密码渗透解析、通过Chrome浏览器实现Win10蓝屏、音乐软件解密功能复现。这篇文章将介绍基础知识,详细讲解PE文件格式,熟悉各种PE编辑查看工具,针对目标EXE程序新增对话框等,这也为后续PE病毒和恶意代码的攻防打下扎实基础。这些基础性知识不仅和系统安全相关,同样与我们身边的APP、常用软件及系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。
使用工具包括:
从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~
话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,加油!
什么是PE文件?PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。
EXE文件格式:
为什么要重点学习这种文件格式呢?
PE文件格式总体结构接着让我们来欣赏下PE文件格式总体结构图,包括:MZ头部、DOS stub、PE文件头、可选文件头、节表、节等。
本文的第二部分我们将对PE文件格式进行详细解析。比如,MZ头文件是定位PE文件头开始位置,用于PE文件合法性检测。DOS下运行该程序时,会提示用户“This Program cannot be run in DOS mode”。
PE文件格式与恶意软件的关系
PE文件解析常用工具包括:
该部分实验内容:
PE文件结构如下图所示,我推荐大家使用010Editor工具及其模板来进行PE文件分析。MZ头部+DOS stub+PE文件头+可选文件头+节表+节
(1) 使用010Editor工具打开PE文件,并运行模板该PE文件可分为若干结构,如下图所示。
000000B0指向PE文件头开始位置。
(4) PE文件头(0b0h-1a7h)该部分包括PE标识、映像文件头、可选文件头。
010Editor使用模板定位PE文件各节点信息。
PE文件可选文件头224字节,其对应的字段信息如下所示:
(5) 节表(1a8h-21fh)
该结构包括3个节,对应上图的3个struct IMAGE_SECTION_HEADER,即“.test”、“.rdata”、“.data”节,其偏移地址对应下图紫色区域,分别是400、600、800的位置。
(6) 3个节
注意,代码节“.text”前46H为数据,后面全是0位填充值,为了实现文件的200H对齐,所以代码节是400H到5ffH。
010Editor打开如下图所示:
详细标注信息如下图所示:(图引自HYQ同学,再此感谢)
(8) 数据节数据节实际大小58h,对齐后大小200h,地址为800h-9ffh,包括对话框弹出的具体内容。
第一步,打开OD加载PE文件。OD是一款PE文件动态调试器,此时程序断点自动停止在程序入口点00401000H位置。
在010Editor中,我们可以看到,该PE程序基地址是400000h,程序入口地址是1000h,两个相加为加载至内存中的地址,即401000h。
第二步,动态调试程序。当我们双击地址位置,则可以下断点且变红,比如0040100Fh。
接着查看对应调试快捷键,F7是单步步入,F8是单步步过。
我们直接按F8单步步过,此时的位置会CALL一个MessageBoxA函数。
直接单步步过,此时会弹出第一个对话框,点击“确定”按钮。
第三步,动态调试程序之数据跟随。接着我们看左下角部分的内存数据,在该区域按下“Ctrl+G”在数据窗口中跟随,输入基地址400000。
此时可以看到加载到内存中的数据,可以看到该数据与010Editor打开的PE文件数据一致的。
接着继续按F8单步步过弹出第二个窗口。
右上角是它寄存器的值,包括各个寄存器中的数据,我们实验中主要使用的寄存器包括EAX、ECX、EDX、EBX等。
接着步过0040102E,它是退出进程ExitProcess的位置,此时进程已经终止,如下图所示。
实验讲到这里,使用OD动态调试的PE文件的基础流程就讲解完毕,后续随着实验深入,我们还会使用该工具。
使用010Editor修改该程序,使得该程序仅弹出第二个对话框。思路为:修改程序的入口点地址。
第一步,确定程序入口点地址。前面我们用010Editor(或PEView)确定了可选文件头中Adress od Entry Point这一项,里面的值是1000h,这个是RVA相对便宜地址,偏移在D8处大小为4字节。装载到内存后,程序入口点应该是401000h。
第二步,确定第二个对话框的偏移地址。然后看到OD里,为第二个call做传入参数的push语句从401016开始,故我们将1000改为1016即可弹出第二个窗口。
第三步,利用PE编辑工具修改程序入口地址。注意,可以在PE模板中修改该值,将AddressOfEntryPoint修改为1016h。
第四步,双击运行仅弹出第二个对话框。
实验内容如下:
在文件中的引入表结构:IMAGE_IMPORT_DESCRIPTOR
在内存中的引入表结构:IMAGE_IMPORT_DESCRIPTOR
ImageBase: PE文件在内存中的优先装载地址。RVA地址:Relative Virtual Address,相对虚拟地址,它是相对内存中ImageBase的偏移位置。
比如PE文件头(IMAGE_NT_HEADERS)中,AddressOfEntryPoint为1000h,基地址为400000h。
下面是导入表信息:
第一条指令在内存中的地址计算方法如下图所示:
(2) 使用stud_PE查看文件属性该软件用于显示头部、DOs、区段、函数等信息,包括导入表、导出表等。
显示对应的3个节信息。
显示该EXE程序加载的两个DLL文件及函数。
在Ordinal Table找到序号(Value)01DD项,Data为01DC;而由于Ordinal Table中Data从0开始,故在Address Table中找到第01DC+1,即01DD项。
Address Table中01DD项的Data为407EA,也即MessageBoxA的RVA(相对虚拟地址)。
第一步,使用OD打开目标PE文件。如下图所示,包括第一个对话框、第二个对话框和退出进程。
第二步,修改数据区“.data”。
注意,从下图所示的位置开始修改,地址为0040 3059,需要留一个00字符,表示截断符。同样,title和text之间也要用00隔开。
右键选择“二进制”->“编辑”,其快捷键为Ctrl+E。
输入标题“武汉大学信安病毒实验”。
此时标题已经成功写入,接着空一个00,从下图所示位置接着写入正文内容,地址为0040 306A。
接着写入内容,如下图所示。
增加内容如下图所示:
注意,现在我们只是写入内存,而没有写入PE文件中。
第三步,选中新增内容,右键点击“复制到可执行文件”。
此时显示如下图所示,成功复制到PE文件中。
第四步,修改代码段。我们需要在代码段第二个对话框之后插入新的数据,从而弹出第三个对话框。需要将下图阴影部分整体后移。
首先,在0040101B位置进行数据跟随。
数据跟随显示如下图所示,代码段中每个弹框是22字节,从“68 40”开始,共计两个弹框。
接着我们将退出函数的所有字节复制出来,为了整体后移。6A 00 E8 01 00 00 00 CC FF 25 00 20 40 00 FF 25 0C 20 40 00 FF 25 08 20 40
接着空22字节用于填写第三个对话框信息,将复制的二进制数据粘贴出来(Ctrl+E),如下图所示。
将第一个对话框22字节代码复制至第三个对话框,如下图所示:
第五步,修改.text段。第二个栈的参数是它的Title,需要将偏移地址设置为对应的位置。
右键“数据窗口中跟随”->“立即数”。
第三个窗口标题的地址修改为“00403059”。
Ctrl+E修改为59。
修改第三个窗口Text地址为“0040306A”。
修改如下图所示:
第七步,保存文件。选择“复制到可执行文件”->“所有修改”按钮。
点击“全部复制”。
最终保存修改的PE文件。
运行PE文件,成功弹出第三个框。
新增的内容如下图所示:
注意:
后续将学习PE文件图标修改、对话框分析、EXE解析、加壳解密等。希望这系列文章对您有所帮助,同时真的感觉自己技术好菜,要学的知识好多。未知攻焉知防,人生漫漫其路远兮,作为初学者,自己真是爬着前行,感谢很多人的帮助,继续爬着,继续加油!
学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。
解决用UltraISO将PE ISO镜像写入U盘后U盘变成FAT32,并隐藏启动分区
在搭载 HarmonyOS 的分布式终端上,可以保证“正确的人,通过正确的设备,正确地使用数据”。通过“分布式多端协同身份认证”来保证“正确的人”。通过“在分布式终端上构筑可信运行环境”来保证“正确的设备”。通过“分布式数据在跨终端流动的过程中,对数据进行分类分级管理”来保证“正确地使用数据”。正确的人在分布式终端场景下,“正确的人”指通过身份认证的数据访问者和业务操作者。“正确的人”是确保用户数
实现了解析三个头与虚拟地址偏移转文件偏移#include<Windows.h>#include<iostream>#include<stdio.h>#include<stdlib.h>#include<commdlg.h>usingnamespacestd;DWORDdwFileSize;BYTE*g_pFileImageBase=0;P
PE文件格式是微软Windows NT内核系列系统和 Win32子集中可执行的二进制文件格式。这种文件格式是微软基于COFF 文件格式的设计思想设计的。COFF (Common Object File Format,通用目标文件格出于兼容性的考虑。
IMAGE_EXPORT_DIRECTORYIMAGE_IMPORT_DESCRIPTORIMAGE_RESOURCE_DIRECTORY
(特殊时期,在家时间多一些,突然想到多年的公众号,重启试试,嗯就先每一天推荐一个软件吧) 微PE工具箱(WinPE)是一款非常好用的PE系统(独立的预安装环境),非常纯净,是装机维护得力的助手。安装简单,基本能一键操作,无任何广告推广,内核完整精简,启动也快速,集成很多装机维护所必需的第三方工具集,算是目前网上比较公认的最干净的PE工具箱。 &n
环境搭建QEMUqemu是一款可执行硬件虚拟化的虚拟机,与他类似的还有Bochs、PearPC, 但qemu具有高速(配合KVM)、跨平台的特性 qemu主要有两种运行模式:qemu-user 和 qemu-systemqemu-system 可以进行完整的系统仿真,而 qemu-user 只提供用户态仿真。安装 qemu-usersudo apt-get install qemu qemu-us
一丶为什么新增节.以及新增节的步骤 例如前几讲.我们的PE文件在空白区可以添加代码.但是这样是由一个弊端的.因为你的空白区节属性可能是只读的不能执行.如果你修改了属性.那么程序就可能出现问题.所以新增一个节可以实现我们的代码. 等等. 1.新增节的步骤 1.在最后一个节位置添加一个节.如果没有空白位
一丶简介 根据上一讲.我们为PE新增了一个节. 并且属性了各个成员中的相互配合. 例如文件头记录节个数.我们新增节就要修改这个个数. 那么现在我们要合并一个节.以上一讲我们例子讲解. 以前我们讲过PE扩大一个节怎么做. 合并节跟扩大节类似. 只不过一个是扩大. 一个是合并了. 合并节的步骤. 1.修
一丶为什么扩大节 上面我们讲了,空白区添加我们的代码.但是有的时候.我们的空白区不够了怎么办.所以需要进行扩大节. 扩大节其实很简单.修改节数据对齐后的大小即可. 并且在PE文件中添加0数据进行填充即可. 首先看一下我们的节表 二丶扩大节实战以及注意问题 PE扩大节的时候一般是最后一个节.原因是自己
一丶DOS头结构体 DOS头是在16位程序下使用的.所以不用全部关心.只需要关心第一个跟最后一个成员记住即可. DOS头大小是64个字节,十六进制是0x40 总结一下就是说. 4行只有第一行的前两个字节.以及最后一行的4个字节有用. WORD e_magic 这个成员是操作系统检查的MZ头. LON
一、PE文件基本结构上图便是PE文件的基本结构。(注意:DOS MZ Header和部分PE header的大小是不变的;DOS stub部分的大小是可变的。)二、Section 详解一个PE文件至少需要两个Section,一个是存放代码,一个存放数据。NT上的PE文件基本上有9个预定义的Section。分别 是:.text, .bss, .rdata, .data, .rsrc, .edata,
U盘破解XP管理员密码 方法1 其实破解Windows密码也很简单,工欲善其事、必先利其器。破解XP的登录密码,我们需要用到“ERD commander 2003”(简称ERD)这款软件,该软件一般内置于WinPE等系统恢复光盘中。但是光盘的面积太大,不适合携带,而小巧的U盘则是我们的最佳的选择。因此我们可以制作一款XP
一丶节表信息,PE两种状态.以及重要两个成员解析. 确定节表位置: DOS + NT头下面就是节表. 确定节表数量: 节表数量在文件头中存放着.可以准确知道节表有多少个. 节表是一个结构体数组.没一个节表表示了数据在哪,怎么存储. 下方是节的结构体 节表重要成员都标红了.我们知道.PE文件有两种状态
在8月底,C-NCAP(中汽研)发布了第二批碰撞测试结果,此次共有6款车型参加了测试,分别是福特福克斯三厢版,马自达3昂克赛拉,丰田RAV4,捷达VS5,比亚迪宋Pro DM和星途TXL,此次公布的结果中有两个值得特别注意,一是捷达VS5获得了唯一一个四星评价,二是星途TXL同样获得唯一超五星评价,接下来我们就来一一分析。昂克赛拉指导价:11.59-18.99万测试车型:2.0L自动致雅版成绩:8
你是否曾经开发过一个命令行工具,随着功能的增加,代码变得越来越臃肿?或者希望用户能够根据自己的需求扩展工具功能,而不需要修改核心代码?Cobra(命令行接口工具包)的插件系统正是为了解决这些问题而设计的。本文将深入探讨Cobra插件系统的架构设计与实现,帮助你构建一个可扩展的CLI工具。读完本文,你将能够:- 理解Cobra插件系统的核心概念- 掌握Cobra插件的设计原理- 学会如何实...
UV紫外相机的简单介绍和场景应用
我们为自学者编程的或初学java的小伙伴们准备了一整套完整的学习资源和文章,还有我自己在自学路上的一些总结和学习线路,希望能帮到小伙伴们,如果有什么疑问的地方也可以加小编的微信Java_Bczn,小编后期还会整理出更多的学习视频和每天一篇学习文章,赶紧关注我们吧。 下面是我自学java的线路希望能帮到你们:一.基础学习这个阶段你需要找一个好的基础学习视频,对着视频进行学习,每天严格要求自