如何正确获取DLL文件内容进行PE解析?
How to properly get contents of DLL file for PE parsing?
我正在尝试获取 kernel32.dll
中函数的 RVA,这意味着我需要使用偏移量在文件中查找不同的结构,直到我可以获得 IMAGE_EXPORT_DIRECTORY
结构。但是,我知道很多获取文件内容的方法和方法,可以解释并保留某些字符和内容,这将使这成为一项几乎不可能完成的任务。所以我想知道将 dll 文件的内容复制到字符数组中的最佳方法。
更新:对于任何感兴趣的人,我创建了一个将 dll 映射到内存的函数。
void* GetFileImage(char path[])
{
HANDLE hFile = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
if(hFile == INVALID_HANDLE_VALUE){return NULL;}
HANDLE file_map = CreateFileMapping(hFile, NULL, PAGE_READONLY|SEC_IMAGE, 0, 0, "KernelMap");
if(file_map == INVALID_HANDLE_VALUE){return NULL;}
LPVOID file_image = MapViewOfFile(file_map, FILE_MAP_READ, 0, 0, 0);
if(file_image == 0){return NULL;}
return file_image;
}
有多种方法。不过,没有那么多倍数。
1.If你正在尝试解析一个系统加载的文件,比如kernel32.dll
,它是在系统启动时加载到内存中的,你可以直接使用GetModuleHandle
来获取加载的基地址并开始通过 PE 进行解析(假设您熟悉 PE 结构和 static/delay dll 的加载及其导出)。
2.If 您尝试解析的 dll 不是系统加载的一个,您可以使用 LoadLibrary
加载它们,这将 return 您加载的基地址,因此使您能够解析 PE。
3.You也可以做CreatFileMapping/MapViewOfFile
映射自己虚拟内存中的dll来解析
@David Thomas 推荐的 msdn 文章会有很大帮助:: Peering Inside the PE
我正在尝试获取 kernel32.dll
中函数的 RVA,这意味着我需要使用偏移量在文件中查找不同的结构,直到我可以获得 IMAGE_EXPORT_DIRECTORY
结构。但是,我知道很多获取文件内容的方法和方法,可以解释并保留某些字符和内容,这将使这成为一项几乎不可能完成的任务。所以我想知道将 dll 文件的内容复制到字符数组中的最佳方法。
更新:对于任何感兴趣的人,我创建了一个将 dll 映射到内存的函数。
void* GetFileImage(char path[])
{
HANDLE hFile = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL);
if(hFile == INVALID_HANDLE_VALUE){return NULL;}
HANDLE file_map = CreateFileMapping(hFile, NULL, PAGE_READONLY|SEC_IMAGE, 0, 0, "KernelMap");
if(file_map == INVALID_HANDLE_VALUE){return NULL;}
LPVOID file_image = MapViewOfFile(file_map, FILE_MAP_READ, 0, 0, 0);
if(file_image == 0){return NULL;}
return file_image;
}
有多种方法。不过,没有那么多倍数。
1.If你正在尝试解析一个系统加载的文件,比如kernel32.dll
,它是在系统启动时加载到内存中的,你可以直接使用GetModuleHandle
来获取加载的基地址并开始通过 PE 进行解析(假设您熟悉 PE 结构和 static/delay dll 的加载及其导出)。
2.If 您尝试解析的 dll 不是系统加载的一个,您可以使用 LoadLibrary
加载它们,这将 return 您加载的基地址,因此使您能够解析 PE。
3.You也可以做CreatFileMapping/MapViewOfFile
映射自己虚拟内存中的dll来解析
@David Thomas 推荐的 msdn 文章会有很大帮助:: Peering Inside the PE