zoukankan      html  css  js  c++  java
  • 逆向中静态分析工具——IDA初学者笔记

    //******************************************************************************
    //IDA初学者笔记

    //******************************************************************************
    //作者:Cai
    //日期:2011-10-18
    //******************************************************************************

          本人作为一个初学者,尽量让本文也从一个初学者的角度讲一些比较适合的内容,对于高手而言,价值深浅就见笑了。

    IDA打开一个Win32的EXE后,会出现一系列窗口,默认定位到“IDA View”窗口中的入口函数处,即VC程序的WinMain,

    到这里,最重要最艰难的反编译工作已经被IDA这个工具完成了,但逆向工程,远不止这些。

    接下来要来进行跟踪调试、修改 ,这就必须先学习如何使用这个IDA工具,不过同时进行也是最好的学习方法。

            在正式开始前,有2个实用的浏览快捷键需要记住,就是前进后退:

            前进:Ctrl+Enter

            后退:Esc

             当然也可以使用工具栏的按钮:

             或菜单:

             提示:若工具栏没有按钮则在主菜单View-Toolbars-Jump勾上即可:

    1.主要窗口介绍:

           IDA作为一个具有强大核心引擎和灵活辅助插件的组合型工具,有太多地方需要去研究熟悉的,但是学习是一个循序渐进、

    由浅到深的过程,因此,本文从入眼就接触到的窗口开始介绍,应该是条正确的道路。

    1)IDA View

             该窗口可通过View-Open subviews-Disassembly调出:

             该窗口有2种模式,一种是Text View,另一种是Graph View,2种大同小异, 关于两种浏览模式的转换,   可在右键菜单

    中切换:

      ·Text View切换到Graph View:(注意:在 Text View中有时右键菜单不是这样的,这时换个有代码的位置点右键就可以了)

     ·GraphView切换到Text View:

    以下采用比较通用的Text View为例来介绍,如下图: 

          主要是三个区域:地址区、OpCode区(操作码区)、反编译代码区

          A.地址区

                 该处地址以PE文件加载到内存后的虚拟地址为准,即镜像基址+偏移地址,如例子的程序基址是0x00400000,

    如图中.text:0048FEEC位置数据如下:


     

           该处地址是基址0x00400000 + 偏移地址8FEEC,假如我们使用WinHex打开查看,可以看到偏移地址8FEEC 处的数据

    如下:

              可以看出,两处数据是相同的,因此在WinHex中修改 8FEEC 处的数据将会影响到IDA中.text:0048FEEC处的数据。

    这里顺便转一下,虚拟内存空间地址表:

    高2G空间 (Ring0级能访问区域) :

    0xFFFFFFFF-0xC0000000:1GB用于VxD、存储器管理和文件系统;

    0xBFFFFFFF-0x80000000:1GB共享的WIN32 DLL、存储器映射文件和共享存储区;

    低2G空间(Ring3权限区域)

    0x7FFFFFFF-0x00400000:约2GB为每个进程的WIN32专用地址;

    0x003FFFFF-0x00001000:为MS-DOS系统 和 WIN16应用程序;

    0x00000FFF-0x00000000:为防止使用空指针的4,096字节;

    同时顺便提醒一下,不管EXE或DLL基址都是可变的,但一个DLL加载到EXE后,基址会被重定向,但偏移地址是不变的;

    而对于PE文件,PE头的长度并不是固定的,当然有着同样的解析标准,可也导致IDA中偏移地址-基址不一定等于文件地址,

    判断代码在文件中的基址很容易,通常PE头在WinHex中可以清晰的看到“This program cannot be run in DOS.....”,之后就是

    一些段名称:如.text,.rdata。接着就是一小段00,之后出现数据的地方就是代码基址,大部分是55 8B或56 8B等。

           B.OpCode区

              该区域默认不会显示出来,需要打开菜单Options-General,

               

              在“Disassembly”页中的“Display Disassembly  line parts”中,设置”Number of opcode bytes“,例子中设置 8,默认为0则不显示。

              

             OpCode区字面上看是操作码区的意思,当然这是一个以16进制字符显示二进制数据的形式,这样结合反编译代码会更具直观性,

    但也使界面复杂化,仁者见仁。

              C.反编译代码区

              该区域是IDA的主要功能区域,具有很多特性,如相同字符串高亮、双击函数名或引用变量名可调整到对应的跳转地址等,这里功能快捷键繁多,留待以后慢慢学习熟悉。同样介绍几个快捷键:

              ·字符串搜索:             搜    索:Alt+T          下一个:Ctrl+T

              ·反编译为C代码:      在反汇编代码中按F5即可。

              D.跳转指引区

              该区域主要是显示一些跳转地址指引箭头,作用简单明了。

              

    2)Hex View

            该窗口如下图所示,与一般的16进制编辑器类似。

              

             默认为只读状态,可使用快捷键F2对数据区域(绿色字符区域)在只读/编辑二种状态间切换,也可以使用patch program功能来编辑(后面会介绍该功能)。

    3)其他窗体

        IDA的窗体均可在主菜单View-Open subviews中打开/关闭,其他如pseudocode为反编译C代码窗体、strings为程序字符串列表窗口,均为十分有用的辅助窗口,以后再慢慢介绍

    附:

    1.启用patch program(修改代码)菜单:

    idagui.cgf中DISPLAY_PATCH_SUBMENU改为YES,即可将修改二进制代码的菜单,

    当然修改代码的窗体中仍是以16进制字符显示,这个修改于Alt+F2不一样,可以将修改于原文件的不同地方保存到一个dif文件里。 

    2.快捷键:

    在IDA View中按F5可以生产C代码查看,  也可以将整个保存为C文件进行查看。

    在Hex View中按F2可直接编辑16进制数据。

  • 相关阅读:
    OpenStack official programs
    在Oracle数据库启动时提示没有权限 ora-01031:insufficient privileges
    顶级工程师应该具备的能力
    Java Servelet
    Struts dispatchAction
    Struts html(标签)
    Java jstl标签使用总结
    Struts1原理解析
    Java Struts(文件下载)
    Java PrepareStatement
  • 原文地址:https://www.cnblogs.com/caibirdy1985/p/4232968.html
Copyright © 2011-2022 走看看