x86花指令
花指令
参考: https://bbs.kanxue.com/thread-279604.htm#msg_header_h3_21
两种反编译算法
线性扫描算法:逐行反汇编(无法将数据和内容进行区分)
递归进行算法:当遇到分支指令时,会递归进入分支进行反汇编。
简单花指令--跳转
//互补
_asm{
jnz tag1;
jz tag1;
_emit 0xE8;
tag1:
}
//跳转
_asm {
push ebx;
xor ebx, ebx;
test ebx, ebx;
jnz tag1; //一定不会跳转,但是可以迷惑递归算法,**递归算法会跳转到0xE8然后解析call指令
jz tag2; //一定会跳转
tag1:
_emit 0xE8;//0xE8 是call的机器码
tag2:
pop ebx;
}
简单花指令--call,ret
用Call构造跳转容易让动态调试跟丢可以有效的恶心动态调试
//通过call跳转后将压栈的地址去除,达到jmp的效果
_asm{
call tag1;
_emit 0x83;
tag1:
sub esp, 0x8;
}
//通过操控压栈的地址改变将要跳转到地方再ret实现跳转
_asm{
call tag1;
_emit 0x83;
tag1:
add dword ptr ss : [esp] , 0x8;
ret;
__emit 0xF3;
}
通过JMP和CALL指令结合
_asm{
call LABEL9;
_emit 0xE8;
_emit 0x01;
_emit 0x00;
_emit 0x00;
_emit 0x00;
LABEL9:
push eax;
push ebx;
lea eax, dword ptr ds : [ebp - 0x0];
//将ebp的地址存放于eax
add dword ptr ss : [eax-0x50] , 26;
//该地址存放的值正好是函数返回值,
//不过该地址并不固定,根据调试所得。
//加26正好可以跳到下面的mov指令,该值也是调试计算所得
pop eax;
pop ebx;
pop eax;
jmp eax;
_emit 0xE8;
_emit 0x03;
_emit 0x00;
_emit 0x00;
_emit 0x00;
mov eax,dword ptr ss:[esp-8];
#将原本的eax值返回eax寄存器
}
其他花指令思路
1.通过当前标志寄存器状态构造花指令
2.利用函数返回固定值构造跳转条件
3.将特征码插入花指令中用于SMC自解码的搜索解密
_asm{
Jz Label
Jnz Label
_emit 'h'
_emit 'E'
_emit 'l'
_emit 'L'
_emit 'e'
_emit 'w'
_emit 'o'
_emit 'R'
_emit 'l'
_emit 'D'
Label:
}
JMP/CALL结合并且用到变量
int a = 0;
__asm {
push eax;****
xor eax, eax;
test eax, eax;
jnz LABEL1;
jz LABEL2;
LABEL1:
_emit 0xE8; //与call助记符的机器码相同
LABEL2:
mov byte ptr[a], 0;****
call LABEL3;
_emit 0xFF; //与adc助记符的字节码相同
LABEL3:
add dword ptr ss : [esp] , 8;
ret;
__emit 0x11;
mov byte ptr[a], 2;
pop eax;
}
去除花指令
1.花指令一般都是跳转形式,不管是call/ret还是jcc指令
2.一般会保存环境push和pop出现
一些花指令干扰符号
_asm{
_emit 0xE8;
_emit 0xC7;
_emit 0x21;
_emit 0xFF;
_emit 0x11;
_emit 0xF3;
_emit 0x83;
_emit 0x74;
_emit 0x50;
}
x86花指令的更多相关文章
- x86汇编指令脚本虚拟机
简介 这是一个可以直接解释执行从ida pro里面提取出来的x86汇编代码的虚拟机. 非常精简,整体架构上不能跟那些成熟的虚拟机相比,主要目标是够用.能用.轻量就行,如果觉得代码架构设计的不是很好的话 ...
- x86 体系指令
FASM 第二章 - 2.1 x86 体系指令 Author: 徐艺波 From: xuyibo.org Updated: 2008-04-17 官方论坛 本站软件反馈.软件开发交流. ...
- 木马防杀 花指令 OllyDbg
打开木马 入口地址 添加花指令 全0的地方,可以插入花指令 保存为可执行文件 随便选择几行,右击 保存文件
- 【Reverse】初遇花指令
解密花指令 全文参考了一个大师傅的blog:https://blog.csdn.net/zhangmiaoping23/article/details/38400393 介绍 花指令是对抗反汇编的有效 ...
- 开始逆向objc基础准备(一)简单认识一下arm32,以及与x86汇编指令类比
ARM32体系中有31或33个通用寄存器,没有特定的某种态下有r0-r15一共16个寄存器,快速中断态下有另一组r8-r12备份寄存器,在用户态和系统态之外其它态下都各自有一组r13-r14备份寄存器 ...
- 「译」JVM是如何使用那些你从未听过的x86魔幻指令实现String.compareTo的
原文https://jcdav.is/2016/09/01/How-the-JVM-compares-your-strings/ 魔幻的String.compareTo 我们之前可能已经见过Java的 ...
- x86汇编指令详解
80x86指令系统 80x86指令系统,指令按功能可分为以下七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处 ...
- x86汇编指令具体解释
80x86指令系统 80x86指令系统,指令按功能可分为下面七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处 ...
- Windows x86 下的 静态代码混淆
0x00 前言 静态反汇编之王,毫无疑问就是Ida pro,大大降低了反汇编工作的门槛,尤其是出色的“F5插件”Hex-Rays可以将汇编代码还原成类似于C语言的伪代码,大大提高了可读性.但个人觉得 ...
- x86指令格式
学习于逆向工程核心原理IA-32指令章节 格式 x86指令格式 指令前缀 出现特定操作码时用作补充说明,图中的冒号前的64就是指令前缀 操作码 实际的指令,如图中的FF.89.80都是操作码 Mod ...
随机推荐
- NetCore.Encrypt —— 整合加密
前言 最近呢又接触到加密了,回顾之前用到的加密经历,使用过DES.RSA.MD5.BASE64,前面也更新过两篇加密的文章,MD5加密和DES加密.之前的使用都是在.Net Framework平台,这 ...
- DeepSeek实战:3分钟学会提取网页纯文本!(含提示词)
DeepSeek实战:3分钟学会提取网页纯文本!(含提示词) | 原创作者/编辑:凯哥Java | 分类:人工智能学习系列教程 大家好,我是凯哥Java. ...
- flutter-double小数点相加,会出现小数点很多位
在我们进行两个double运算时,例如:2..0-1.1 不是想象的输出0.9,而是0.89999999999999999.其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1 ...
- LeetCode 题解大全
项目说明 LeetCode 系列题解致力于帮助程序员更好地理解和掌握算法思维,内容包含详细的解题思路分析.图文并茂的示例讲解和完整的代码实现. LeetCode 最全题解:持续更新中,欢迎 Star ...
- AI如何改变数据驱动决策的方式
导语 在这个信息爆炸的时代,数据成为了企业和组织最为宝贵的资源.然而,单纯的数据堆积并没有太大价值,只有通过分析和挖掘,才能真正发挥数据的潜力.随着AI技术的飞速发展,我们正见证着数据驱动决策方式发生 ...
- C语言中的*和&符号
之前对*和&符号一直理解的比较浅显.只知道: *p好像表示的是一个指针: &p表示的是一个地址. 然而这次当遇到了下面这个情况的时候: int a = 10; int *b = &am ...
- bin格式转safetensors
技术背景 本文主要介绍在Hugging Face上把bin格式的模型文件转为safetensors格式的模型文件,并下载到本地的方法. bin转safetensors 首先安装safetensors: ...
- mybatis - [12] 日志工厂
题记部分 001 || 日志工厂 如果一个数据库操作出现了异常,需要通过日志定位问题. 002 || Log4j Log4j是Apache的一个开源项目,通过使用Log4j,可以控制日志信息输送的目的 ...
- Spark - [04] RDD编程
题记部分 一.RDD编程模型 在 Spark 中,RDD 被表示为对象,通过对象上的方法调用来对 RDD 进行转换.经过一系列的 transformations 定义 RDD 之后,就可以调用 a ...
- 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
从 Chrome 125 开始,支持了一个全新的 CSS 特性 - Anchor Positioning,翻译过来即是锚点定位. 在之前的文章中,我们较为系统的讲述了这个新特性的使用,感兴趣的可以翻开 ...