 |
Cheat Engine The Official Site of Cheat Engine
|
| View previous topic :: View next topic |
| Author |
Message |
sonexa Newbie cheater
Reputation: 0
Joined: 19 Sep 2011 Posts: 16
|
Posted: Thu Jul 26, 2012 6:19 am Post subject: Help with Hardware Breakpoint |
|
|
here is my code:
| Code: | #include <Windows.h>
#include <TlHelp32.h>
#include <stdio.h>
const DWORD dwAddress = 0x0041C422;
const DWORD dwReturnAddress = 0x0041c428;
PVOID hVectoredExceptionHandler = NULL;
void __declspec(naked) change_text_stub(void) {
__asm {
mov eax, 0xFFFEA06F
jmp [dwReturnAddress]
}
}
LONG WINAPI ExceptionFilter(PEXCEPTION_POINTERS ExceptionInfo) {
if(ExceptionInfo->ExceptionRecord->ExceptionCode == EXCEPTION_SINGLE_STEP) {
if((DWORD)ExceptionInfo->ExceptionRecord->ExceptionAddress == dwAddress) {
PCONTEXT debug_context = ExceptionInfo->ContextRecord;
printf("Breakpoint hit\n");
debug_context->Eip = (DWORD)&change_text_stub;
debug_context->Eax = 0xFFFEA06F;
return EXCEPTION_CONTINUE_EXECUTION;
}
}
return EXCEPTION_CONTINUE_SEARCH;
}
void set_breakpoints(void) {
HANDLE hTool32 = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if(hTool32 != INVALID_HANDLE_VALUE) {
THREADENTRY32 thread_entry32;
thread_entry32.dwSize = sizeof(THREADENTRY32);
FILETIME exit_time, kernel_time, user_time;
FILETIME creation_time;
FILETIME prev_creation_time;
prev_creation_time.dwLowDateTime = 0xFFFFFFFF;
prev_creation_time.dwHighDateTime = INT_MAX;
HANDLE hMainThread = NULL;
if(Thread32First(hTool32, &thread_entry32)) {
do {
if(thread_entry32.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) + sizeof(thread_entry32.th32OwnerProcessID)
&& thread_entry32.th32OwnerProcessID == GetCurrentProcessId()
&& thread_entry32.th32ThreadID != GetCurrentThreadId()) {
HANDLE hThread = OpenThread(THREAD_SET_CONTEXT | THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION,
FALSE, thread_entry32.th32ThreadID);
GetThreadTimes(hThread, &creation_time, &exit_time, &kernel_time, &user_time);
if(CompareFileTime(&creation_time, &prev_creation_time) == -1) {
memcpy(&prev_creation_time, &creation_time, sizeof(FILETIME));
if(hMainThread != NULL)
CloseHandle(hMainThread);
hMainThread = hThread;
}
else
CloseHandle(hThread);
}
thread_entry32.dwSize = sizeof(THREADENTRY32);
} while(Thread32Next(hTool32, &thread_entry32));
(void)SetUnhandledExceptionFilter(ExceptionFilter);
CONTEXT thread_context = {CONTEXT_DEBUG_REGISTERS};
thread_context.Dr0 = dwAddress;
thread_context.Dr7 = (1 << 0);
SetThreadContext(hMainThread, &thread_context);
CloseHandle(hMainThread);
}
CloseHandle(hTool32);
}
}
int APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID reserved) {
if(reason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hModule);
if(AllocConsole()) {
freopen("CONOUT$", "w", stdout);
SetConsoleTitle(L"Console");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
set_breakpoints();
}
return TRUE;
} |
this code works, but i need inject when the process is 100% executed. why? i want hook the dll but if i hook it doesnot work
|
|
| Back to top |
|
 |
Slugsnack Grandmaster Cheater Supreme
Reputation: 71
Joined: 24 Jan 2007 Posts: 1857
|
Posted: Thu Jul 26, 2012 5:40 pm Post subject: |
|
|
| what does 100% executed mean? as far as i'm aware, the only definition of that is when the program completes and returns
|
|
| Back to top |
|
 |
Obitio Advanced Cheater
Reputation: 0
Joined: 09 Apr 2012 Posts: 68 Location: null
|
Posted: Mon Jul 30, 2012 6:31 pm Post subject: |
|
|
| Slugsnack wrote: | | what does 100% executed mean? as far as i'm aware, the only definition of that is when the program completes and returns |
I think he means when it has been fully created?I'm not sure either..
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|