pe file 中的DLL name

本帖最後由 luckiejacky 於 2016-9-14 17:41 編輯

Working Version(Windows XP only)!!!

  1. //CamelLu.idc
  2. #include <idc.idc>
  3. static CamelLu()
  4. {
  5.     auto addr,path,file,imagebase;
  6.     Message("Functions' Names Dumper - CamelLu(2011.7.19)\n");
  7.         auto fullPath = GetInputFilePath();
  8.         //fullPath = "C:\\Users\\Jacky\\Desktop\\XP\\Explorer2.exe";
  9.         //fullPath = "C:\Users\Jacky\Desktop\Windows XP\XP\WINDOWS\\notepad.exe";
  10.         Message("%s\n", fullPath);
  11.     file = fopen(fullPath,"rb");
  12.     if (0 == file)
  13.     {
  14.         Warning("open INPUTFILE failed!");
  15.         return;
  16.     }
  17.     if (0 != fseek(file,0x3c,0))
  18.     {
  19.         Warning("seek e_lfanew failed!");
  20.         fclose(file);
  21.         return;
  22.     }
  23.     auto pehdraddr = readlong(file,0);
  24.     if (0 != fseek(file,pehdraddr + 0x34,0))
  25.     {
  26.         Warning("seek imagebase failed!");
  27.         fclose(file);
  28.         return;        
  29.     }
  30.     imagebase = readlong(file,0);
  31.     //fclose(file);
  32.     //path = AskFile(1,"*.lu","Please enter output file name");
  33.     //if (BADADDR == path)
  34.     //{
  35.     //   Warning("AskFile failed!");
  36.     //  return;
  37.     // }
  38.     //file = fopen(path,"w");
  39.     //if (0 == file)
  40.     //{
  41.     //   Warning("fopen failed!");
  42.     //   return;
  43.     //}
  44.           
  45.     // 0x4 sigature, 0x14 is fileheader
  46.     auto optionalhdr = pehdraddr + 0x4 + 0x14;         
  47.        
  48.     auto datadir = optionalhdr + 0x60;
  49.          
  50.     // skip first entry, the second one is iat
  51.     auto importdir = datadir + 0x8;  
  52.     auto name;                 
  53.     if (0 != fseek(file,importdir,0))
  54.     {
  55.            Warning("seek import directory failed!");
  56.           fclose(file);
  57.          return;        
  58.     }
  59.     auto iat = readlong(file, 0);
  60.    do
  61.    {      
  62.           auto importRVA = imagebase + iat + 12;                                 
  63.           auto nameAddr = imagebase + Dword(importRVA);                                          
  64.              auto t= GetStringType(nameAddr);
  65.           if (t>=0) {
  66.                 name = GetString(nameAddr, -1,t);
  67.            }
  68.            else
  69.            {
  70.                  break;
  71.            }                 
  72.            Message("%s\n", name);  
  73.            iat = iat + 20;
  74.      } while (name != -1);
  75. }

  76. static main()
  77. {
  78.    CamelLu();
  79. }
複製代碼