花指令

参考: 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花指令的更多相关文章

  1. x86汇编指令脚本虚拟机

    简介 这是一个可以直接解释执行从ida pro里面提取出来的x86汇编代码的虚拟机. 非常精简,整体架构上不能跟那些成熟的虚拟机相比,主要目标是够用.能用.轻量就行,如果觉得代码架构设计的不是很好的话 ...

  2. x86 体系指令

    FASM 第二章 - 2.1 x86 体系指令 Author: 徐艺波  From: xuyibo.org  Updated: 2008-04-17   官方论坛   本站软件反馈.软件开发交流.   ...

  3. 木马防杀 花指令 OllyDbg

    打开木马 入口地址 添加花指令 全0的地方,可以插入花指令 保存为可执行文件 随便选择几行,右击 保存文件

  4. 【Reverse】初遇花指令

    解密花指令 全文参考了一个大师傅的blog:https://blog.csdn.net/zhangmiaoping23/article/details/38400393 介绍 花指令是对抗反汇编的有效 ...

  5. 开始逆向objc基础准备(一)简单认识一下arm32,以及与x86汇编指令类比

    ARM32体系中有31或33个通用寄存器,没有特定的某种态下有r0-r15一共16个寄存器,快速中断态下有另一组r8-r12备份寄存器,在用户态和系统态之外其它态下都各自有一组r13-r14备份寄存器 ...

  6. 「译」JVM是如何使用那些你从未听过的x86魔幻指令实现String.compareTo的

    原文https://jcdav.is/2016/09/01/How-the-JVM-compares-your-strings/ 魔幻的String.compareTo 我们之前可能已经见过Java的 ...

  7. x86汇编指令详解

    80x86指令系统 80x86指令系统,指令按功能可分为以下七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处 ...

  8. x86汇编指令具体解释

    80x86指令系统 80x86指令系统,指令按功能可分为下面七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处 ...

  9. Windows x86 下的 静态代码混淆

    0x00  前言 静态反汇编之王,毫无疑问就是Ida pro,大大降低了反汇编工作的门槛,尤其是出色的“F5插件”Hex-Rays可以将汇编代码还原成类似于C语言的伪代码,大大提高了可读性.但个人觉得 ...

  10. x86指令格式

    学习于逆向工程核心原理IA-32指令章节 格式 x86指令格式 指令前缀  出现特定操作码时用作补充说明,图中的冒号前的64就是指令前缀 操作码 实际的指令,如图中的FF.89.80都是操作码 Mod ...

随机推荐

  1. 硬件设计:逻辑电平--CML

    参考资料:CML信号原理 PECL.LVDS和CML电平 常用逻辑电平及基本输入输出结构 LVDS和CML电平应用区别 CML(即Current Mode Logic,也就是电流模式逻辑)电路主要靠电 ...

  2. mac安装nodejs、npm包设置

    一.安装nodejs 1.下载自己系统的nodejs,我选择18.20版本 https://nodejs.cn/download/ 二.设置 1.设置镜像源: npm config set regis ...

  3. Asp.Net Core3.0 微信退款

    参考文档: 微信支付申请退款API文档:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_8_11.shtml   (最新更新时间:2022 ...

  4. 全面详解C语言使用cJSON解析JSON字符[转载]

    cJSON对象的实现采用了树形结构,每个对象是树的一个节点,每个节点由cJSON这个结构体组成,对象中的元素也由cJSON这个结构体组成.同一层的对象和元素是双向链表结构,由next和prev指针链接 ...

  5. 【攻防世界】catcat-new

    catcat-new 题目来源 攻防世界 NO.GFSJ1168 题解 dirsearch爆破目录,得到http://61.147.171.105:55027/admin,没有有用信息 点开主页的图片 ...

  6. (Python)用栈实现计算器的原理及实现

    前言 我们日常使用的计算器是怎么实现计算的呢?能自己判断运算符的优先级去计算,能处理括号的匹配,这些都是怎么实现的呢? 一个大家熟知的答案是用栈,好的,那么为什么要用栈?为什么栈能实现呢? 目录 前言 ...

  7. msvcp110.dll丢失修复 按我的方法来,保证修复!

    方法很简单,msvcp110.dll丢失,安装Microsoft Visual C++ 2012 Redistributable Package就可以,我把修复程序的链接放下面.链接地址: 链接:ht ...

  8. halcon 入门教程(六) 图像匹配(基于形状的模板匹配)与缺陷检测区域定位

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18783476 有兴趣可以多看其他的halcon教程 halcon 学习教程目录 本篇主要讲一下 ...

  9. Redis 持久化机制简介【Redis 系列之三】

    〇.前言 Redis 持久化主要有两种:RDB(数据快照模式).AOF(追加模式),另外就是这两种模式的混合模式用. 本文将对这三种情况进行详细介绍. 博主 Redis 相关文章都在这里了:https ...

  10. 对于 emlog pro 目前 avatar 头像不显示的问题,暂时使用这个方法解决

    avatar 头像 cdn 不稳定,目前 emlog 官方还没有放出更新包.因此,现在使用 JS 的方式暂时解决. 代码如下 <script> const avaUrl = 'https: ...