反汇编

反汇编?

反汇编?

What

首先介绍下编程语言的发展:机器语言(010101110001011001这种)——汇编语言——第三代语言(通过编译器转换成计算机能执行的样式)

所谓汇编,就是写出汇编程序,翻译成计算机能执行的样式,计算机就可以顺利执行。

反汇编,就是听听计算机在说什么“1101010100010……”然后我们用自己的语言,高级一点的,翻译过来。

Why

这样做,是为了分析病毒,分析软件漏洞,当然计算机一运行,都是0101011101010001010010,不可能有高级语言源程序供你研究。只能自己翻译了研究。

How

IDA Pro(静态分析)业界领头软件。

Ollydbg(动态分析)

动态分析和静态分析恶意软件:

一个是把僵尸关起来,做各种实验,看看僵尸的反应。

一个是把僵尸固定,放在解剖床上,切开来看构造。

反汇编的难点

:就像传话游戏一样,同样一句话,经过传递,最终那句话已经不是原来的样子了。所以,源代码变成汇编语言,之后汇编语言变成源代码,不会跟原来的一模一样(因为有些东西是方便人类理解的,而计算机不需要,那部分内容会被计算机舍弃)。而且现在有第三代高级语言,又跟编译器打上交道,那么不同的编译器又会影响 编译成汇编代码的结果。

反汇编器的反汇编算法

:反汇编器要解决的问题有,01010111101011100010110011

01011100010110011010111000101100110101110001011001101011100010110011010111000101100110101110

如何区分里面的数据和指令?当然,特定平台有固有的格式,例如寄信的时候,寄信人地址和收信人地址可不能写反了。

根据格式,我们可以将数据和指令对号入座,以此区分开。

可能遇到的问题:假如格式不知道,或者二进制代码不完全符合格式要求,那么就会出现一些错误。

windows:可移植可执行格式 Unix:可执行和链接格式

第二步,找到指令起始地址,进行表查找,将包含指令的地址转换为对应的汇编代码。

第三步,将汇编代码整理整理,用AT&T或者Intel格式输出。