-
-
[原创]小菜自编PE分析工具
-
发表于:
2010-8-1 18:25
9062
-
最近刚刚接触了PE文件格式,仔细学了一下,写了一个简单的分析工具,奉上源码,希望大家多多交流,不吝赐教!
部分预览:
//输出重定位信息
PIMAGE_BASE_RELOCATION pBaseReloc;
if (pOptHeader->DataDirectory[5].VirtualAddress)
{
printf("===========IMAGE_BASE_RELOCATION==============");
pBaseReloc = (PIMAGE_BASE_RELOCATION)((LPBYTE)lpBaseAddr+RvaToOffset(pOptHeader->DataDirectory[5].VirtualAddress));
}
else{
printf("NO RELOC TABLE!\n");
pBaseReloc = 0;
}
while (pBaseReloc && pBaseReloc->VirtualAddress) //判断是否到了重定位表的末尾
{
//打印当前分配表的基址和大小
printf("Base:0x%08x,SizeOfBlock:%0x\n",pBaseReloc->VirtualAddress,pBaseReloc->SizeOfBlock);
for (unsigned int i=8;i<pBaseReloc->SizeOfBlock;i+=2){
WORD wRelocData = *(LPWORD)((LPBYTE)pBaseReloc+i);
if (!wRelocData)
continue;
DWORD RvaData = (wRelocData&0xFFF)+pBaseReloc->VirtualAddress;
printf("0x%04x 0x%04x 0x%08x==>0x%08x\n",wRelocData,wRelocData&0x0FFF,RvaData,*(LPDWORD)(RvaToOffset(RvaData)+(DWORD)lpBaseAddr));
}
//pBaseReloc指向下一个分配表
pBaseReloc =(PIMAGE_BASE_RELOCATION) ((LPBYTE)pBaseReloc+pBaseReloc->SizeOfBlock);
}
================
今天仔细看了一下,发现了一个问题,有些程序(如何win7自带的记事本、explorer.exe等等)的IMAGE_IMPORT_DESCRIPTOR中的 OrignalFirstThunk和FirstThunk都不为零,但是所最终指向的位置不是同一个Image_Import_By_name数据结构,不知道怎么发生的?请教各位!
[课程]FART 脱壳王!加量不加价!FART作者讲授!