花指令_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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • wxPython入门中文版 (Getting Started with wxPython)

    wxPython入门中文版 (Getting Started with wxPython)本文翻译自http://wiki.wxpython.org/Getting%20Started首先声明:本人还是个菜鸟,翻译只是为了学习,就当作记笔记了。水平有限,错误和疏漏在所难免,希望各路高手能够给予指导。而且简单查了一下,好像中文世界目前还没有完整的翻译GettingStartedwithwxPython的。wxPython入门第一个应用程序:”Hello,World!”按惯例

    2022年5月22日
    25
  • 网络功能虚拟化NFV[通俗易懂]

    网络功能虚拟化NFV[通俗易懂]1NFV简介1.1NFV的产生背景网络功能虚拟化(NFV)技术是为了解决现有专用通信设备的不足而产生的。通信行业为了追求设备的高可靠性、高性能,往往采用软件和硬件结合的专用设备来构建网络。比如专用的路由器、CDN、DPI、防火墙等设备,均为专用硬件加专用软件的架构。这些专用通信设备带来高可靠性和高性能的同时,也带来一些问题。网元是软硬件垂直一体化的封闭架构,业务开发周期长、技术创新难、扩展…

    2022年9月9日
    0
  • 使用Rational AppScan应对Web应用攻击

    使用Rational AppScan应对Web应用攻击1当前Web安全现状  互联网的发展历史也可以说是攻击与防护不断交织发展的过程。目前,全球因特网用户已达13.5亿,用户利用网络进行购物、银行转账支付和各种软件下载,企业用户更是依赖于互联网构建他们的核心业务,对此,Web安全性已经提高一个空前的高度。  然而,现实世界中,针对网站的攻击愈演愈烈,频频得手。CardSystems是美国一家专门处理信用卡交易资料的厂商。该公司

    2022年5月13日
    39
  • C#正则表达式匹配任意字符[通俗易懂]

    C#正则表达式匹配任意字符[通俗易懂]不得不说正则很强大,尤其在字符串搜索上匹配任意字符,包括汉字,换行符: [\s\S]*.

    2022年7月15日
    32
  • json离线解析格式化工具[通俗易懂]

    json离线解析格式化工具[通俗易懂]json离线解析格式化工具:当没有网络的时候,可以使用该工具实现json解析格式化。工具使用效果:

    2022年10月29日
    0
  • 嵌入式Linux移植USB网卡驱动「建议收藏」

    嵌入式Linux移植USB网卡驱动「建议收藏」硬件平台:realARM6410操作系统:fedorakernel2.6.33.3-85.fc13.i686.PAE交叉编译器:arm-none-linux-gnueabigccversion4.3.2WIFI模组:磊科NW336芯片realtek8188cus

    2022年9月24日
    0

发表回复

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

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