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

    逆向中静态分析工具——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进制数据。

    IDA显示字节机器码

    菜单

    Options >> General

    Disassembly选项卡Number of opcode bytes写上非0,写1好像没啥用,只显示1位根本没用,16就差不多了

  • 相关阅读:
    小波变换的引入,通俗易懂
    Leetcode 437. Path Sum III
    Leetcode 113. Path Sum II
    Leetcode 112 Path Sum
    Leetcode 520 Detect Capital
    Leetcode 443 String Compression
    Leetcode 38 Count and Say
    python中的生成器(generator)总结
    python的random模块及加权随机算法的python实现
    leetcode 24. Swap Nodes in Pairs(链表)
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/8947824.html
Copyright © 2011-2022 走看看