我从 PEB InMemoryOrderModuleListItem 列表中获得了 dllbase 地址,并且我正在尝试访问 DLL 的 PE dos 头文件。我是逆向工程的新手,在过去,我通过将 DLL 的句柄转换为 PIMAGE_DOS_HEADER 来访问 dos 标头并从那里继续。如何通过dllbase地址获取dos标头?我试图将 DLL 基地址转换为 PIMAGE_DOS_HEADER,但在调试器中,我收到无法读取内存的错误。
通过PEB dllbase地址访问DLL PE文件
逆向工程
聚乙烯
dll
2021-06-19 20:15:47
2个回答
DLL 基地址是IMAGE_DOS_HEADER结构的地址。如果在 DLL 基地址中没有找到“MZ”,则可能是地址错误。
我不太确定你在问什么,但无论如何我都会尝试一下。您可以使用以下 API:CreateFile、CreateFileMapping和MapViewOfFile来获取您要查找的内容。像这样的事情对你有用:
HANDLE hFile = CreateFile(dll, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
LPVOID lpFileBase = MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
PIMAGE_DOS_HEADER DosHeader = static_cast<PIMAGE_DOS_HEADER>(lpFileBase);
在这个代码块中没有错误检查,所以一定要实现它,但是 lpFileBase 会给你你正在寻找的 dll 的基地址,然后你可以开始解析 DosHeader。请记住,您将只能阅读。如果您需要更多,请更改标志。
希望这可以帮助!
其它你可能感兴趣的问题