01_IDA Pro权威指南读书笔记

IDA Pro权威指南读书笔记01

反汇编简介

0x01为何反汇编(反汇编的应用)

使用反汇编工具是为了在没有源代码的情况下进行促进队程序的理解。需要进行反汇编的常见情况下包括一下集中情况。

分析恶意软件:
通常情况下,遇到恶意软件时,并不能获取其源代码,除非时基于脚本的恶意代码(即使是基于脚本的恶意代码通常情况下也会被混淆),在缺乏源代码的情况下,要了解恶意代码的运行机制,通常使用动态分析和静态分析两种方法。动态分析是指在严格的沙河环境中,并使用胸痛检测使用工具记录行为的方法,也可以通过在沙箱中使用调试器进行动态调试。静态分析是通过程序进行反汇编后,阅读反汇编后的代码来理解程序的行为。

分析闭源软件的漏洞:
漏洞分析的目的通常是漏洞利用,一般分为三个阶段,漏洞发现,漏洞分析,漏洞利用:
无论是否有源代码都可以完成这三个阶段,漏洞发现一般使用模糊测试,或者使用静态分析(需要比较大的代价),发现漏洞后对漏洞进行详细分析,复现(此过程还是需要静态分析,结合动态调试),此阶段还要完成poc编写,最后编写漏洞利用程序exploit。

分析闭源软件的互操作性:
程序破解,软件竞品分析,编写插件,辅助工具开发等。

0x02 反汇编工具的算法或者原理

反汇编的目标:确定程序中的数据和代码,将代码进行反汇编转变成汇编语言显示给用户。

算法流程:

  1. 确定反汇编的代码区域:

    通常格式,Windows的可以执行文件格式PE,Unix的可执行文件格式ELF,需要对文件格式进行解析,找到文件的代码入口处。

  2. 从代码入口处进行反汇编的指令查找,指令和二进制的对应关系从Intel手册可以找到。

  3. 获取指令并解码任何所需要的操作数后,对汇编语言进行格式化,选择那种汇编语言输出,如x86汇编语言使用的两种注意格式是Intel格式和AT&T格式。

  4. 输出一条指令后进行下一条指令,如此反复重复直到文件中需要反汇编的指令全部完成。

x86汇编语法主要有两种:AT&T和Intel
两种语法在变量,常量,寄存器,端与指令大小重写,间接寻址和便宜等方面都存在较大差异。
使用Inter语法的汇编器包括微软汇编器MASM, Borland的汇编器TASM和Netwide汇编器NASM。

反汇编的两种算法:线性扫描和递归下降
线性扫描:从识别到的代码第一个字节开始,逐步翻译直到代码结束,无法判断代码中插入的数据,数据会被当成代码被反汇编,线性扫描反汇编速度快,对于固定长度指令集更是如此。微软的WinDBG调试器和GNU调试器GDB,objdump实用反汇编引擎均使用线性扫描算法

递归下降:递归下降与线性扫描不同在于处理条件分支跳转和函数的过程中,会先对条件不满足的顺序执行和函数返回地址进行线性扫描反汇编,将满足条件的跳转和函数调用目标地址加到稍后测i进行反汇编的地址列表中。如果在跳转时一个动态的变量,寄存器值,那么静态分析无法确定要跳转的地址。也就无法确定该从什么地方进行反汇编。递归下降算法的一个主要优点在于,它具有区分代码与数据的强大能力。作为一种基于控制流的算法,它很少会在反汇编过程中错误地将数据值作为代码处理。递归下降算法的主要缺点在于,它无法处理间接代码路径,如利用指针表来查找目标地址的跳转或调用。然而,通过采用一些用于识别指向代码的指针的启发(heuristics )式方法,递归下降反汇编器能够提供所有代码,并清楚地区分代码与数据。

IDA Pro是一种典型的采用了递归下降算法的反汇编器。了解递归下降过程有助于我们识别 IDA 无法进行最佳反汇编的情形,以及制定策略来改进 IDA 的输出结果。

0x03逆向中的常见知识点:大端序与小端序

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值