反调试手段
调用函数检测方式 ---------------------------------------------------- IsDebuggerPresent(检测本进程) 检查进程环境块(PEB)中IsDebugged标志 如果没有被调试就返回0,如果调试附加了进程,函数返回非零值 CheckRemoteDebuggerPresent(检测其他进程) 这个函数和上面的函数检测的原理是一致的,但是他可以检查其他进程是否被调试,他需要一个进程句柄 NtQueryInformationProcess 此函数是Ntdll中的一个原生态的API,它用来提取一个给定的进程信息,第一个参数是进程句柄,第二个参数是想获取的进程相关的信息,如果将此参数设置为ProcessDebugPort(值为0x7),如果该程序被调试,则函数的返回值是调试端口,否则返回0 OutputDebugString 在有调试器存在和没有调试器存在时,OutputDebugString函数表现会有所不同。最明显的不同是, 如果有调试器存在,其后的GetLastError()的返回值为零。 解析:先设置一个错误码,如果函数返回失败,就会重置错误码,相反如果错误码没有变,就证明OutputDebugString返回成功,正在被调试 -----------------------------------------------