反汇编与二进制分析的一些基本知识

本文介绍了反汇编的基本概念和工具,包括线性反汇编和递归反汇编的原理及挑战。通过示例展示了静态和动态反汇编在实际操作中的应用,强调了它们在面对恶意程序分析时的局限性,指出静态和动态分析结合的重要性。
摘要由CSDN通过智能技术生成

在程序届有一句名言:如果你能读懂汇编,一切程序对你来说就是开源。所以要抵达黑客层次,不熟练的掌握反汇编分析技巧那是不可能的。本节我们看看一些反汇编的工具和相关技巧,后续我们再看看一些高级方法该怎么用。

常用的反汇编工具一般需要执行三个步骤,1,加载要反汇编的二进制文件;2,从二进制文件中找到所有机器指令;3,将指令转换为汇编语句;通常第2步是一个难点,由于机器指令与通常的二进制数值无异,因此很容易把不是指令的数值认为是机器指令。为了尽可能降低步骤2的错误,反汇编算法常采用两种模式,分别是线性反汇编和递归反汇编。

线性反汇编其实就是从头走到尾,将所有二进制数值都认为是机器指令,然后将其转换为汇编语句,我们常用的Objdum就是如此。这当然会产生问题,很显然不可能所有二进制数值都是机器指令,因此这种做法容易将原本是数据的数值看做是指令。由此会带来两种错误,一种是将数值转换成无效机器指令,一种更糟糕,数值正好对应了某条机器指令,于是给后面的分析带来巨大的干扰,如下图所示:
在这里插入图片描述
左边是正确的反汇编,其中前4字节是数据,如果将前4字节看成指令那就好把他们认为是mov, pop这种指令,由于解读错误,接下来又产生了一系列错误指令,例如接下来的add, mov,最可怕的是错误反汇编的add指令其实是将数据和指令混合在了一起,这样的话就严重影响了后续指令的解读。

最右边的指令对应反汇编从字节20开始视作指令,于是把4字节数据中的后4节

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值