0.IDA的反汇编算法方式
时间:2019-02-19
本文章向大家介绍0.IDA的反汇编算法方式,主要包括0.IDA的反汇编算法方式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.线性扫描
原理:
一条指令结束,另一条指令开始
关键:
确定起始位置
流程:
从起始,逐条反汇编指令,直到完成整个代码段
优点:
可覆盖程序的所有代码段
缺陷:
如果代码段中混有数据!
gdb windbg objdump均采用线性扫描
2.递归下降
原理:
根据一条指令是否被另一条指令引用来决定是否对其进行反汇编
顺序流指令
直接解析它后面的下一条指令,如MOV、PUSH、POP
条件分支指令
解析它的所有条件路径,如JNZ
无条件分支指令
反汇编器会尝试定位到跳转的目标,但有可能失败(如JMP EAX,EAX在静态环境下无法确认)
函数调用指令
和无条件分支指令相似,如CALL EAX
一般默认会直接反汇编CALL指令后,但如果函数中有意窜改返回地址,那就坑了,如下例子:
__declspec(naked) void fun()
{
__asm
{
inc DWORD PTR[esp] // 此时esp的内容即为返回地址,我们让它的内容加1
retn
}
}
int _tmain(int argc, _TCHAR* argv[])
{
__asm
{
call fun
inc eax // 这一句会被跳过
mov ebx,ebx
}
return 0;
}
上面就不会执行inc eax这一句,也就是inc eax这句其实不应该被反汇编的,应该直接从后一句开始,如果不是inc eax,而是一段数据呢,那就OVER了
返回指令
由于RET返回的地址实际是从栈中取得的,但反汇编器不可能访问到栈,所以就会终止
优点:
可以区别代码和数据
IDA使用的是递归遍历反汇编算法
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(73)-微信公众平台开发-消息管理
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(72)-微信公众平台开发-消息处理
- 充斥着AI生成内容的世界,你能辨别虚拟与现实吗?
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(71)-微信公众平台开发-公众号管理
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(69)-微信公众平台开发-功能概述
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(68)-微信公众平台开发- 资源环境准备
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(70)-微信公众平台开发-成为开发者
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(70)-微信公众平台开发-成为开发者
- 一口价!3杂7bc.com16万易主
- Silverlight初级教程-动画
- WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理
- [原创-总结]WCF技术剖析系列总结篇
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-WebApi与Unity注入
- 分布式高并发下mysql数据库读写分离
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- yii2 上传图片的示例代码
- DataFrame.groupby()所见的各种用法详解
- keras训练曲线,混淆矩阵,CNN层输出可视化实例
- Pandas缺失值2种处理方式代码实例
- ThinkPHP5 的简单搭建和使用详解
- PyInstaller运行原理及常用操作详解
- php使用curl模拟浏览器表单上传文件或者图片的方法
- Python轻量级web框架bottle使用方法解析
- 详解在YII2框架中使用UEditor编辑器发布文章
- 基于python和flask实现http接口过程解析
- Python xpath表达式如何实现数据处理
- Python脚本破解压缩文件口令实例教程(zipfile)
- 使用keras实现Precise, Recall, F1-socre方式
- Python Django搭建网站流程图解
- Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)