花指令介绍

2022CTF培训(四)花指令&字符串混淆入门 逆向工程中一个常用的技巧就是通过字符串来寻找核心代码,例如通过错误提示来找到判断的相关代码、通过提示语句找到相近的功能代码、通过日志输出找到相关的功能代码等等。可见字符串对于逆向人员是一个很重要的切入点。因此,保护方使用字符串混淆技术,对静态文件中的字符串进行加密,使得直接在文件中搜索字符串无法获得信息。当程序运行时再对字符串进行解密,恢复其的可读性。静态解密指的是对解密函数进行逆向,从而直接根据解密算法和加密内容进行恢复。好处有以下几点无需执行,避免环境配置、反调试等问题。 阅读详情

本文作者:sodme
本文出处:http://blog.youkuaiyun.com/sodme
声明:本文可以不经作者同意任意转载、复制、引用。但任何对本文的引用,均须注明本文的作者、出处以及本行声明信息。

可能很多人都听说过花指令,但限于平时的开发所限,可能较少接触到。日前,跟同事讨论了一些有关花指令的问题,现将自己的体会总结一下。

这篇文章将讨论以下问题:

一、什么是花指令?它的原理是什么?
二、在什么地方使用花指令?如何使用花指令?
三、如何识别花指令?如何去除花指令?
四、一些典型的花指令实例

什么是花指令?当然不是"flower code",呵呵,实际上,把它按照“乱指令”来理解可能更贴切一些,它的真正英文名应该叫"thunkcode"吧(不确定,呵呵)。我们知道,汇编语言其实就是机器指令的符号化,从某种程度上看,它只是更容易理解一点的机器指令而已。每一条汇编语句,在汇编时,都会根据cpu特定的指令符号表将汇编指令翻译成二进制代码。而日常应用中,我们通过VC的IDE或其它如OD等反汇编、反编译软件也可以将一个二进制程序反汇编成汇编代码。机器的一般格式为:指令+数据。而反汇编的大致过程是:首先会确定指令开始的首地址,然后根据这个指令字判断是哪个汇编语句,然后再将后面的数据反汇编出来。由此,我们可以看到,在这一步的反汇编过程中存在漏洞:如果有人故意将错误的机器指令放在了错误的位置,那反汇编时,就有可能连同后面的数据一起错误地反汇编出来,这样,我们看到的就可能是一个错误的反汇编代码。这就是“花指令”,简而言之,花指令是利用了反汇编时单纯根据机器指令字来决定反汇编结果的漏洞。

先举个例子(记为A代码段):
   jz    label
   jnz  label
   db thunkcode
label:

以上是一个相当简单的花指令块,其中thunkcode是由应用者自己随便写的机器指令字,当然,你写的这个机器指令字不能是单字节指令(比如nop, clr,等),否则,你的花指字就相当于白加了。那么,你要如何来使用这段代码呢?

假设我们待加密的代码块如下(记为B代码段):
   mov ax, 8
   xor ax, 77
   ...

我们假设这B代码段是我们的加密算法所在的代码段,现在我们想要对B代码段进行保护,可以直接将A花指令块加到mov指令之前,形如:
   jz    label
   jnz  label
   db thunkcode
label:
   mov ax, 8
   xor ax, 77
   ...

其中,对于thunkcode,在实际使用时,可以使用任何一个多字节指令的机器指令字来代替,这样就会欺骗反汇编软件将它连同后面的mov指令的前边某一部分反汇编成一个多字节指令。这样,我们的目的也就达到了。

由上可以看到,使用了花指令的地方,一般都会出现这样的现象:一个跳转指令,跳转到了某条语句的中间位置,而不是这条语句的开始位置。每当出现这种情况时,我们就可以断定,这里出现了花指令。

显然地,破解它的办法,就是在那个跳转到的目的地址之前将中间的代码全部nop掉。

当然,为了加强难度,我们可以将若干个花指令结合起来使用。比如:
   jz    label
   jnz  label
   db thunkcode
label:
   jz    label2
   jnz  label2
   db thunkcode
lable2
   mov ax, 8
   xor ax, 77
   ...

