基本反汇编算法

  • 在机器码中 数据与代码都是相同的二进制数字,你无法判断那些数据是代码 那些数据是数据
  • 反汇编文件都有自己的文件格式,window下的pe文件,liunx下的eldf文件,这些类型文件含有一种机制就可以用来确定文件中包含的代码和代码入口点,通常表现为层级文件头的形式

    线性扫描反汇编

  • 确定反汇编指令位置的方式:一条指令结束,另一条指令开示的地方
    1. 确定起始位置最为困难:扫描被程序文件标注为代码的节所包含的全部的机器指令,线性扫描完整个代码段
    2. 线性扫描并不会识别分支等非线性指令来了解程序的控制流
  • 优点:完全覆盖程序的所有代码段
  • 缺点:无法考虑到代码中混杂的数据

    递归下降反汇编

  • 强调控制流的概念:控制流根据一条指令是否被另一条指令引用来决定是否对其进行反汇编

根据指令对指针过的影响来分类:

  1. 顺序流:将执行权传递给紧随其后的下一条指令
  2. 条件分支:条件真假影响执行路径,若不跳装则以线性模式执行指令,并以线性模式扫描下一条汇编指令,但是在静态环境中是无返判断条件判的结果,因此递归下降会同时反汇编这两条指令,并将分支目标指令的地址添加到稍后才进行反汇编的地址列表,推迟它的反汇编过程
  3. 无条件分支:执行权传给一条指令,但这条指令可以在任何位置,然后也没啥理由反汇编紧跟在无条件分支后面的指令
  4. 函数调用指令:

原文地址:https://www.cnblogs.com/Alex3O/p/12432454.html

时间: 2024-10-15 02:23:39

基本反汇编算法的相关文章

反汇编基本算法

确定进行反汇编代码区域,这并不像那么简单.通常,指令与数据混杂在一起,区分它们就显得非常重要.反汇编可执行文件:该文件必须符合可执行文件的某种通用格式,如Windows所使用的可移植可执行(Portable Executable, PE)格式或许多Unix系统常用的可执行和链接格式(ELF). 知道指令的起始地址后,下一步就是读该地址(或文件偏移量)所包含的值,并执行一次表查找,将二进制操作码的值与它的汇编语言助记符对应起来.根据被反汇编的指令集的复杂程度,这个过程可能非常简单,也可能需要几个额

基于ARM处理器的反汇编器软件简单设计及实现

写在前面 2012年写的,仅供参考 反汇编的目的 缺乏某些必要的说明资料的情况下, 想获得某些软件系统的源代码.设计思想及理念, 以便复制, 改造.移植和发展: 从源码上对软件的可靠性和安全性进行验证,对那些直接与CPU 相关的目标代码进行安全性分析: 涉及的主要内容 分析ARM处理器指令的特点,以及编译以后可执行的二进制文件代码的特征: 将二进制机器代码经过指令和数据分开模块的加工处理: 分解标识出指令代码和数据代码: 然后将指令代码反汇编并加工成易于阅读的汇编指令形式的文件: 下面给出个示例

IDA.Pro权威指南 读书笔记

http://www.pediy.com/kssd/pediy12/142766.html 标 题:IDA.Pro权威指南 读书笔记[Made By C_lemon] 作 者:Dstlemoner 时 间:2011-11-14 11:56:17 链 接:http://bbs.pediy.com/showthread.php?t=142766    IDA为反汇编 和逆向破解的 静态分析利器 ! 虽然是利器,但是你不会用的话~那就另当别论了. →     唉.对于刚入门的新手来说,看前人走过的路程

IDA使用初探-1.启动IDA

在传统的软件开发模型中,通过编译器.汇编器和链接器中的一个或几个创建可执行程序.为了回溯编程过程(对程序进行逆向工程),使用各种工具撤销汇编和编译过程,这些工具就叫做反汇编器和反编译器.反汇编器撤销汇编过程,可以得到汇编语言形式的输出结果:反编译器则以汇编语言甚至是机器语言作为输入,将高级语言结果输出. 但是反编译有几点困难至今还没有完美解决:编译过程造成损失:编译属于多对多操作:反编译非常依赖语言和库. 反汇编算法:线性扫描(linear sweep)和递归下降(recursive desce

恶意代码分析实战

恶意代码分析实战(最权威的恶意代码分析指南,理论实践分析并重,业内人手一册的宝典) [美]Michael Sikorski(迈克尔.斯科尔斯基), Andrew Honig(安德鲁.哈尼克)著   <恶意代码分析实战>是一本内容全面的恶意代码分析技术指南,其内容兼顾理论,重在实践,从不同方面为读者讲解恶意代码分析的实用技术方法. <恶意代码分析实战>分为21章,覆盖恶意代码行为.恶意代码静态分析方法.恶意代码动态分析方法.恶意代码对抗与反对抗方法等,并包含了 shellcode分析

逆向工程部分

六.逆向工程 (一)对抗反汇编 1.反汇编算法: (1)线性反汇编算法: 遍历代码段,一次一条指令的先行反汇编,用已经反汇编的指令大小来决定下一个要反汇编的字节,而不考虑代码流的控制指令. 不能区分代码与数据,最容易被恶意代码挫败 (2)面向代码流的反汇编算法: 检查每一条指令,然后建立一个需要反汇编的地址列表,而不是盲目的反汇编整个缓冲区,也不假设代码段中仅包含指令而不包含数据 2.对抗反汇编技术 (1)相同目标的跳转指令 使用指向同一目的地址的两个连续条件跳转指令,如: jz  loc_00

Windows x86 下的 静态代码混淆

0x00  前言 静态反汇编之王,毫无疑问就是Ida pro,大大降低了反汇编工作的门槛,尤其是出色的“F5插件”Hex-Rays可以将汇编代码还原成类似于C语言的伪代码,大大提高了可读性.但个人觉得“F5插件”只能作为一项辅助手段,在结合动态调试和静态分析之后,了解了整个函数的流程再利用F5看“C语言”代码才是最佳的手段.而这篇文章就是学习如何手写”花指令“,来干扰ida的静态分析和”F5插件“. 0x01 反汇编引擎 反汇编引擎就是将二进制程序翻译成了汇编的工具.主流的反汇编算法主要是两种:

AACOS:基于编译器和操作系统内核的算法设计与实现

AACOS:基于编译器和操作系统内核的算法设计与实现 [计算机科学技术] 谢晓啸 湖北省沙市中学 [关键词]: 编译原理,操作系统内核实现,算法与数据结构,算法优化 0.索引 1.引论 1.1研究内容 1.2研究目的 1.3研究提要 正文 2.1研究方法 2.2编译器部分 2.2.1从计算器程序中得到的编译器制作启示 2.2.2在编译器中其它具体代码的实现 2.2.3编译器中栈的高级应用 2.2.3编译器中树的高级应用 2.2.4编译器与有限状态机 2.3操作系统内核部分 2.3.1操作系统与底

[反汇编练习] 160个CrackMe之020

[反汇编练习] 160个CrackMe之020. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大