飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4323|回复: 3

[分享] IDA简易教程

[复制链接]
  • TA的每日心情
    开心
    2022-4-18 15:36
  • 签到天数: 207 天

    [LV.7]常住居民III

    发表于 2010-2-23 01:31:39 | 显示全部楼层 |阅读模式
    我的鸟语太差大概翻译了一下,大家凑合着能看懂就行了:-)有些地方用自己理解的意思改写了一下!
    本文的主要内容就是讲如何用IDA来辅助识别各种类型的数据.
    版权信息:所有版权归原文作者所有,如许转载清保持文章完整性。
    索引
    第一节:C语言的小程序
    第二节:基本类型的识别
    第三节:操作数格式
    第四节:字符和字符串的操作
    第五节:数组
    第六节:枚举类型
    第七节:Bit-fields(位域)
    第八节:结构体
    第九节:结构变量和结构数组
    10 第十节:联合体和结构体中的结构体
    11 第十一节:可变的结构体
    12 第十二节:结构体偏移
    13 第十三节:联合体偏移量
    14 第十四节:地址偏移量
    15 第十五节:最终逆向结果

    附录
     
    第一节:C语言的小程序
    为了演示IDA的功能先写一段小程序。(代码在附录)程序在此 源代码
    程序执行结果:
    CUSTOMERS:
    CUSTOMER 0001: Peter (m)
    CUSTOMER 0002: John (m)
    CUSTOMER 0003: Mary (f)

    PRODUCTS:
    PRODUCT 0001: BOOK: IDA QuickStart Guide
    PRODUCT 0002: SOFTWARE: IDA Pro: PC; WINDOWS DOS; DISASSEMBLY
    PRODUCT 0003: SOFTWARE: PhotoRescue: PC MAC; WINDOWS OS-X; RECOVERY
    PRODUCT 0004: SOFTWARE: aCrypt: PC; WINDOWS; CRYPTOGRAPHY

                                                                   TOP
    ----------------------------------------------------------------------
    第二节:基本类型的识别
    用IDA分析我们前面的程序,我们会发现下图的类型

    只要按"D"我们就可以任意转换这些不确定的类型.可以变成byte,word,dword(db,dw,dd)。
    当然你也可以设置更多的数据转换类型:
    选择“Options”菜单的“Setup data types”命令就可以设置了

    值得注意的是:你在数据转换的时候,它是依据数据自身的结构来转换的。我们按“D”的时候,
    如果下一个字节已经被你转换过,你的本次转换,IDA将会提示让你确认。

    注:如果你想改变这种默认设置可以在“Options”菜单“Convert already defined bytes”命令里设置

    撤销你的所有转换按“U”键。
                                                                TOP
    -------------------------------------------------------------------------------------
    第三节:操作数格式
    数据类型自定义转换后,被操作过的数据(就是你按过“D”的)的进制IDA也是可以自定义转变的,
    通过在“Operands”工具栏的“Number”命令我们可以随意转换数字的进制

    最下面的“Toggle leading point”就是填补数据前的空位为0(就是说如果当前数据未占满数据格式的所有位高位用0来填补)
     
     
    IDA还可以转换数据的标志位(就是正负)具体操作如下图:
     
    最后呢~~如果这些转换你还不满意(够BT)当然你还可以自定义数据进制如图:

                                                                    TOP
    -----------------------------------------------------------------------------------------
    第四节:字符和字符串的操作
     
    作者又说话了:很多程序都是包含字符串的,一些被操作过的数据(就是你按过“D”的)可以转化为
    字符,使用的命令就在“Operands”工具栏上
     
    由于编程语言的不同造成字符串也有不同的格式,当然IDA就支持所有的格式了。
    IDA在转化后会在地址添加一个名字。因为我们的程序是c的所以就找到c的字符串。具体操作如图:

    如果不是C写的程序怎么办呢?我们可以在“Options”菜单“ASCII string style”命令中设置。
    允许你修改其它类型为默认设置,使用默认设置的快捷键是“A”,或者自定义一种类型可以使用不常用的终止字符。

                                                                       TOP
    --------------------------------------------------------------------------
    第五节:数组
    在c中,ASCII字符串被认为是字符数组,IDA是如何处理数组的呢?
    我们用最常用命令来定义数组中的第一个元素,设置第一个元素类型为byte,格式为char,然后点击“*”号键(或者“Edition ”工具栏的“Array”命令)来创建数组。这时弹出一个对话框,可以设置很多变量。


    你可以定义数组一行的显示个数,还可以使用“Element width”来设置他们之间的宽度。
    使用“Use dup construct ”选项可以合并连贯的相似字节,“ Display index ”选项可以像注释一样显示数组的下标。

    例如我们设置一个有64个元素的数组,一行有8个元素,每个元素之间的宽度为4,不选取“dup constructs”,选取“Display index ”,我们就可以得到下面的数组。


    当IDA遇到未被识别的字节他会用红色的高亮显示。

    当然你也可以选择一个范围来创建数组,IDA会自适应的设定

    更多内容请在此处查看http://www.pediy.com/practise/IDA.htm


    [ 本帖最后由 zjid520 于 2010-2-23 01:40 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情

    2021-3-15 02:34
  • 签到天数: 347 天

    [LV.8]以坛为家I

    发表于 2010-2-23 09:22:56 | 显示全部楼层
    :lol: 嘿嘿,支持楼主.
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-2-23 13:25:12 | 显示全部楼层
    不错 谢谢楼主的分享
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-10-10 11:06
  • 签到天数: 24 天

    [LV.4]偶尔看看III

    发表于 2010-2-23 18:44:02 | 显示全部楼层
    十分感谢楼主分享
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表