也当然,针对这种情况的破解只要一层层解开它即可:我们可以先破解到以label为首字节的指令出现为止,然后再根据新的结果,破解到以label2为首字节的指令出现为止,虽然这样麻烦点,但还是不难的。

但是,如果把下面的这段代码再同其它花指令结合起来使用,可能就更复杂了:
   call    label_1
   db        thunkcode
   jmp        label_2
   db        thunkcode
label_1:  
   pop        eax
   jmp        label_3
   db        thunkcode,thunkcode,thunkcode
label_3:   
   inc        eax
   jmp      label_4
   db        thunkcode,thunkcode,thunkcode
label_4:   
   jmp        eax
   db        thunkcode
label_2:   
   ....


这里还有一段:
   call label_1
   db  thunkcode,thunkcode
   jmp  label_4
label_1:
   pop  eax
   jmp  label_2
   db  thunkcode,thunkcode
label_2:
   add  eax,2
   jmp  label_3
   db  thunkcode
label_3:
   push eax
   ret
   db  thunkcode
label_4: ....
 
为了加强难度,尽可能地用call和push实现间接跳转,当然,矛矛盾盾,只是时间长点而已,世上没有绝对安全的系统。
<以上代码来源于看雪的"软件加密技术内幕"一书>

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/zran/archive/2006/03/19/628771.aspx

花指令的原理,花指令的分析方法 在我们逆向分析的过程中,经常会受到花指令的干扰,今天我就来带领大家了解了解花指令。 阅读详情

相关推荐

OpenLayers源码解析1 Map.js

Map.js 父类:./PluggableMap/PluggableMap 引用:5个模块 ./renderer/Composite.js ./PluggableMap.js ./obj.js ./control.js(控件) ./interaction.js(交互) 主要功能:核心组件,渲染地图 必要参数: view layers target controls和interactions要是未指定,使用默认值 方法:createRenderer()? /** * @module ol/Map */ i

qq_45005996的博客 1897

花指令

本文作者:sodme本文出处:http://blog.youkuaiyun.com/sodme声明:本文可以不经作者同意任意转载、复制、引用。但任何对本文的引用,均须注明本文的作者、出处以及本行声明信息。可能很多人都听说过花指令,但限于平时的开发所限,可能较少接触到。日前,跟同事讨论了一些有关花指令的问题,现将自己的体会总结一下。这篇文章将讨论以下问题:一、什么是花指令?它的原理是什么?二、在什么地方使用花指

大宝(sodme)的专栏 5389

从理论到代码:如何用随机矩阵理论(RMT)优化你的微生物共现网络分析?

本文详细介绍了如何利用随机矩阵理论(RMT)优化微生物共现网络分析,解决传统阈值法的主观性和不稳定性问题。通过R语言实现端到端的分析流程,包括矩阵标准化、本征值谱分析和自动阈值确定,显著提升网络构建的准确性和可靠性。该方法特别适用于高通量测序数据,能自动识别噪声与真实信号的边界,为微生物组学研究提供更精确的互作网络分析工具。

weixin_29096377的博客 361

花指令wp

花指令实质就是一串垃圾指令,它与程序本身的功能无关,并不影响程序本身的逻辑。 在软件保护中,花指令被作为一种手段来增加静态分析的难度,花指令也可以被用在病毒或木马上,通过加入花指令改变程序的特征码,躲避杀软的扫描,从而达到免杀的目的,本文将介绍一些常见的花指令的形式。 花指令应该不影响动态调试,但影响静态分析 花指令一般被分为两类,被执行的和不会被执行的。 可被执行的花指令: 特点:①可以正常运行;②不改变任何寄存器的值;③反汇编器可以正确反汇编该指令 不可被执行的花指令: 特点:①不可以正常运行;②不改变

BL_zshaom的博客 302

UE4-(反射)场景采集之场景采集2D

一、场景采集分为两种:场景采集2D、场景采集立方体 场景采集2D:采集2D图片模式。 操作: 1.选择场景采集2D,是一个摄像机的物体,摆放到场景中。 2.在文件夹空白处创建纹理,一定要注意创建纹理的格式, 纹理分为立方体渲染目标和渲染目标,此处我们使用的是2D模式,所以选择渲染目标(Texture Render Target2D)。创建后重命名为RenderTextue2D。 3.选择场景中刚拖入的 SceneCapture2D 摄像机在细节面板的Scene Capture 将..

