首页
社区
课程
招聘
[原创]小菜自编PE分析工具
发表于: 2010-8-1 18:25 9062

[原创]小菜自编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作者讲授!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 73
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
路过顶一下。
2010-8-2 09:04
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dhy
3
路过,支持一下
2010-8-2 11:04
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
顶!
yige !
2010-8-2 11:08
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
貌似程序有bug
2013-3-2 22:42
0
游客
登录 | 注册 方可回帖
返回
//