zoukankan      html  css  js  c++  java
  • 反调试之Fake F8

    1.F7&F8

    两者在执行普通指令是没有什么不同的。F7和F8主要的不同在于对call指令的调用

      F8:把整条CALL指令当成一条指令来执行,当执行完call这条指令后,继续执行当前指令的下一条指令

      F7:会进到CALL指令后的地址逐个执行指令

    2.调试器如何实现

    (1)断点

    断点:让程序执行到指定位置。

    DTDebug中如何使用:选中一行指令按F2,再运行程序的话就能让程序执行到指定位置。

    设置了断点的位置,当启动时程序会执行到该位置并停止,这个同指令INT 3 。都是表示断点。

    断点的本质:

    • 指令INT 3:当CPU执行到指令INT 3时,就会停到调试器。——INT 3对应的值是 CD 03;且16进制的CC对应的值也是INT 3
      • 当我们按F7的时候,程序会一行一行的执行。因为把EFL寄存器里面有个标志位(TF位),如果把这个TF位设置1,当前CPU就会进入单步执行模式。
      • 当按F8的时候,直接在当前CALL指令下一条指令后面加一个CC。

    (2)F8反调试:

      让F8下一步指令断不下来

    步骤:

      

     当使用F8执行的时候,执行到call的那条指令时,当前call指令的下一条指令0119ECF5已经被压到的栈中,此时执行当前(0119 ED17)指令将栈指针修改成一个不存在的地址即可实现反调试

      不过这种反调试方法对F7无效

  • 相关阅读:
    FreeSWITCH第三方库(视频)的简单介绍(二)
    FreeSWITCH第三方库(音频)的简单介绍(一)
    libreoffice实现WORD文档转PDF文档
    Linux TOP命令详解
    java内存泄漏
    FreeSWITCH的传真发送
    CPU的一些参数和排名
    设计模式(九)访问者模式
    设计模式(八)状态模式
    使用PermissionsDispatcher轻松解决Android权限问题
  • 原文地址:https://www.cnblogs.com/codexlx/p/13252201.html
Copyright © 2011-2022 走看看