• idapro权威指南第二版阅读笔记第五章 IDA数据显示窗口


    IDA不提供撤销操作

    大部分操作可以通过 菜单//工具栏//热键,鼠标右键实现

    5.1 IDA主要的数据显示窗口

    ESC关闭窗口

    5.1.1 反汇编窗口

    IDA-VIEW /disassembly

    空格切换列表、图形视图

    图形视图将   一个函数   分解成基本块(基本块是连续执行的指令序列,通常开头是分支指令的目标,最后一条指令是分支指令)

    IDA用 流 描述指令执行。正常流(普通流)表示默认执行连续执行,跳转流跳转(或可能跳转)到非连续位置。调用流表示调用子例程

    基本块后,红色边(no)表示不执行跳转时,绿色边yes表示执行时。(IDA是静态分析工具,只是提供不同情况时的执行,不是说真的只走yes)。只有一个后续块的用蓝色

    列表视图,完整显示程序(不像图形视图只显示一个函数)

    Options general disassembly 可以修改显示形式

    下图中,前面为虚拟地址(格式为[区域名称]:虚拟地址),2处表示IDA对函数栈帧的判断,详见第六章。

    下图中,注释表示交叉引用。详见第九章

    下图中虚线表示条件跳转,实线表示非条件跳转。加粗的,向上的线,逆向跳转,通常表示循环

     

     5.1.2 函数窗口

    在那个部分(.init)的哪个虚拟地址(80000),找到了该函数。函数长度为0x34 字节。R表示返回调用方,其他可参考IDA--HELP

     

     5.2 次要的IDA显示窗口

    5.2.1 16进制窗口

    对应IDA VIEW-A,有HEX VIEW-A。可以右键取消绑定。

    右键可以设置数据格式。

    右键Edit可以修改内容。

    通常,在绑定时,选定反汇编窗口的内容,对应的16进制窗口的字节也会高亮显示。滚动一个窗口,对应窗口也会随之调整位置。如图,光标指向0040108C,构成该地址指令的5个字节高亮显示

     

     若16进制窗口显示问好,表示无法识别。如.bss节

     5.2.2 exports

    列出文件的入口点。包括程序的执行入口点(在程序文件头部分指定),和文件导出给其他文件使用的  函数  和 变量

    通常可在共享库找到到处的函数。

    名称  虚拟地址  序数(Ordinal) 

     Export一般至少包含一个项目 start,即程序执行的入口点。标注[main entry]

    export还提供objdump -T、readelf -s、dumpin 、EXPORTS类似的功能

    5.2.3 imports

     

     显示动态链接的函数。地址为相关导入表条目的虚拟地址。

    仅显示动态加载器自动处理的符号,对dlopen/dlsym或LoadLibrary/GetProcessAddress等机制自行加载的符号不显示在此表

    5.2.4 结构体窗口

     一方面,IDA自动分析函数参数类型和使用的内存,根据签名库匹配,判断二进制文件中使用了哪种结构体。

    如图

     右键 list 可以看到具体的使用这个结构体的函数

     另一方面,可以自定义结构体,用以表示在分析过程中我们自己发现的,程序使用的结构体。在第八章详细讨论

    5.2.5 Enums

    类似Structures窗口。open-subviews

    5.3 其他IDA窗口

    5.3.1 strings窗口

    提供类似strings 的功能,每次打开都重新扫描数据库,搜索字符串并显示。右键setup 可以更改搜索的字符串的条件(比如长度、风格(windows程序常用的unicode))

    结合交叉引用可以追踪字符串、哪里引用了该字符串

    Ignore instruction definitions可以忽略数据/代码的定义,扫描全部的字符串。类似strings -a

    5.3.2 names窗口

    列举IDA识别的所有 全局名称。名称即虚拟地址的符号描述

     

     需要注意的是,IDA在反汇编过程中,会为直接作为代码(分支或调用目标)和数据(读取的、写入到、使用的地址)引用的位置生成名称。

    即将某位置命名为函数或数据。

    然而有些数据/函数已经在程序符号表命名,IDA会直接使用该表中的名称。若没有,则自动生成。自动生成的名称不会列在Names table

    自动命名的规则是类型+虚拟地址

     5.3.3 segment 段窗口

     IDA常将段(segment)称为节(section)。不要和内存分配搞混

    提供了objdump -h,readelf -s,dumpbin /headers 类似的功能

    5.3.4 Signatures 签名窗口

    IDA使用签名识别函数。如图表示使用vc32rtf签名,识别了501个函数

    右键,apply new sig 可以应用新签名,详见12章

     5.3.5 类型库type library 窗口

    见13章

     5.3.6 functions calls函数调用窗口

    谁调用,调用谁。

    IDA使用交叉引用(xrefs)生成此窗口,见第9章

    Graphs-function calls可以看见完整的调用图

    5.3.7 问题窗口

     参考IDA-HELP--Problem List

    标注分析过程中遇到的问题

    BOUNDS 无法确定调用/跳转的目标,或超出地址范围等等

    PS

    可以随时使用IDA->Help搜索查看不明白的问题、定义

    虚拟地址:与物理地址间的区别

    栈帧 程序运行时栈中分配的内存块。包含传递的函数参数和函数的局部变量。栈帧在函数入口点分配,在函数退出时释放

    交叉引用

    bss节 由编译器创建,保存程序未初始化的静态变量。在程序的文件镜像中没有为它分配空间。只需在程序的一个头文件注明大小,程序执行时,加载器为其分配空间,初始化为0

    序数 Ordinal:一些共享库(DLL)可能使用导出序数,使用户可以通过序数而非函数名访问函数。从而加快地址查询速度,隐藏函数名称

    导入表:为加载器提供空间,用于在加载所需库并获知导入函数的地址后保存导入函数的地址。一个导入表条目保存一个导入函数的地址。目前的理解是:类似于数组,程序根据所需函数访问相应条目,得到所需调用函数的真实地址。

    程序符号表

  • 相关阅读:
    Oracle Haip无法启动问题学习
    OGG-Veridata如何对比没有主键的表?
    除PerfDog之外,还有什么性能测试工具。
    test
    Android系统WiFi网络架构
    audit2allow 添加SELinux权限
    select、poll、epoll之间的区别总结
    属性问题展开的selinux权限介绍
    android property属性property_set()&& property_get() selinux权限问题
    关于网络&wifi基础内容
  • 原文地址:https://www.cnblogs.com/lqerio/p/15346929.html
Copyright © 2020-2023  润新知