Stone的博客 4601

CodeBuddy Code CLI 常用工作流:17个实战场景全解析

CodeBuddy Code CLI 17个实战场景解析 本文详细介绍了CodeBuddy Code CLI在17个开发场景中的高效应用,包括: 快速理解新代码库 高效修复Bug 安全重构代码 使用子代理系统处理专业任务 Plan Mode安全分析 自动化测试处理 创建合并请求 文档生成与维护 图片内容分析 文件目录快速引用 每个场景都配有具体命令示例和最佳实践,帮助开发者提升工作效率。

简简单单Onlinezuozuo 1078

花指令总结

花指令又称脏字节,英文为"junkcode",顾名思义,即在程序中加入的一些垃圾指令,其目的是在不妨碍原有程序执行的前提下,阻碍程序反编译,增加静态分析难度,隐匿不想被逆向分析的代码块,混淆代码,绕过特征识别。本文将常见的花指令进行归纳总结,作学习记录。

Captain_RB的博客 7313

【Proteus仿真】基于74LS148+74LS279+74LS48的四路抢答器

【Proteus仿真】基于74LS148+74LS279+74LS48的四路抢答器

perseverance51博客 8831

CTF逆向Reverse 花指令介绍 and NSSCTF靶场入门题目复现

/(ㄒoㄒ)/~~花指令又名垃圾代码、脏字节,英文名是junk code。花指令就是在不影响程序运行的情况下,往真实代码中插入一些垃圾代码,从而影响反汇编器的正常运行;或是起到干扰逆向分析人员的静态分析,增加分析难度和分析时间。有句话,花指令的目的是阻挠逆向人员的分析,并不是阻止。

Sciurdae的博客 8021

【DRAM存储器十五】DDR介绍-关键技术之DLL和prefetch

详述DDR DLL和预取原理以及几个DDR相对初代SDRAM新增的时序参数

highman110的博客 4363

SAP_SD模块_SAP 消息号VF501(科目确定期间出错)

摘要: SAP SD模块中执行VF02销售开票时出现“科目确定期间出错”(VF501)问题,主要原因是系统无法找到匹配的总账科目。解决方案包括:检查物料主数据和客户主数据中的科目分配组是否维护,核对发票中的对应字段,并通过VKOA事务代码分析科目确定逻辑。若定价过程中配置的科目代码(如Z01)未在VKOA中完整映射(如缺少H1+S5+Z01组合),则会导致内部价格无法关联总账科目。需在SPRO路径下完善科目代码分配配置,确保定价类型与科目代码匹配。本文提供了详细的排查步骤和配置方法,帮助解决开票过账错误。

我小时候很黑的博客 353

花指令详解

逆向CTF花之令详解

m0_51246873的博客 6020

黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim...)

erase命令单位是擦除组,那么一个擦出组包含多个写块,不同写块有不同信息,主机擦除之前,必须进行确定好这些写块中的信息没有用了。所以通常erase用来擦除整个设备或分区。erase完成后,将erase的区域都要么是全0,要么是全1。那么到底是0还是1呢,根据不同的工艺有所不同,但是别担心,在ecsd[181]中会有说明到底是1还是0。erase命令的作用就是简单的将映射地址范围移动到未映射的地址范围。

黑猫奥利奥的博客 7795

逆向花指令介绍

不可以执行的花指令,这类花指令会使反编译器在反编译的时候出错,反汇编器可能错误的反汇编这些指令。因此,插入的花指令应当是一些不完整的指令,被插入的不完整指令可以是随机选择的。递归下降算法强调控制流的概念。线性扫描算法的缺点在于在冯诺依曼体系结构下,无法区分数据与代码,从而导致将代码段中嵌入的数据误解释为指令的操作码,以致最后得到错误的反汇编结果。顾名思义,可以执行的花指令,这部分垃圾代码会在程序运行的时候执行,但是执行这些指令没有任何意义,并不会改变寄存器的值,同时反汇编器也可以正常的反汇编这些指令。

