能力值:
( LV7,RANK:110 )
|
-
-
2 楼
时间戳-时间戳=代码执行时间,下断点一定可以看到GetTickCount。 #include <windows.h>
#ifdef _MSC_VER
void RuntimeCheckDebugger(){
static unsigned long previous_time = 0;
unsigned long pbDebuggerPresent = 0;
unsigned long runtime = GetTickCount();
if ( runtime > (previous_time + 0xEA60)){
if ( IsDebuggerPresent() ||
(CheckRemoteDebuggerPresent(GetCurrentProcess(),reinterpret_cast<PBOOL>(&pbDebuggerPresent)) == 1) &&
pbDebuggerPresent == 1 ){
GetExitCodeProcess(GetCurrentProcess(),&pbDebuggerPresent);
TerminateProcess(GetCurrentProcess(),pbDebuggerPresent);
}
previous_time = runtime;
}
}
DWORD __stdcall CheckDebuggerThread(LPVOID arg){
for(;;){
RuntimeCheckDebugger();
Sleep(100);
}
}
BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){
DisableThreadLibraryCalls(hModule);
if(ul_reason_for_call==DLL_PROCESS_ATTACH){
CloseHandle(CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)CheckDebuggerThread,NULL,0,NULL));
}
return TRUE;
}
#endif
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这个思路果然很牛B
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
DllMain里还有一处 RegCloseKey(0xFFFF0000)
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
吾爱破解的od可以
|
|
|