• 静态分析:IDA逆向代码段说明 text、idata、rdata、data


    静态分析:IDA逆向代码段说明 text、idata、rdata、data

    通常IDA对一个PE文件逆向出来的代码中,

    存在四个最基本的段text、idata、rdata、data,分别为代码、外部引入、资源包、变量。

    四个段为PE文件的结构中对应的段。

    一、text段:

    该段位程序代码段,在该段一开始就可以看到:

    .text:00401000 ; Segment type: Pure code
    .text:00401000 ; Segment permissions: Read/Execute

    这里的段类型跟权限说明很清楚: 分别为代码段和可读可执行。需要注意的是,borland这里叫做code,而不是text 

    二、idata、rdata、data段

    从命名上可以看出,三个段全为存放特殊数据的段,但IDA根据PE文件的格式将数据段中不同类型的数据区分开来。

    VC开发工具将INC,LIB,RES放在数据段,DELPHI也类似,同时由于Delphi的窗体文件*.dfm在源代码中使用编译指令{$R *dfm}作为res资源放在数据段中,因此像delphi的反汇编工具dede就根据这些窗体资源数据,分析出相当清晰的源代码与窗体事件的对应地址,当然实现代码还是汇编代码。

    1) idata段:

    该段在一开始一般有类似下面的说明:

    .idata:0049B000 ; Section 2. (virtual address 0009B000)
    .idata:0049B000 ; Virtual size : 0001717E ( 94590.)
    .idata:0049B000 ; Section size in file : 00018000 ( 98304.)
    .idata:0049B000 ; Offset to raw data for section: 0009B000
    .idata:0049B000 ; Flags 40000040: Data Readable
    .idata:0049B000 ; Alignment : default
    .idata:0049B000 ;
    .idata:0049B000 ; Imports from ADVAPI32.dll
    .idata:0049B000 ;
    .idata:0049B000 ; ===========================================================================
    .idata:0049B000
    .idata:0049B000 ; Segment type: Externs
    .idata:0049B000 ; _idata

    明显是一个Imports函数的代码段,这里集中所有外部函数地址,代码中会先跳到该地址后再执行,PE文件加载器在开始会获取真实的函数地址来修补idata段中的函数地址。

    与之对应的exports是edata,

    表面上看PE文件对该段的定位是特殊数据段。

    2)rdata段

    名字上看就是资源数据段,程序用到什么资源数据都在这里,资源包括你自己封包的,也包括开发工具自动封包的。

    3)data段

    这个段存放程序的全局数据、全局常量等。

  • 相关阅读:
    Union all 分别排序
    GridView中显示bool字段(在数据库中是字符类型)
    oracle语句有关知识
    验证控件验证DropDownList
    【Java高级工程师蜕变之路】013 Spring MVC基础以及高级应用
    【Java高级工程师蜕变之路】012 Spring AOP源码分析
    【Java高级工程师蜕变之路】010 Spring IOC的应用
    【Java高级工程师蜕变之路】017 Spring Data JPA的应用与源码剖析
    【Java高级工程师蜕变之路】009 手写IOC和AOP
    【Java高级工程师蜕变之路】015 Spring MVC源码剖析
  • 原文地址:https://www.cnblogs.com/yuanscn/p/12834991.html
Copyright © 2020-2023  润新知