[求助]关于VEH +DLL注入 躲避运行CRC检测遇到的问题
发表于:
2017-6-10 17:49
9684
[求助]关于VEH +DLL注入 躲避运行CRC检测遇到的问题
通过全局键盘勾子注入
使用ul_reason_for_call 设置硬件断点,运行有几个问题,请教各位大神
程序在X64位系统下可以正常断下来并进到VEH异常处理函数中,但在32系统断不下来,怎么也进不到VEH异常处理
不知道问题出在什么地方
注入的程序在运行时会 新创建5个线程,利用DLL的DLL_THREAD_ATTACH对其进行设硬件断点,64位正常,32位不正常
DLL文件源码
/
/键盘勾子回调函数
LRESULT CALLBACK Gameproc(
int code,
WPARAM wParam,
LPARAM lParam
)
{
return CallNextHookEx(0,code,wParam,lParam);
}
//安装勾子的函数
__declspec(dllexport) void SetHook(HWND hwnd)
{
DWORD ThreadID = GetWindowThreadProcessId(hwnd,NULL);
SetWindowsHookEx(WH_KEYBOARD,&Gameproc,GetModuleHandle(TEXT("02HOOKDLL.dll")),ThreadID);
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
CONTEXT dst_context ={ CONTEXT_DEBUG_REGISTERS };//设置flag
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBox(NULL, TEXT("注入成功"), TEXT("(^_^)"), MB_ICONINFORMATION);
addvehhandle();
setHwBreakpoint();
break;
case DLL_THREAD_ATTACH:
setHwBreakpoint();
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
/////////////////////////////////////////////2
void setHwBreakpoint()
{//设置硬断
HANDLE hthrad;
CONTEXT dst_context ={ CONTEXT_DEBUG_REGISTERS };//设置flag
hthrad = OpenThread(THREAD_ALL_ACCESS,false,GetCurrentThreadId());
if (hthrad!=NULL)
{
GetThreadContext(hthrad,&dst_context);//获取线程环境(上下文)
dst_context.Dr0=0x004AD99B;//这里是HOOK地址
dst_context.Dr1=0x004AD99B;
dst_context.Dr2=0x004AD99B;
dst_context.Dr3=0x004AD99B;
dst_context.Dr7=0x405;
MessageBox(NULL, TEXT("断点成功了"), TEXT("(^_^)"), MB_ICONINFORMATION);
SetThreadContext(hthrad,&dst_context);//设置上下文
}
CloseHandle(hthrad);
}
DWORD NTAPI ExceptionHandler(EXCEPTION_POINTERS * exceptioninfo)
{//异常处理函数
if (exceptioninfo->ExceptionRecord->ExceptionAddress==(PVOID)0x004AD99B)
{
MessageBox(NULL, TEXT("成功触发异常"), TEXT("(^_^)"), MB_ICONINFORMATION);
exceptioninfo->ContextRecord->Eip=0x006d31E4;//设置EIP跳转
return EXCEPTION_CONTINUE_EXECUTION;
}
else
{
exceptioninfo->ContextRecord->Dr0=0x004AD99B;//不是就重新设置断点 //防止XX
exceptioninfo->ContextRecord->Dr7=0x405;
return EXCEPTION_CONTINUE_SEARCH;
}
return EXCEPTION_CONTINUE_SEARCH;
}
void addvehhandle()
{
PVOID a = NULL;
a = AddVectoredExceptionHandler(1,(PVECTORED_EXCEPTION_HANDLER)ExceptionHandler);//添加VEH异常处理
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)