• 《IDA Pro 权威指南》学习


    在学习0day时,发现ida的知识没有跟上,所以此处进行相关IDA的基础学习。

    X86汇编语法:

        AT&T:%前缀,&文字常量前缀

        Intel语法:源操作数位于右边,目的操作数位于左边。使用Interl语法。

    反汇编:

        线性扫描反汇编:GUN,WinDbg,OBJdump

        递归下降:

            最典型 IDA Pro

           1.顺序流指令 2.条件分支指令 3.无条件分支指令 4.函数调用指令 5.返回指令

    二 逆向与反汇编工具

    摘要工具:

    nm:声明的函数与全局变量名称

    ldd:所需动态库

    objdump:

    otool:

    c++filt:

    深度检测工具:

    strings:

       仅扫描文件中可加载、初始化后的部分, 使用-a 强制strings扫描整个文件

       strings 不指出字符串在文件中位置,-t 参数 显示所发现的每一个字符串的文件偏移量信息。

       -e 搜索更广泛的字符,如16位Unicode字符。

    反汇编器

        x86指令集反汇编器:流式反汇编器ndsasm,distorm

    IDA支持资源

        正式帮助文档、Hex-Rays支持页面论团,openRCE.org,RCE论坛,IDA Palace、llfak博客(为什么这里会点名这个博客呢)

    IDA目录结构

        cfg:配置文件

        idc:IDA内置脚本语言IDC所需核心文件

        ids:

        loaders:

        plugins:插件

        procs:

        sig:

        til:类型库信息

    目前不清楚这些是否重要,看后面的实战利用吧

    IDA 入门

    启动 IDA:
    这个没什么好演示的,,,

    IDA数据库文件:

    .ido:二叉树形式的数据库

    .id1:包含描述整个程序字节的标记

    .nam:与IDA的Names窗口中显示给定程序位置有关的索引信息

    .til:存储与一个给定数据库的本地类型定义有关的信息。- -?

    IDA桌面

    IDA数据显示窗口

    IDA主要数据显示窗口

      反汇编窗口:IDA-View

        IDA图形视图,IDA文本视图

      函数窗口:

      输出窗口:

    次要的IDA显示窗口

      十六进制窗口

      导出窗口

      导入窗口

      结构体窗口

      枚举窗口

    其他IDA显示窗口

      Strings窗口:与交叉引用结合

      Names窗口:文件中所有全局名称(F,常规函数。L,库函数。I,导入的名称。C,命名代码。D,数据。A,字符串数据)

      段窗口

      签名窗口

      类型库窗口

      函数调用窗口

      问题窗口

    反汇编导航:
      基本IDA导航

        双击导航:双击跳转····

        跳转到地址:Jump -> Jump to Address ,快捷键G

        导航历史记录:Jump-> Jump to Previous Position 向后退,可按ESC(反汇编窗口)

        Jump -> Jump to Next Position 向前进,CTRL+ENTER

        栈帧:基本概念

        调用约定:C调用约定,从右至左。stdcall调用约定,从右至左,函数结束执行时,由被帝欧用的函数负责删除栈中的函数参数。x86 fastcall约定:stdcall辩题,传递给函数的前两个参数分别位于ECX,EDX寄存器中;从右至左;返回调用方时,fastcall函数负责从栈中删除参数。c++调用约定:this指针;其他调用约定:blabala

        局部变量布局

        栈帧示例

      

    void bar(int j,int k);
    void demo_stckframe(int a,int b,int c){
          int x;
          char buffer[64];
          int y;
          int z;
          bar(z,y);    
    }

        sub esp,76 //配置栈帧

        调用 bar

        push dword [esp+4]

        push dword [esp+4]//说明eap一直在变化

        call bar

        add esp,8

        从栈顶删除局部变量:

        add esp,76 //栈指针指向所保存的返回地址

        ret//弹出所需返回地址,插入指针寄存器(此处为eip)

        了解使用专用帧指针:

        push ebp//保存当前调用方使用的EBP的值

        mov ebp,esp //栈指针当前值赋值到ebp

        sub  esp,76//局部变量在此处分配

        正偏移量用于访问函数参数,负偏移量用于访问局部变量

        对函数bar的调用如下

        push dword [ebp-72]  ;push y

        push dword [ebp-76]  ;push z

        call bar

        add esp,8         ;cdec1 requires caller to clear parameters

        每次返回前,恢复调用方的帧指针

      下次从这里开始

      IDA栈视图

        摘要视图,详细视图

        局部变量:被保存的返回地址之上,函数参数位于北保存的返回地址之下。

    局部变量:var_为前缀,后接表示变量与被保存的帧指针之间距离的十六进制后缀。

    函数参数名以arg_为前缀,后接表示其与最顶端参数之间相对距离的十六进制后缀。

    void demo_stackframe(int a,int b,int c)
    {
        int x=c;
        char buffer[64];
        int y=b;
        int z=10;
        buffer[0]='A';
        bar(x,y);
    }

    x = c, y = b, z的初始值常量为10。这里想说的是,程序请求的堆和栈。编译器过后会增大这个请求。如果作为一名漏洞挖掘者,你需要大过编译器请求的空间,才会引发漏洞。

      搜索数据库

        文本搜索:

        Search->Text (ALT+T)  CTRL+T或Search->Next Text命令可重复前一项搜索

        二进制搜索

        Search->Sequence of Bytes(ALT+B)

        搜索如:CA FE BA BE

        搜索内嵌的字符串数据,需将搜索字符串用引号括起来

        Unicode Strings 选项可搜索字符串的Unicode版本。

        "完全匹配" 需要使用Case-sensitive选项

        CTRL+B或Search->Next Sequence of Bytes可搜索随后的二进制数据

     反汇编操作

      名称与命名

        参数和局部变量

        已命名的位置

        寄存器名称

      IDA中的注释

        常规注释

        可重复注释

        在前注释和在后注释

        函数注释

      基本代码转换

        代码显示选项

        格式化指令操作数

        操纵函数

        数据与代码互换转换

      基本数据转换

        指定数据大小

        处理字符串

        指定数组

    数据类型与数据结构

      识别数据结构的用法

        数组成员访问

        结构体成员访问

      创建IDA结构体

        创建一个新的结构体

        编辑结构体成员

        用栈帧作为专用结构体

      使用结构体模板

      导入新的结构体

        解析C结构体声明

        解析C头文件

      使用标准结构体

      IDA TIL文件

        加载新的TIL文件

        共享TIL文件

      C++逆向工程基础

        this指针

        虚函数和虚表

        对象生命周期

        名称改编

        运行时类型识别

        继承关系

        C++逆向工程参考文献

    交叉引用与绘图功能

      交叉引用

        数据交叉引用

        交叉引用列表

        函数调用

      IDA绘图

    IDA的多种面孔

      控制台模式IDA

        控制台模式的共同特性

        Windows控制台

        linux控制台

        OS X控制台

      使用IDA的批量模式

  • 相关阅读:
    行为型模式之 命令模式
    结构型模式之 代理模式
    oop编程思想
    2013应届毕业生各大IT公司待遇整理汇总篇(转)
    python定义class
    python——博客园首页信息提取与分析(转载有改动)
    深入浅出TCP/IP协议
    python基础之socket
    python基础
    c++stl之stack
  • 原文地址:https://www.cnblogs.com/Ccmr/p/7406340.html
Copyright © 2020-2023  润新知