c7777127_的博客 558

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

花指令保姆级教程

保姆级花指令教程。

weixin_62387234的博客 2751

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

CTF逆向基础----花指令总结

什么是花指令? 花指令实质就是一串垃圾指令,它与程序本身的功能无关,并不影响程序本身的逻辑。在软件保护中,花指令被作为一种手段来增加静态分析的难度,花指令也可以被用在病毒或木马上,通过加入花指令改变程序的特征码,躲避杀软的扫描,从而达到免杀的目的,本文将介绍一些常见的花指令的形式,花指令一般被分为两类,被执行的和不会被执行的。 不会被执行的花指令 花指令虽然被插入到了正常代码的中间,但是并不意味着它一定会得到执行,这类花指令通常形式为在代码中出现了类似数据的代码,或者IDA反汇编后为jmupout(xxxx

一位非著名不专业的Re选手 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

re 中的 花指令

花指令的认识与初解

2303_80796023的博客 493

【RE】花指令

花指令概念分享

Daphneohh的博客 2344

简单学习花指令

emit 0x01;_emit 0x00;_emit 0x00;_emit 0x00;push ebx;#将ebp的地址存放于eax​#该地址存放的值正好是函数返回值,#不过该地址并不固定,根据调试所得。#加26正好可以跳到下面的mov指令,该值也是调试计算所得​pop eax;pop ebx;pop eax;jmp eax;_emit 0xE8;_emit 0x03;_emit 0x00;

2303_79822944的博客 1059

逆向分析基础 --- 花指令实现及清除

一、基本概念 花指令:目的是干扰ida和od等软件对程序的静态分析。使这些软件无法正常反汇编出原始代码。 常用的两类反汇编算法: 1.线性扫描算法:逐行反汇编(无法将数据和内容进行区分) 2.递归行进算法:按照代码可能的执行顺序进行反汇编程序。 简单的花指令 0xe8是跳转指令,可以对线性扫描算法进行干扰,但是递归扫描算法可以正常分析。 两个跳转一个指向无效数据,一个指向正常数据来干扰递归扫描算法。 二、花指令实现 这里的实验基础代码是参考安全客上一个师傅代码进行的 //源码 #include<s

abelxu 1万+

抗去除花指令(一)——花指令基础

<br />    入门知识,高手勿读<br />一、概述<br />花指令是对抗反汇编的有效手段之一,正常代码添加了花指令之后,可以破坏静态反汇编的过程,使反汇编的结果出现错误。错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,也就很难破解程序,从而达到病毒或软件保护的目的。<br /> <br />二、花指令分类<br />[2.1]可执行式花指令<br />顾名思义,可执行式花指令指的是能够正常运行的但又不改变原始程序逻辑性的一组无用指令。这类花指令有如下特点:①可以正

蛛丝 7338

花指令如何用c语言编写,逆向学习笔记之花指令

概念花指令是企图隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法,在真实代码中插入一些垃圾代码的同时还保证原有程序的正确执行,而程序无法很好地反编译, 难以理解程序内容,达到混淆视听的效果。简单的说就是在代码中混入一些垃圾数据阻碍你的静态分析。花指令分类花指令大致可以分为可执行花指令和不可执行花指令两类:可执行花指令可执行花指令指的是这部分花指令代码在程序的正常执行过程中会被执行但执行这些代码...

weixin_39880301的博客 1296

Re 花指令学习

re花指令的简单学习

qq_44640313的博客 2709

花指令入门

原文来自看雪论坛PEdiy.com,原作者yangbostar 【其一:入门的入门】 一、概述      花指令是对抗反汇编的有效手段之一,正常代码添加了花指令之后,可以破坏静态反汇编的过程,使反汇编的结果出现错误。错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,也就很难破解程序,从而达到病毒或软件保护的目的。 二、花指令分类 [2.

紫晓暮雾的博客 9286
上一篇: createremotethread()远程注入dll
下一篇: (转)反调试技术
开发随笔
博客等级 码龄19年 6粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值