zoukankan      html  css  js  c++  java
  • 逆向学习-Upack的PE文见头分析

    重叠文件头

      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函数。

     

  • 相关阅读:
    【BZOJ】4349: 最小树形图
    【AtCoder】AtCoder Petrozavodsk Contest 001
    【LOJ】#2525. 「HAOI2018」字串覆盖
    趣味题:恺撒Caesar密码(c++实现)
    趣味问题:画图(c++实现)
    趣味问题:到底买不买
    成绩大排队
    A除以B问题
    2017-统计字符个数
    2016-数据的交换输出
  • 原文地址:https://www.cnblogs.com/whitehawk/p/10777163.html
Copyright © 2011-2022 走看看