1. 程式人生 > >逆向學習-Upack的PE文見頭分析

逆向學習-Upack的PE文見頭分析

size int 應該 fop header 代碼 awd direct magic

重疊文件頭

  MZ文件頭與PE文件頭重疊。

  offest 0  e_magic:magic number = 4D5A(‘MZ‘)

  offest 3C  e_lfanew:File address of new exe header

  技術分享圖片

IMAGE_FILE_HEADER.SizeOfOptionalHeader

    修改此值,可以向文件頭插入解碼代碼。

    增大此值,就在IMAGE_OPTIONAL_HEADER與IMAGE_SECTION_HEADER之間添加了額外空間。這個區域就被添加了解碼代碼。

IMAGE_OPTIONAL_HEADER.NumberOfRvaAndSizes

    指出緊接在後面的IMAGE_DATA_DIRECTORY結構體數組的元素個數。UPack會減小IDD(IMAGE_DATA_DIRECTORY)的值。忽視後幾個元素。

IMAGE_SECTION_HEADER

    在這個結構體中,UPack會把自身數據記錄到程序運行不需要的項目。

重疊節區

   查看節區頭

   技術分享圖片

   第一節區,第三節區重疊。原文件被壓縮在第二節區。

RVA to RAW

  計算EP的文件偏移量:技術分享圖片RAW = 1018 -1000 + 10 = 28

  但是RAW 28不是代碼區域。一般而言,PTRD(PointerToRawData)的值應該是FileAlignment的整數倍,所以此處被識別為0。重新計算RAW = 1018 - 1000 + 0 = 18。

導入表

  技術分享圖片

  前四個字節是導入表的地址(RVA),後面四個字節是導入表的大小(Size)。RAW = 271EE - 27000 + 0 = 1EE。

導入地址表

  1EE  OriginalFirstThunk(INT)  0

  1FA  Name           2

  1FE  FirstThunk(IAT)     11E8

  技術分享圖片

  Name的RVA值為2,屬於Header區域。

  技術分享圖片

  IAT的值為11E8,RAW = 11E8 - 1000 + 0 = 1E8

  技術分享圖片

  00000028和000000BE處分別是兩個API函數。

 

逆向學習-Upack的PE文見頭分析