zoukankan      html  css  js  c++  java
  • 《恶意代码分析实战》读书笔记 静态分析高级技术一

    本书第三章是动态分析的入门,对进行动态分析最基本的工具和方法进行了简述。

    第四章 x86反汇编速成班

    1. 内存

    有四个重要的节
    
    • 数据:静态值,在程序初始加载时被放在这里,在程序运行时他们可能并不发生变化,也称全局值。
    • 代码:包含在执行程序任务时CPU所取得的指令,这些代码决定了程序做什么以及程序中任务如何协调工作。
    • 堆:为程序执行期间需要的动态内存准备的,用于创建(分配)/消除值。
    • 栈:用于函数的局部变量和参数,以及控制执行流。

    2. 寄存器

    (1)通用寄存器

    • 数据寄存器
      • AX (Accumulator):累加寄存器
      • BX (Base):基地址寄存器
      • CX (Count):计数器寄存器
      • DX (Data):数据寄存器
    • 指针寄存器
      • SP (Stack Pointer):堆栈指针寄存器
      • BP (Base Pointer):基指针寄存器
    • 变址寄存器
      • SI (Source Index):源变址寄存器
      • DI (Destination Index):目的变址寄存器

    (2)段寄存器

    • CS (Code Segment):代码段寄存器
    • DS (Data Segment):数据段寄存器
    • SS (Stack Segment):堆栈段寄存器
    • ES (Extra Segment):附加段寄存器

    (3)控制寄存器

    • EIP指针:保存了程序要执行的下一条指令在内存中的地址,唯一作用就是告诉处理器接下来到那里去读取指令。
    • 当eip被破坏,指向了一个不包含合法程序代码的内存地址时,CPU无法取得一条合法指令来执行,即控制了eip就控制流CPU要执行什么。
    • 通常攻击者先要使攻击代码进入内存,然后改变eip使其指向攻击代码,从而实现目的。

    3. 汇编指令与C语言主函数和偏移


    第五章 IDA Pro

    1. 加载程序

    • 一般:以x86架构、PE格式文件加载。
    • 特殊:将文件作为一个原始二进制文件进行反汇编。有些恶意代码带有shellcode、其它数据、加密参数,甚至在合法的PE文件中带有可执行文件,并且当包含这些附加数据的恶意代码在Windows上加载到IDA中时,它并不会被加载到内存中。
    • PE文件被编译加载到内存中一个首选的地址,若无法加载,加载器执行一个基地址重定向的操作。
    • 在默认情况下,IDA的反汇编代码中不包含PE头或资源节。

    2. 常用窗口

    (1)反汇编窗口

    两种模式:图形模式、文本模式。
    转换:空格键
    
    • 图形模式
      • 箭头颜色
        • 红色:条件跳转没有被采用
        • 绿色:条件跳转被采用
        • 蓝色:无条件跳转被采用
      • 箭头方向
        • 显示程序流程
        • 向上的箭头表示一个循环条件
    • 文本模式
      • 显示内存地址和节名
      • 左侧显示箭头窗口:显示程序的非线性流程
        • 实线:无条件跳转
        • 虚线:标记条件跳转
        • 向上箭头:表示一个循环

    (2)默认视图

    IDA Pro功能丰富,以至于在一些操作之后会无法浏览,需要返回默认视图。
    
    • 返回默认视图:Windows->Reset Desktop
    • 保存修改后窗口视图:Windows->Save Desktop

    (3)导航

    • 使用反汇编窗口内的链接,可以显示目标的位置。
    • 常见链接类型:
      • 子链接:函数开始的链接
      • 本地链接:跳转指令目的地址的链接
      • 偏移链接:内存偏移的链接
    • 浏览历史可以切换跳转视图。
    • 导航栏:用颜色表示被加载到二进制地址空间的线性视图
      • 浅蓝色:被FLIRT识别的库代码
      • 红色:编译器生成的代码
      • 深蓝色:用户编写的代码
    • 跳转位置
      • 跳转到任意虚拟内存地址:快捷键G
      • 跳转到原始的文件偏移:Jump->Jump to File Offset

    (4)搜索

    • Search->Next Code:移动光标到包含你所指定的指令的下一位置。
    • Search->Text:在整个反汇编窗口中搜索一个指定的字符串。
    • Search->Sequence of Bytes:在十六进制视图窗口中对一个特定字节序执行二进制搜索。

    3. 交叉引用

    在IDA中,Xrefs可以展示出一个函数在何处被调用,或者一个字符串被使用。
    
    • 代码交叉引用:在函数上使用快捷键X,打开函数被调用位置,双击转到反汇编窗口中对应的代码。
    • 数据交叉引用:用于跟踪一个二进制文件中的数据访问。在注释中,会显示DATA XREF,告诉数据交叉引用的位置。

    4. 分析函数

    IDA Pro最强大的功能就是识别函数、标记函数,并且划分出局部变量和参数。
    
    • 局部变量:以var_作为前缀标记,在相对EBP负偏移量的位置。
    • 参数:以arg_作为前缀标记,在相对EBP正偏移量的位置。
    • 将局部变量和参数用相对EBP的偏移量作为后缀来进行命名。

    5. 图形化选项

    • Function calls:显示所有的函数调用
    • Xrefs to:查看哪些函数调用了这个函数
    • Xrefs from:查看这个函数调用了那些函数
    • User Xrefs chart:可以让用户选择显示内容

    6. 增强反汇编

    这一部分的目的就是让反汇编代码阅读性更强,使我们更能更好的分析程序。
    
    • 可以通过修改IDA中的反汇编方便分析一个二进制文件。注意,IDA没有撤销功能,修改需慎重。
    • 重命名位置:根据实际功能取代系统自动的命名
    • 使用命名的常量:Use Standard Symbolic Constant打开标准符号常量窗口,可以选择相关的常量来使代码更有意义。

    7. 用插件扩展IDA

    • 扩展IDA功能,加快分析速度

    8. 实践

  • 相关阅读:
    poj2823单调队列认知
    有关二叉树的三序遍历的题目
    hdu4757 可持续字典树
    ZOJ2532判断边是否是割集中的边
    poj2455 k条路最小化最长边
    乘法逆元模板
    poj1699 KMP+壮压DP
    Innodb存储引擎——非聚集索引
    java集合框架笔记
    jvm垃圾回收
  • 原文地址:https://www.cnblogs.com/hyq20135317/p/5538086.html
Copyright © 2011-2022 走看看