欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

有关花指令的一点小研究(二)

有关花指令的一点小研究(二)

  在上篇文章里我用call花指令实现迷惑IDA与OD。相关代码如下:

代码:
myjmp  proc

  pop  eax

  add  eax,ecx

  push  eax

  ret

myjmp  endp

start:

    mov  ecx,offset @F- $ -10

    call  myjmp

    db  '花指令乱码'

  @@:;.........正常指令继续

  那么,我们是不是可以丰富一下这个花指令,使它的欺骗性更高呢?或者加入一些指令对付动态调试?
  [思路来源]:
  1、一般破解教程告诉我们,call指令后面如果紧接着test eax,eax&jz/jnz指令,那么建议在后面两条指令下断,可以得到一些关键提示。
  2、对于一般的动态调试断点,调试器会把原指令处代码改成int 3,执行到此处时中断再恢复原指令。
  嘿嘿,有没有想到什么?!我们也可以在我们花指令后加入test/jcc指令,以达到欺骗效果。骗得跟踪者在这两条指令下断。
  中断是下了,可以怎么也等不到中断。因为程序永远也不会执行到这里。相关实现很简单:
代码:
myjmp  proc

  pop  eax

  add  eax,ecx

  push  eax

  ret

myjmp  endp

start:

    mov  ecx,offset @F- $ -10

    call  myjmp

    test  eax,eax

    jz  $+10

    db  '花指令'

  @@:;.........正常指令继续

  而这时候我们会想,既然跟踪者很可能在后面两个指令下断,那我们能不能针对这个现象反击一下跟踪者哩?
  嘿嘿,太阴险的想法了:P,答案是:可以实现。只要在myjmp里加入检测后面两条指令数据是否为0xcc(即int 3),一旦检测到。我们操纵程序流程跑飞程序!
  具体实现如下:
代码:
myjmp  proc

  pop  edx

  xor  eax,eax

  mov  al,byte ptr [edx]  ;这里开始检测后面两条指令是否为int 3

  cmp  al,0cch

  setz  al    ;这里使用了Pentinum pro的条件设置指令集以使条件判断不影响流水线。所以注意测试时的CPU是否支持。一般来说都支持啦。

  shl  eax,8

  mov  al,byte ptr [edx+1]

  cmp  al,0cch

  setz  al

  shl  eax,8

  mov  al,byte ptr [edx+2]

  cmp  al,0cch

  setz  al

  shl  eax,8

  mov  al,byte ptr [edx+3]

  cmp  al,0cch

  setz  al

  test  eax,eax

  setnz  al

  add  edx,eax  ;一旦被下断,eax必定不为0,这样,程序便会跑飞。

  add  edx,ecx

  push  edx

  ret

myjmp  endp

start:

    mov  ecx,offset @F- $ -10

    call  myjmp

    test  eax,eax

    jz  $+10

    db  '花指令垃圾'

  @@:;.........正常指令继续

  这里,请注意,加入垃圾数据后,最好自己反汇编或跟踪下,看看效果,有时候加入的垃圾数据正好结束,正常指令正好开始,还是会暴露后面的关键指令的。
  ------
  顺便提一下:其实如果仔细跟踪,破解花指令很简单,把垃圾数据都nop掉,再分析,正常指令便出来了。嘿嘿。但这需要:耐心++
  不敢藏私。赶紧拿出来分享。欢迎交流、拍砖。谢谢!

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功