簡體   English   中英

為什么嘗試繞開Winapi時進程崩潰?

[英]Why is the process crashing when attempting to detour a winapi?

我正在嘗試使用MS彎路,但我不知道我做錯了什么。 我似乎找不到我的問題的答案。

我嘗試使用注入的DLL繞過進程中的幾個函數,但是每次嘗試都會導致進程崩潰。

我嘗試掛鈎的功能之一是winapi DirectDrawCreate:

DetourTransactionBegin();
DetourUpdateThread( GetCurrentThread() );
DetourAttach( (PVOID *)DirectDrawCreate, hkDirectDrawCreate );
DetourTransactionCommit();

hkDirectDrawCreate定義為:

HRESULT __stdcall hkDirectDrawCreate( GUID *p1, LPDIRECTDRAW *p2, IUnknown *p3 )
{
    if( !pDDC )
        return 0x00;

    printf( "A call to hkDirectDrawCreate was made\n" );

    return DirectDrawCreate( p1, p2, p3 );
}

在調用DetourAttach時,進程崩潰; 堆棧跟蹤為:

myProj.dll!detour_skip_jmp(unsigned char * pbCode, void * * ppGlobals) Line 135 C++
myProj.dll!DetourCodeFromPointer(void * pPointer, void * * ppGlobals) Line 984  C++
myProj.dll!DetourAttachEx(void * * ppPointer, void * pDetour, _DETOUR_TRAMPOLINE * * ppRealTrampoline, void * * ppRealTarget, void * * ppRealDetour) Line 1456  C++
myProj.dll!DetourAttach(void * * ppPointer, void * pDetour) Line 1395   C++

代碼在'0x68B028BD'的'detour_skip_jmp'中中斷:

// First, skip over the import vector if there is one.
    if (pbCode[0] == 0xff && pbCode[1] == 0x25) {   // jmp [imm32]
68B028B2  mov         ecx,1  
68B028B7  imul        edx,ecx,0  
68B028BA  mov         eax,dword ptr [pbCode]  
68B028BD  movzx       ecx,byte ptr [eax+edx]  
68B028C1  cmp         ecx,0FFh  
68B028C7  jne         detour_skip_jmp+82h (68B02912h)  
68B028C9  mov         edx,1  
68B028CE  shl         edx,0  
68B028D1  mov         eax,dword ptr [pbCode]  
68B028D4  movzx       ecx,byte ptr [eax+edx]  
68B028D8  cmp         ecx,25h  
68B028DB  jne         detour_skip_jmp+82h (68B02912h) 

編輯:ppGlobals為NULL,並且pbCode給出錯誤“讀取字符串的錯誤”

回到DetourCodeFromPointer ppGlobals那里也為NULL,但我想應該是這樣。 這里是電話:

 pDetour = DetourCodeFromPointer(pDetour, NULL);

毫無疑問,導入表已被移動或清理為一種防掛鈎技術。 只需在DirectDrawCreate的開頭添加一個跳轉到hkDirectDrawCreate,然后在將原始跳轉調用回DirectDrawCreate時,但是請確保它是在跳轉到鈎子之后,否則會陷入無盡的遞歸循環中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM