欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

提取PE输入表(dll及函数名)

提取PE输入表(dll及函数名)

(全部代码附件)
关键代码如下:
void ShowImportDllInfo(LPVOID ImageBase)
{
  char *szdllname;
  int i=1;
  PIMAGE_NT_HEADERS pnt=NULL;
  PIMAGE_IMPORT_DESCRIPTOR pimport=NULL;
  pnt=GetNtHead(ImageBase);
  pimport=GetFirstImportAddress(ImageBase);
  if(!pimport)
  {
    cout<<"GetFirstImportAddress() error"<<endl;
    return;
  }
  while(pimport->FirstThunk)
  {
    szdllname=(char*)RvaToPtr(pnt,ImageBase,pimport->Name);
    cout<<"NO."<<i<<": "<<szdllname<<endl;
    i++;
    pimport++;
  }
}
void ShowImportFuncInfo(LPVOID ImageBase)
{
  int i=1;
  char* funcname;
  PIMAGE_IMPORT_BY_NAME pbyname=NULL;
  DWORD *pthunk=NULL;
  DWORD dwthunk;
  PIMAGE_IMPORT_DESCRIPTOR pstart=NULL;
  PIMAGE_NT_HEADERS pnt=NULL;
  pstart=GetFirstImportAddress(ImageBase);
  dwthunk=GETTHUNK(pstart);
  pnt=GetNtHead(ImageBase);
  pthunk=(DWORD*)RvaToPtr(pnt,ImageBase,dwthunk);
  if(!pthunk)
  {
    cout<<"RvaToVa() fail"<<endl;
    return ;
  }
  cout<<endl<<">>>====FUNC INFO====<<<"<<endl;
  while(*pthunk)
  {
    if(HIWORD(*pthunk)==0x8000)
    {
      funcname=(char*)IMAGE_ORDINAL32(*pthunk);
    }
    else
    {
      pbyname=(PIMAGE_IMPORT_BY_NAME)RvaToPtr(pnt,ImageBase,(DWORD)(*pthunk));
      if(pbyname)
      {
        funcname=(char*)pbyname->Name;
      }
      else
      {
        funcname=(char*)(DWORD*)(*pthunk);
      }
    }
    cout<<"NO."<<i<<": "<<funcname<<endl;
    i++;
    pthunk++;
  }
}

上传的附件 pe.doc

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功