zoukankan      html  css  js  c++  java
  • IsDebuggerPresent原理

    一次面试的问题:你知道IsDebuggerPresent怎么实现的吗

    IsDebuggerPresent实现原理

    IsDebuggerPresent函数反汇编代码:
    mov eax,dword ptr fs:[00000018h]
    mov eax,dword ptr [eax+30h]
    movzx eax,byte ptr [eax+2]
    ret
    fs:[0]是本线程TEB的头部, fs:[18h]是一个指向自身的指针,[eax+30h]就是获得PEB的地址
    0:000> dt -b ntdll!_TEB
    +0x000 NtTib : _NT_TIB
    +0x000 ExceptionList : Ptr32
    +0x004 StackBase : Ptr32
    +0x008 StackLimit : Ptr32
    +0x00c SubSystemTib : Ptr32
    +0x010 FiberData : Ptr32
    +0x010 Version : Uint4B
    +0x014 ArbitraryUserPointer : Ptr32
    +0x018 Self : Ptr32
    +0x01c EnvironmentPointer : Ptr32
    +0x020 ClientId : _CLIENT_ID
    +0x000 UniqueProcess : Ptr32
    +0x004 UniqueThread : Ptr32
    +0x028 ActiveRpcHandle : Ptr32
    +0x02c ThreadLocalStoragePointer : Ptr32
    +0x030 ProcessEnvironmentBlock : Ptr32
    +0x034 LastErrorValue : Uint4B
    PEB结构如下,ptr [eax+2]指的是BeingDebugged的值,1为处于被调试状态,0为未处于
    0:000> dt -b ntdll!_PEB
    +0x000 InheritedAddressSpace : UChar
    +0x001 ReadImageFileExecOptions : UChar
    +0x002 BeingDebugged : UChar
    +0x003 SpareBool : UChar
    +0x004 Mutant : Ptr32
    +0x008 ImageBaseAddress : Ptr32
    +0x00c Ldr : Ptr32
    +0x010 ProcessParameters : Ptr32
     
  • 相关阅读:
    UltraEdit 注册机使用说明
    sybase 收集常用sql语句
    过渡模式
    JavaScript 钩子
    自定义过渡的类名
    CSS过渡、CSS动画
    单元素/组件的过渡
    通过 v-once 创建低开销的静态组件
    内联模板、X-Template
    程序化的时间侦听器
  • 原文地址:https://www.cnblogs.com/Archimedes/p/15035340.html
Copyright © 2011-2022 走看看