花指令_cmp指令

花指令_cmp指令本文作者:sodme本文出处:http://blog.csdn.net/sodme声明:本文能够不经作者允许随意转载、复制、引用。但不论什么对本文的引用,均须注明本文的作者、出处以及本行声明信息。可能

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

本文作者:sodme

本文出处:
http://blog.csdn.net/sodme

声明:本文能够不经作者允许随意转载、复制、引用。但不论什么对本文的引用,均须注明本文的作者、出处以及本行声明信息。

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

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

一、什么是花指令?它的原理是什么?

二、在什么地方使用花指令?怎样使用花指令?

三、怎样识别花指令?怎样去除花指令?

四、一些典型的花指令实例

什么是花指令?当然不是”flower code”,呵呵,实际上,把它依照“乱指令”来理解可能更贴切一些,它的真正英文名应该叫”thunkcode”吧(不确定,呵呵)。我们知道,汇编语言事实上就是机器指令的符号化,从某种程度上看,它仅仅是更easy理解一点的机器指令而已。每一条汇编语句,在汇编时,都会依据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实现间接跳转,当然,矛矛盾盾,仅仅是时间长点而已,世上没有绝对安全的系统。

<以上代码来源于看雪的”软件加密技术内幕”一书>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167435.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL常用命令大全(完整)

    MySQL常用命令大全(完整)打开Linux或MacOS的Terminal(终端)直接在终端中输入windows快捷键win+R,输入cmd,直接在cmd上输入1、mysql服务的启动和停止netstopmysqlnetstartmysql启动失败可按快捷键win+R,输入services.msc,找到MySQL服务器的名称启动2、登陆mysqlmysql(…

    2022年6月30日
    25
  • 几款软件加密/加壳工具的比较「建议收藏」

    几款软件加密/加壳工具的比较「建议收藏」几款.Net加密/加壳工具的比较前言使用过.NET的程序员都知道,.NET是一个巨大的跨时代进步,它开发效率高、功能强、界面观、耐用、新的语言C#已经提交为行业规范、CLR共公运行库资源丰富,这所有的特点标志着它成为主流编程语言是必然的。可是它也有一个缺点,那就是编译好的程序集可以完全反编译成源代码,这给一些不法份子提供了很好的机会,试想想,您辛苦的劳动成果就这样给了别…

    2022年4月19日
    884
  • linux 下vim删除多行「建议收藏」

    linux 下vim删除多行「建议收藏」1、按下Esc键进入命令模式2、然后输入下列命令:setnu#让当前文档内容显示行号,后面删除的时候是根据行号来删除的3、看下面例子:3,24d#敲下回车之后就会删除第3~24行的全部内容

    2022年6月15日
    135
  • Laravel-任务调度

    Laravel-任务调度

    2021年11月9日
    46
  • 支持向量机SVM、支持向量回归SVR详细推导「建议收藏」

    支持向量机SVM、支持向量回归SVR详细推导「建议收藏」文章详细介绍了支持向量机SVM及其拓展,支持向量回归SVR.并从线性分类和非线性分类的角度出发,详细推导了硬间隔、软间隔和核函数的支持向量机。

    2022年5月3日
    61
  • DOS命令Copy 合并文件

    DOS命令Copy 合并文件我们都知道DOS命令Copy的主要作用是复制文件,可是你是否知道,它还有一个作用是合并文件呢?一般情况下,它主要用于合并相同类型的文件,比如将两个文本文件合并为一个文本文件、将两个独立的MPEG视频文件合并为一个连续的视频文件等。那么,如果用它合并两个不同类型的文件,结果会怎样呢?笔者发现,巧妙地将一个文本文件合并到一个非文本文件中,可以实现隐藏秘密的作用。一起来看看吧。比如你有一段私人信息…

    2022年7月18日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号