-
2021-02-09 18:39:00
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~
作者前文介绍了什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深入分析数字签名的格式及PE病毒内容。这篇文章将详细解析数字签名,采用Signtool工具对EXE文件进行签名,接着利用Asn1View、PEVie、010Editor等工具进行数据提取和分析,这是全网非常新的一篇文章,希望对您有所帮助。 这些基础性知识不仅和系统安全相关,同样与我们身边常用的软件、文档、操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了参考文献中的文章,并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。
更多相关内容 -
PEview工具
2019-02-28 16:46:35用来查看恶意代码文件中的基本信息,无需安装,解压即用 -
PEview(Windows).zip
2019-08-13 17:29:11中文版的-------------查看dll和lib等库文件,peview.exe工具是一款可以进行PE文件解析的强大PE文件解析工具,如果想进行pe文件解析不如下载这款最为方便并强大的peview.exe文件 -
PE工具,包括PEDITOR、PEview和Stud_PE
2019-05-15 15:31:45这个压缩包里面主要有PEDITOR、PEview和Stud_PE这三个可以用来查看或编辑PE文件的工具 -
PEview工具压缩包
2018-08-08 14:30:18peview实用工具,解压之后直接使用,用于对PE文件的解析 -
PEview-0.9.9最新版本
2017-11-14 16:54:43很好用的工具,最新版本0.9.9,无毒,解压后直接用,谢谢。 -
PEview。rar
2018-05-24 15:25:46PEview压缩包,可使用,解压后可使用,主要是加壳和脱壳 -
PEview.zip
2017-03-10 19:54:56用这个工具能容易看得到PE文件的详细结构 绝对货真价实,假一赔十 -
peview.exe
2015-12-27 14:07:22一款可以用来查看pe的工具,可以在windows 下查看pe -
PEview.exe
2013-05-21 20:51:10PEview查看32位可移植可执行(PE)和组件对象文件格式(COFF)文件的结构和内容,提供了一种快速简便的方法。这家PE / COFF文件查看器显示标题,章节,目录,导入表,导出表,内部信息和资源的EXE,DLL,OBJ,LIB,... -
PE文件逆向工具(010Editor、PEview、ASN1DumpUtility、SignTool)等
2020-03-10 21:03:01PEview ASN1DumpUtility SignTool 详细内容请阅读对应博客: https://blog.csdn.net/Eastmount/article/details/104769616 [网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)... -
软件安全实验(一)PEVIEW-弹窗操作
2021-09-15 09:11:45实验名称:软件安全-PEVIEW-弹窗操作 实验软件:WinHex , OllyDBG , LordPE , PEview 实验效果:双击PEview后产生弹窗 实验思路: 实验步骤: 1.打开LordPE 2.点击PE Editor 3.选择PEview打开,观察...软件安全实验(一)
实验名称:软件安全-PEVIEW-弹窗操作
实验软件:WinHex , OllyDBG , LordPE , PEview
实验效果:双击PEview后产生弹窗
实验思路:
实验步骤:
1.打开LordPE
2.点击PE Editor
3.选择PEview打开,观察EntryPoint(入口点)和ImageBase(基地址)
得出原始入口点为401000
4.点击sections
5.记录数据
code代码的房间:1000~80C0
data数据房间:A000
空白位置:90C0-A000
6.转换数据
点击FLC
选择RVA进行输入:
得到空白位置起始地址为000084C0
7.打开winhex
选择十六进制(若发现不是,点击左侧数据即可)
找到000084C0
在空白区域范围内选择任意位置输入tilt和text,进行保存
8.选择代码位置,此处我选择的是00008500
9. 打开LordPE进行数据转换
点击FLC,选择offset(文件位置),输入tilt、text和代码位置进行转换,记录VA(内存位置)处数据,关闭LordPE
10.打开OllyDBG,
点击文件à打开à选择PEviewàCtrl+G输入代码内存位置à右击汇编
代码:
输入后:
查看注释中的tilt和text是否和自己输入的一致
11.鼠标移至第一行代码按住左键不松,一直拉到代码最后一行,右击,选择“复制到可执行文件”à点击选择à选中PEview
12.关闭OllyDBG,打开LordPE,选择PEview打开à修改EntryPoint(原始为00001000)
选择自己代码开始的文件位置的后四位(如:我的代码文件位置是00049100,即入口点后四位改为9100)à点击save进行保存à点击OKà关闭软件
13.双击PEview,出现弹窗
-
分析工具(StudPE,PEview,apateDNS等)
2020-08-09 23:11:08一些自己收集的分析工具,有StudPE,ResourceHacker,PEview,depends,Wireshark,apateDNS,Regshot等。 -
【逆向】【PE入门】使用PEView分析PE文件
2019-10-08 13:04:14什么是PEView? 分析PE文件 什么是DOS头? IMAGE_DOS_HEADER是干嘛的? DOS块是干嘛的? 什么是NT头? Signatrue? IMAGE_FILE_HEADER? IMAGE_OPTIONAL_HEADER? section头? 1.找到 NT 头的起始偏移地址...目录
什么是PE?
参考博客:https://blog.csdn.net/hou09tian/article/details/100397525
PE文件是Portable Executable(可移植的可执行文件)的简写。EXE、DLL、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件。
PE的结构:
什么是PEView?
PEview.exe工具是一款可以进行PE文件解析的强大PE文件解析工具。通过PEview软件,我们一起来分析PE文件的详细格式。
分析PE文件
参考博客:https://blog.csdn.net/hou09tian/article/details/100404142,(都是一个博主写的,很简练,跟着学习)。
在VS2015中,新建一个控制台程序,不输入任何代码,编译生成exe文件,该exe文件就是一个PE文件。
我没有安装VS2015,用codeblocks去试一下, 额,不知道对不对,新建了个helloworld初始的exe:
用PEView打开看:
左侧的树形控件显示了PE文件的格式,而右侧则显示的是PE文件的头部和数据的具体内容。
什么是DOS头?
PE文件头部中的DOS头分为MZ文件头和DOS块,分别对应的是IMAGE_DOS_HEADER和MS-DOS Stub Program。
IMAGE_DOS_HEADER是干嘛的?
IMAGE_DOS_HEADER STRUCT { +0h WORD e_magic // Magic DOS signature MZ(4Dh 5Ah) DOS可执行文件标记 +2h WORD e_cblp // Bytes on last page of file +4h WORD e_cp // Pages in file +6h WORD e_crlc // Relocations +8h WORD e_cparhdr // Size of header in paragraphs +0ah WORD e_minalloc // Minimun extra paragraphs needs +0ch WORD e_maxalloc // Maximun extra paragraphs needs +0eh WORD e_ss // intial(relative)SS value DOS代码的初始化堆栈SS +10h WORD e_sp // intial SP value DOS代码的初始化堆栈指针SP +12h WORD e_csum // Checksum +14h WORD e_ip // intial IP value DOS代码的初始化指令入口[指针IP] +16h WORD e_cs // intial(relative)CS value DOS代码的初始堆栈入口 +18h WORD e_lfarlc // File Address of relocation table +1ah WORD e_ovno // Overlay number +1ch WORD e_res[4] // Reserved words +24h WORD e_oemid // OEM identifier(for e_oeminfo) +26h WORD e_oeminfo // OEM information;e_oemid specific +29h WORD e_res2[10] // Reserved words +3ch DWORD e_lfanew // Offset to start of PE header 指向PE文件头 } IMAGE_DOS_HEADER ENDS e_magic:一个WORD类型,值是一个常数0x4D5A,用文本编辑器查看该值位‘MZ’,可执行文件必须都是'MZ'开头。 e_lfanew:为32位可执行文件扩展的域,用来表示DOS头之后的NT头相对文件起始地址的偏移。
有用的只有两个数据,一个是 e_magic 固定为 “MZ”,另外一个是最后的 e_lfanew ,指向pe头
整个开头占64byte(字节)
- 前两个字节0x4D和0x5A,是字母“M”和“Z”的ASCII码,是MS-DOS设计者Mark Zbikowski的姓名缩写。
- 最后四个字节,表示下一个头部,即NT头的偏移地址,,该值是0x00000080,即NT头的起始地址是0x00000080。
- (左边高地址高字节右边低地址低字节小端显示,关于地址大小端之类的问题我在栈溢出那个博客里有写。)
- 这两个标志之间的是PE文件在MS-DOS环境下运行时所需要的一些参数,点击左侧树形控件的“IMAGE_DOS_HEADER”,在右侧既可以看到这些参数的具体值。
DOS块是干嘛的?
- MS-DOS stub Program中包含了一个字符串,
- 当PE文件在DOS环境下运行时,就会显示该字符串,来提示用户PE程序必须在Windows下才能运行。
“MS-DOS stub Program”即为DOS块。
DOS块是一个在DOS环境下可以运行的程序,在图所示的界面中点击左侧的“MS-DOS stub Program”,则会在右侧显示该程序的数据
PE文件在DOS环境下运行时,会显示该字符串“This program cannot be run in DOS mode”。
什么是NT头?先来看文件头的结构:
typedef struct IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; }IMAGE_NT_HEADERS,*PIMAGE_NT_HEADERS;
如图:
点击PEview左侧树形控件中的“IMAGE_NT_HEADERS”左侧的“+”,展开NT头结构,看到NT头包括Signatrue、IMAGE_FILE_HEADER和IMAGE_OPTIONAL_HEADER三部分。
Signatrue?
- Signatrue也叫做PE文件的文件签名,标志该文件的类型为PE。
- Signatrue共4个字节,其值为0x00004550,即为字符串“PE”。
- 这个值也是不会变化的。
IMAGE_FILE_HEADER?
IMAGE_FILE_HEADER部分共20字节。
从上往下看,
①头两个字节表示机器类型,用于标识CPU的类型,后两个字节表示CPU为Intel 386或后继处理器及其兼容处理器;
②接下来的Number of Section表示节的数目,0x0010表示本应用程序有16个节(section),从图中可以看出,本应用程序确实有16个节(section);
③第三个Time date stamp表示时间,这里没有值,如果有值可以换算成十进制秒然后再换算成年月日之类的,看到这个博客https://www.cnblogs.com/bokernb/articles/6116512.html
讲的很细致,里面好像说这个值是程序已经存在的时间啥的。
④Size of optional header这两个字节是IMAGE_OPTIONAL_HEADER,即NT头的第三部分的大小,其值为0x00E0;
0x00E0就是十进制的224,也就是说OptionalHeader的大小是224字节。
⑤Characteristics这两个字节指定了文件特征值,其值为0x0107。
Characteristics表示文件属性,它的每一个bit都代表了某种含义。
Bit 0 :置1表示文件中没有重定向信息。每个段都有它们自己的重定向信息。
这个标志在可执行文件中没有使用,在可执行文件中是用一个叫做基址重定向目录表来表示重定向信息的,这将在下面介绍。
Bit 1 :置1表示该文件是可执行文件(也就是说不是一个目标文件或库文件)。
Bit 2 :置1表示没有行数信息;在可执行文件中没有使用。
Bit 3 :置1表示没有局部符号信息;在可执行文件中没有使用。
Bit 4 :
Bit 7
Bit 8 :表示希望机器为32位机。这个值永远为1。
Bit 9 :表示没有调试信息,在可执行文件中没有使用。
Bit 10:置1表示该程序不能运行于可移动介质中(如软驱或CD-ROM)。在这 种情况下,OS必须把文件拷贝到交换文件中执行。
Bit 11:置1表示程序不能在网上运行。在这种情况下,OS必须把文件拷贝到交换文件中执行。
Bit 12:置1表示文件是一个系统文件例如驱动程序。在可执行文件中没有使用。
Bit 13:置1表示文件是一个动态链接库(DLL)。
Bit 14:表示文件被设计成不能运行于多处理器系统中。
Bit 15:表示文件的字节顺序如果不是机器所期望的,那么在读出之前要进行
交换。在可执行文件中它们是不可信的(操作系统期望按正确的字节顺序执行程序)。IMAGE_OPTIONAL_HEADER?
IMAGE_OPTIONAL_HEADER头由两部分组成:参数部分和数据目录部分;OptionalHeader,占224个字节
- 参数部分包含了产生该PE文件的连接器版本号、代码基地址、数据基地址、镜像基地址等信息;
- 数据目录部分包含了导出表、导入目录表、资源表等地址和大小
- 具体信息可以查看msdn (或者这个博客https://www.cnblogs.com/bokernb/articles/6116512.html)
typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; DWORD BaseOfCode; DWORD BaseOfData; DWORD ImageBase; DWORD SectionAlignment; DWORD FileAlignment; WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion; WORD MajorImageVersion; WORD MinorImageVersion; WORD MajorSubsystemVersion; WORD MinorSubsystemVersion; DWORD Win32VersionValue; DWORD SizeOfImage; DWORD SizeOfHeaders; DWORD CheckSum; WORD Subsystem; WORD DllCharacteristics; DWORD SizeOfStackReserve; DWORD SizeOfStackCommit; DWORD SizeOfHeapReserve; DWORD SizeOfHeapCommit; DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;
值得注意的是:DataDirectory
DataDirectory,占用128个字节,为一个IMAGE_DATA_DIRECTORY structure结构体数组(16个)。
typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
这个结构体有两个成员,一个成员占用4个字节,也就是8个字节。这个数组有16个数据,也就是16*8=128字节。
section头?
- PE文件的NT头之后就是节(section)头,
- 每个节头的大小是40字节。
- PE文件包含的节,可以从图中找到这些节对应的节头。
对应关系:
.bss 未初始化的数据
.data 代码节
.edata 导出表
.idata 导入表
.pdata 异常信息
.rdata 只读的已初始化数据(常量)
.reloc 重定位信息
.rsrc 资源目录
.sbss 与GP相关的未初始化数据
.sdata 与GP相关的已初始化数据
.text 默认代码节
.idlsym 包含已注册的SEH,以支持IDL
查看默认代码节的节头:
- Name表示节头的名称,其大小为8个字节;
- Virtual Size表示节头对应的节的大小,其大小为4个字节;
- RVA是Relative Virtual Address的简称,即相对虚拟地址,指定了节头对应节的RVA,其大小为4个字节;
- Size of Raw Data指的是磁盘文件中已经初始化数据的大小,其大小为4个字节;
- Pointer to Raw Data、Pointer to Relocations和Pointer to Line Numbers分别保存了节中数据起始地址、重定位项起始地址和行号信息数量的地址,大小均为4个字节;
- Number of Relocations和Number of Line Numbers分别表示节中重定位项的数量和行号信息的数量,大小均为2个字节,
- Characteristics是描述节特征的标志,大小为4个字节。
Characteristics是描述节特征的标志,其大小为4个字节,共32位,每位的含义如下。
Characteristics各位含义 1-5 未使用 6 此节包含可执行代码 7 此节包含已初始化的数据 8 此节包含未初始化的数据 9-15 未使用 16 此节包含通过全局指针来引用的数据 17-24 未使用 25 此节包含扩展的重定位信息 26 此节可以在需要时被丢弃 27 此节不能被缓存 28 此节不能被交换到页面文件中 29 此节可以在内存中共享 30 此节可以作为代码执行 31 此节可读 32 此节可写
0x60500060转化成二进制:1 10000 00101 00000 00000 00011 00000(位数由低到高对照)
对照着表看到,第6,7,21,23,30,31是1:该PE文件的默认代码节包含可执行代码、已初始化数据、可以作为代码执行,可读。
1.找到 NT 头的起始偏移地址、结束地址?
如下图:
可以直接找到起始偏移地址和结束地址:
PE文件的加载机制?
https://www.cnblogs.com/bokernb/articles/6116512.html
PE文件的结构在磁盘和内存中是基本一样的,但在装入内存中时又不是完全复制。
Windows装载器在装载的时候仅仅建立好虚拟地址和PE文件之间的映射关系,只有真正执行到某个内存页中的指令或访问某一页中的数据时,这个页才会被从磁盘提交到物理内存。
但因为装载可执行文件时,有些数据在装入前会被预先处理(如需要重定位的代码),装入以后,数据之间的相对位置也可能发生改变。因此,一个节的偏移和大小在装入内存前后可能是完全不同的。
-
[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview.war.zip项目JAVA源码+资料
2022-03-11 14:45:17[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview.war.zip项目JAVA源码+资料[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview.war.zip项目JAVA源码+资料 1.适合学生做毕业设计参考 2.适合个人学习技术... -
PEView宇宙无敌版
2018-08-27 10:21:40学习PE的好工具,结构清晰,代码风骚,效率恐怖,老少皆宜,也是《逆向工程核心原理》的工具 -
PEView 0.99
2017-12-04 10:44:15PE View Version 0.9.9.0 PE/COFF File Viewer Copyright @ 1997-2011 Wayne J.Rdburn All Rights Reserved. -
[网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具...
2021-01-03 15:53:39本系列虽然叫“网络安全自学篇”,但由于系统安全、软件安全与网络安全息息相关,作者同样会分享一些系统安全案例及基础工具用法,...文章目录一.PE文件数字签名过程二.PE文件签名数据提取1.PEView查看签名信息2.010Edi -
基于PEview分析PE文件(4-3)
2019-09-03 11:45:36点击PEview左侧树形控件中的“IMAGE_NT_HEADERS”左侧的“+”,展开NT头结构,如图7所示。 图7 NT头结构 从图7中可以看到,NT头包括Signatrue、IMAGE_FILE_HEADER和IMAGE_OPTIONAL_HEADER三部分。 4.1 ...4 PE的NT头
点击PEview左侧树形控件中的“IMAGE_NT_HEADERS”左侧的“+”,展开NT头结构,如图7所示。
图7 NT头结构
从图7中可以看到,NT头包括Signatrue、IMAGE_FILE_HEADER和IMAGE_OPTIONAL_HEADER三部分。
4.1 Signatrue
在图7中,选中“Signatrue”,在右侧显示了该部分的内容,如图8所示。
图8 Signatrue的值
从图8可以看出,Signatrue共4个字节,其值为0x00004550,即为字符串“PE”,因此Signatrue也叫做PE文件的文件签名,标志该文件的类型为PE。
4.2 IMAGE_FILE_HEADER
单击图7中的“IMAGE_FILE_HEADER”,在右侧可以看到该部分的内容,如图9所示。
图9 IMAGE_FILE_HEADER内容
从图9中可以看出,IMAGE_FILE_HEADER部分共20字节。其中0x000000EC-0x000000ED,这两个字节表示机器类型,用于标识CPU的类型,0x014C表示CPU为Intel 386或后继处理器及其兼容处理器;0x000000EE-0x000000EF表示节的数目,0x0009表示本应用程序有9个节(section),从图3左侧中可以看出,本应用程序确实有9个节(section);0x000000F4-0x000000FB这8个字节已经不再使用,因此将这8个字节都设置为0;0x000000FC-0x000000FD,这两个字节是IMAGE_OPTIONAL_HEADER,即NT头的第三部分的大小,其值为0x00E0;0x000000FE-0x000000FF,这两个字节指定了文件特征值,其值为0x0102,其16位的含义均不同。
4.3 IMAGE_OPTIONAL_HEADER
单击图7中的“IMAGE_OPTIONAL_HEADER”,在右侧可以看到该部分的内容,如图10所示。
图10 IMAGE_OPTIONAL_HEADER内容
从图10中可以看出,IMAGE_OPTIONAL_HEADER头由两部分组成,分别是0x0000012E-0x0000015F的参数部分和0x00000160-0x000001DF的数据目录部分。其中参数部分包含了产生该PE文件的连接器版本号、代码基地址、数据基地址、镜像基地址等信息;数据目录部分包含了导出表、导入目录表、资源表等地址和大小。
-
基于PEview分析PE文件(4-4)
2019-09-03 11:48:03在PEview左侧的树形控件中选择IAMGE_SECTION_HEADER.text,即默认代码节的节头,在右侧可以看到默认代码节的节头格式,如图11所示。 图11 IAMGE_SECTION_HEADER.text结构 其中,Name表示节头的名称,... -
[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview.war.rar
2022-04-14 15:18:21[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview.war.rar -
Mysoo站内搜索 v10 Peview_mysoo-10-previewwar毕业设计—(包含完整源码可运行).rar
2022-04-23 17:14:57Mysoo站内搜索 v10 Peview_mysoo-10-previewwar毕业设计—(包含完整源码可运行).rar -
[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview.war.zip
2021-12-15 16:26:32[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview.war.zip -
[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview java jsp完整源码下载
2022-01-16 14:24:10[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview java jsp完整源码下载 -
学校实训JSP项目-[搜索链接]Mysoo站内搜索 v1.0 Peview.zip
2021-09-04 19:24:29学校实训JSP项目-[搜索链接]Mysoo站内搜索 v1.0 Peview.zip -
JSP源码——[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview.war.zip
2021-10-06 06:57:51JSP源码——[搜索链接]Mysoo站内搜索 v1.0 Peview_mysoo-1.0-preview.war.zip -
基于PEview分析PE文件(4-1)
2019-09-02 21:43:451 PE文件 1.1 PE文件简介 PE文件是Portable Executable(可移植的可执行文件)的简写。...从图1可以看出,PE文件主要包含头和数据部分,其中可以将头部看作是...通过PEview软件,我们一起来分析PE文件的详细格式。