最近,我使用十六进制编辑器分析了一些 Windows 可执行文件。PE 标头从地址 0x100 开始,因此在 PE 映像实际开始之前有 256 字节的数据。前 256 字节:
我了解以下有关文件结构的信息
所以我知道前 128 个字节是做什么用的。我的问题是:接下来的 128 字节 (0x80 - 0xFF) 有何用途?(PE 映像在它们之后从 0x100 处开始。)
我观看了一个ASLRed dll图像基于32位进程的地址.
这不是完全随机化.它只是随机化了1/2概率.
例如,一旦我加载一个DLL,然后图像加载到0x12345678.
然后我再次加载图像,图像加载到0x23456789.(基地址已更改!)
但我再次加载图像
0x12345678
0x23456789
0x12345678
0x23456789
...
为什么他们这样实施?
它是否适用于崩溃报告的频率?(用于获取重新部署的dll的相同崩溃地址)
以下是从节对齐转换为文件对齐的步骤:
但我只是不明白,有人可以详细说明吗?
我找到了"导入表"字段的指针.这是8字节大小,分为虚拟地址和大小.但是,虚拟地址字段中的值很大,并且误导了我提取与导入表相关的条目的下落相关信息的努力.值是否指向偏移量,如果是,则(.exe)文件在到达所需偏移量之前完成.
我正在研究一种PE解剖器,并且遇到了一些非常不寻常的事情.PE格式中目录的名称和顺序似乎根据您的外观而有所不同:
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Base Relocation Table
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory
#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture Specific Data
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // RVA of GP
#define IMAGE_DIRECTORY_ENTRY_TLS 9 // TLS Directory
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // Bound Import …Run Code Online (Sandbox Code Playgroud) 好吧,今天我遇到了一个奇怪的问题.我刚才写了自己的GetProcAddress版本来获取远程进程的函数地址.我显然花了很多时间阅读PE架构,找出解决这个问题的最佳方法.
根据PECOFF v8规范(我认为它是最新的官方规范),有以下符号Export Name Pointer Table:
导出名称指针表是导出名称表中的地址数组(RVAs).指针各32位,并且相对于图像库.指针是词法排序的,以允许二进制搜索.
所以我在编写GetProcAddress版本时考虑到了这一点.显然,使用线性搜索的二进制搜索,在导出表格中可以有很好的效率提升... KERNEL32.dll(1300+导出函数).
直到今天,我遇到了一个奇怪的问题.看起来Kernel32中的一些导出函数实际上并没有按词汇顺序排序,这就是我的二进制搜索.以下是使用我将在下面发布的函数导出的Dll转储的摘录:
Ordinal: 810 Name: K32QueryWorkingSetEx
Ordinal: 811 Name: LCIDToLocaleName
Ordinal: 812 Name: LCMapStringA
Ordinal: 813 Name: LCMapStringEx
Ordinal: 814 Name: LCMapStringW
Ordinal: 815 Name: LZClose
Ordinal: 816 Name: LZCloseFile
Ordinal: 817 Name: LZCopy
Ordinal: 818 Name: LZCreateFileW
Ordinal: 819 Name: LZDone
Ordinal: 820 Name: LZInit
Ordinal: 821 Name: LZOpenFileA
Ordinal: 822 Name: LZOpenFileW
Ordinal: 823 Name: LZRead
Ordinal: 824 Name: LZSeek
Ordinal: 825 Name: LZStart
Ordinal: 826 Name: LeaveCriticalSection …Run Code Online (Sandbox Code Playgroud) C/C++具有一组预定义的结构和常量,对应于exe-header等.是否存在一些类比标准命名空间,C#中的类用于分析可移植可执行文件?或者它只是非托管不安全更多本地语言的特权?
如何.text通过使用pefile模块从PE 获取部分(或任何其他部分)的内容?
如何访问可执行文件的机器代码(二进制文件)?
细节