鱼C论坛

 找回密码
 立即注册
查看: 859|回复: 1

[技术交流] PE查看器-不知道能不能用,大家试试

[复制链接]
发表于 2017-8-3 15:13:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef int DWORD;


  4. int main()
  5. {
  6.         char dos_header[64];
  7.     char image_header[20];
  8.     char optional_header[98];
  9.    
  10.     FILE* fp = NULL;
  11.     DWORD fileSize = 0;
  12.     char* fileBuffer = NULL;
  13.     fp = fopen("第29课笔记.exe","rb");                        //把这个“第29课笔记”改成自己要分析的EXE程序的名字。
  14.     int address = fp;
  15.     fseek(fp,0L,SEEK_END);
  16.     fileSize = ftell(fp);
  17.     fseek(fp,0L,0);
  18.     fileBuffer = (char*)malloc(fileSize);
  19.     if(!fileBuffer)
  20.     {
  21.                 printf("缓冲区分配失败!");
  22.     }       
  23.     fread(fileBuffer,fileSize,1,fp);
  24.     int i;
  25.     int d;
  26.     fseek(fp,0L,0);
  27.     for(i=0;i<98;i++)
  28.     {
  29.                 optional_header[i] = 0x00;
  30.     }
  31.    
  32.     fseek(fp,0L,0);
  33.    
  34.     for(i=0;i<64;i++)
  35.     {
  36.                 dos_header[i] = (char)fileBuffer[i];
  37.     }   
  38.     int address_for_NT_header = dos_header[63]*0x1000000 + dos_header[62]*0x10000 + dos_header[61]*0x100 + dos_header[60];
  39.     printf("%x\n",address_for_NT_header);
  40.     int size_of_optional_header;
  41.     int number_of_rva_and_sizes;
  42.     int address_of_sections_header;
  43.     for(i=0;i<20;i++)
  44.     {
  45.                 image_header[i] = (char)fileBuffer[i+address_for_NT_header+1];
  46.         if(i == 17)
  47.         {
  48.                         size_of_optional_header = (char)fileBuffer[i+address_for_NT_header+1]*0x100 + (char)fileBuffer[i+address_for_NT_header+1-1];
  49.         }
  50.     }
  51.    
  52.     for(i=0;i<size_of_optional_header;i++)
  53.     {
  54.                 optional_header[i] = (char)fileBuffer[address_for_NT_header+i+1+20];
  55.         if(i == 98)
  56.         {
  57.                         number_of_rva_and_sizes = (char)(fileBuffer[address_for_NT_header+i+1+20]*0x100)+(char)fileBuffer[address_for_NT_header+i+20];
  58.         }
  59.     }
  60.    
  61.     address_of_sections_header = address_for_NT_header+1+20+244;
  62.         char section_header[40*number_of_rva_and_sizes];
  63.         for(i=0;i<(40*number_of_rva_and_sizes);i++)
  64.     {
  65.                 section_header[i] = (char)fileBuffer[address_of_sections_header+i];
  66.     }
  67.    
  68.     printf("e_magic:%02x%02x\n",dos_header[1],dos_header[0]);
  69.     printf("e_cblp:%02x%02x\n",dos_header[3],dos_header[2]);
  70.     printf("e_cp:%02x%02x\n",dos_header[5],dos_header[4]);
  71.     printf("e_crlc:%02x%02x\n",dos_header[7],dos_header[6]);
  72.     printf("e_cparhdr:%02x%02x\n",dos_header[9],dos_header[8]);
  73.     printf("e_minalloc:%02x%02x\n",dos_header[11],dos_header[10]);
  74.     printf("e_maxalloc:%02x%02x\n",dos_header[13],dos_header[12]);
  75.     printf("e_ss:%02x%02x\n",dos_header[15],dos_header[14]);
  76.     printf("e_sp:%02x%02x\n",dos_header[17],dos_header[16]);
  77.     printf("e_csum:%02x%02x\n",dos_header[19],dos_header[18]);
  78.     printf("e_ip:%02x%02x\n",dos_header[21],dos_header[20]);
  79.     printf("e_cs:%02x%02x\n",dos_header[23],dos_header[22]);
  80.     printf("e_lfarlc:%02x%02x\n",dos_header[25],dos_header[24]);
  81.     printf("e_ovno:%02x%02x\n",dos_header[27],dos_header[26]);
  82.     printf("e_res:%02x%02x %02x%02x %02x%02x %02x%02x\n",dos_header[29],dos_header[28],dos_header[31],dos_header[30],dos_header[33],dos_header[32],dos_header[35],dos_header[34]);
  83.     printf("e_oemid:%02x%02x\n",dos_header[37],dos_header[36]);
  84.     printf("e_oeminfo:%02x%02x\n",dos_header[39],dos_header[38]);
  85.     printf("e_res2:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000\n");
  86.     printf("e_lfanew:%02x%02x%02x%02x\n",dos_header[63],dos_header[62],dos_header[61],dos_header[60]);
  87.    
  88.         printf("Machine:%02x%02x\n",image_header[1],image_header[0]);
  89.     printf("NumberOfSections:%02x%02x\n",image_header[3],image_header[2]);
  90.     printf("TimeDateStamp:%02x%02x%02x%02x\n",image_header[7],image_header[6],image_header[5],image_header[4]);
  91.         printf("PointerToSymbolTable:%02x%02x%02x%02x\n",image_header[11],image_header[10],image_header[9],image_header[8]);
  92.     printf("NumberOfSymbols:%02x%02x%02x%02x\n",image_header[15],image_header[14],image_header[13],image_header[12]);
  93.     printf("SizeOfOptionalHeader:%02x%02x\n",image_header[17],image_header[16]);
  94.     printf("Characteristics:%02x%02x\n",image_header[19],image_header[18]);
  95.    
  96.         printf("Magic:%02x%02x",optional_header[1],optional_header[0]);
  97.     printf("MajorLinkerVersion:%02x",optional_header[2]);
  98.     printf("MinorLinkerVersion:%02x",optional_header[3]);
  99.     printf("SizeOfCode:%02x%02x%02x%02x",optional_header[7],optional_header[6],optional_header[5],optional_header[4]);
  100.     printf("SizeOfInitializedData:%02x%02x%02x%02x",optional_header[11],optional_header[10],optional_header[9],optional_header[8]);
  101.     printf("SizeOfUninitializedData:%02x%02x%02x%02x",optional_header[15],optional_header[14],optional_header[13],optional_header[12]);
  102.     printf("AddressOfEntryPoint:%02x%02x%02x%02x",optional_header[19],optional_header[18],optional_header[17],optional_header[16]);
  103.     printf("BaseOfCode:%02x%02x%02x%02x",optional_header[23],optional_header[22],optional_header[21],optional_header[20]);
  104.     printf("BaseOfData:%02x%02x%02x%02x",optional_header[27],optional_header[26],optional_header[25],optional_header[24]);
  105.     printf("ImageBase:%02x%02x%02x%02x",optional_header[31],optional_header[30],optional_header[29],optional_header[28]);
  106.     printf("SectionAlignment:%02x%02x%02x%02x",optional_header[35],optional_header[34],optional_header[33],optional_header[32]);
  107.     printf("FileAlignment:%02x%02x%02x%02x",optional_header[39],optional_header[38],optional_header[37],optional_header[36],optional_header[35]);
  108.     printf("MajorOperatingSystemVersion:%02x%02x",optional_header[41],optional_header[40]);
  109.     printf("MinorOperatingSystmeVersion:%02x%02x",optional_header[43],optional_header[42]);
  110.     printf("MajorImageVersion:%02x%02x",optional_header[45],optional_header[44]);
  111.     printf("MinorImageVersion:%02x%02x",optional_header[47],optional_header[46]);
  112.     printf("MajorSubsystemVersion:%02x%02x",optional_header[49],optional_header[48]);
  113.    
  114.         printf("misc:%02x%02x%02x%02x",section_header[11],section_header[10],section_header[9],section_header[8]);
  115.     printf("virtualAddress:%02x%02x%02x%02x",section_header[15],section_header[14],section_header[13],section_header[12]);
  116.     printf("SizeOfRawData:%02x%02x%02x%02x",section_header[19],section_header[18],section_header[17],section_header[16]);
  117.     printf("pointerToRawData:%02x%02x%02x%02x",section_header[23],section_header[22],section_header[21],section_header[20]);
  118.         printf("Characteristics:%02x%02x%02x%02x",section_header[39],section_header[37],section_header[36],section_header[35],section_header[34]);
  119.    
  120.         getchar();
  121.     return 0;
  122. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-8-4 12:55:03 | 显示全部楼层
大家都没回就代表我的代码可以用咯?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表