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 ...
随机推荐
- 使用iceberg-flink读取iceberg v2表
一.背景 mysql数据入湖后,有同事需要实时抽取iceberg v2表,想通过iceberg做分钟级实时数仓.目前flink社区暂不支持读取v2表.腾讯内部支持 目前只能用Oceanus内置conn ...
- 『玩转Streamlit』--会话状态管理
在Web应用开发中,会话管理是一个至关重要的概念,它能够帮助开发者追踪用户在应用中的行为和状态,从而为用户提供更加个性化.连贯且高效的交互体验. Streamlit作为一个简单而强大的用于快速构建和部 ...
- 面试必备!HR面常问的20个问题及高分回答秘诀
HR面试一般会花大约20分钟,主要会问一些个人情况.处理事情的方法.工作经验.成长经历等相关问题. 当你到了HR面,基本上就代表你的面试已经通过了一大半了.不过,还是不要掉以轻心,HR面还是有可能会挂 ...
- datax从mysql迁移数据到OceanBase
datax部署 下载datax datax下载地址 安装datax tar -zxvf datax.tar.gz 使用datax 使用配置文件 { "job": { "s ...
- 探秘Transformer系列之(7)--- embedding
探秘Transformer系列之(7)--- embedding 0x00 概要 在Transformer中,把每个 Token(对应离散的输入数据,如单词或符号)映射到高维稠密向量空间的工作是由嵌入 ...
- 读论文-顺序推荐系统_挑战、进展和前景(Sequential recommender systems_ challenges, progress and prospects)
前言 今天读的论文为一篇于2019年发表的论文,是关于顺序推荐系统(Sequential Recommender Systems,SRSs)的研究,作者对SRSs的挑战.进展和前景进行了系统综述. 要 ...
- 为什么 退出登录 或 修改密码 无法使 token 失效
前文说过 token 由 3 个部分组成:分别是 token metadata,payload,signature, 其中 signature 部分是对 payload 的加密,而 payload 当 ...
- Web前端入门第2问:前端开发是什么?与后端、全栈的区别是什么?一个完整的Web项目有哪些角色参与?
一个完整的Web项目有哪些角色参与? 提出需求(这一步可以是甲方,也可以是用户) 需求分析,画出原型图(产品经理) 根据原型图输出 UI 界面及交互图(UI/UX设计师) 根据UI及交互效果画出页面, ...
- git push解决 error src refspec master does not match anyerror
前言 git push origin master git push 时报错: error: src refspec master does not match anyerror: failed to ...
- nginx 简单实践:负载均衡【nginx 实践系列之四】
〇.前言 本文为 nginx 简单实践系列文章之三,主要简单实践了负载均衡,仅供参考. 关于 Nginx 基础,以及安装和配置详解,可以参考博主过往文章: https://www.cnblogs.co ...