Ja Twice das meinte ich...Sonst würde ja man immer in Kreis laufen. Nur wie machen ich das er call + 5 macht ohne inline assembly zu benutzen?
Beiträge von nxtxexoxhx
-
-
Schau dir mal die QueryPerformanceCounter in der kernel32.dll an. Er springt in die dort in die ntdll. Ist das dort nicht die ZwQueryPerformanceCounter Funktion?
Code- typedef BOOL ( NTAPI* _ZwQueryPerformanceCounter )( LARGE_INTEGER PerformanceCount, LARGE_INTEGER PerformanceFrequency );
- _ZwQueryPerformanceCounter __ZwQueryPerformanceCounter;
- BOOL NTAPI hZwQueryPerformanceCounter( LARGE_INTEGER lpPerformanceCount, LARGE_INTEGER PerformanceFrequency )
- {
- return ( *__ZwQueryPerformanceCounter )( lpPerformanceCount, PerformanceFrequency );
- }
- void Hook( )
- {
- FARPROC addr = GetProcAddress( GetModuleHandle( "ntdll.dll" ), "ZwQueryPerformanceCounter" );
- CreateDetour( ( LPVOID )addr, hZwQueryPerformanceCounter, 5 );
- }
So mal mit einen Pointer versuchen, aber ich denke, dass wenn die orgianle Funktion aufgerufen wird, dann wie in einen Rad immer rundläuft... -
Ja, warum ach nicht Ne ich war nur irritiert, da die Funktion QueryPerformanceCounter nur ein Parameter hat und die Funktion ZwQueryPerformanceCounter zwei hat und ich mich seit gestern abend frag ob der eine Parm herkommt. Ich habe die Funktion versucht zu hooken, das das Game crashed, ich weiß nicht warum...Hier ist mein Code:
Code- void hQueryPerformanceCounter( LARGE_INTEGER *lpPerformanceCount )
- {
- __asm
- {
- PUSHAD
- }
- LPMODULEENTRY32 lpsModule = GetModuleInfo( GetCurrentProcessId( ), "ntdll.dll" );
- FARPROC addr = GetProcAddress( lpsModule->hModule, "ZwQueryPerformanceCounter" );
- __asm
- {
- POPAD
- }
- __asm
- {
- MOV EDI,EDI
- PUSH EBP
- MOV EBP,ESP
- POP EBP
- JMP DWORD PTR DS:[ addr ]
- }
- }
- void Hook( )
- {
- LPMODULEENTRY32 lpsModule = GetModuleInfo( GetCurrentProcessId( ), "kernel32.dll" );
- FARPROC addr = GetProcAddress( lpsModule->hModule, "QueryPerformanceCounter" );
- CreateDetour( ( LPVOID )addr, hQueryPerformanceCounter, 5 );
- }
-
Ich habe eine Frage und zwar ob man Funktionen aus der ntdll.dll direkt callen kann?
MfG
-
-
hol die swain...ez und anivia muss man spielen können
-
Aber das er Sachen in .Net macht ist echt neu. O_o
-
lol die werden ja immer schlechter...
-
Joshi...Es gibt aber noch andere alternativer Energien die man nutzen kann. Google mal
-
Nj reversen dauert, da bleibt nur austesten
-
Nj dongdong ich weiß net ob die Idee so gut ist.
Ich weiß nicht ob mans mal testen soll auf einem Vac2 sichern Server einfach mal Noflash anzuamchen und sehen obs mit der Methode auffällt oder nicht. -
Also müsste man VirtualQuery ebenfalls umgehen um unerkannt zu bleiben. Aber gegen einen gezielten Schutz einer Funktion hilft dann nur noch reversen? Zum Beispiel ein andere Thread checkt immer die ersten 5 Bytes der Funktion.
-
man kann alles detecten nur iste es eine frage des aufwandes
Bitte keine dumme Antworten auf Fragen die man nicht versteht.
1) Ich habe danach gefragt ob es einfach geht oder nicht.
2) Ich habe noch nach dem "wie" gefragt. -
Ahh ok. Wie ist das eigentlich mit der Sicherheit von den beiden Methoden? Die mit den Breakpoint kann man einfach über GetThreadContext abfragen und somit detected. Es sein den man hookt die Funktion... Kann man diesen dann auch immer noch einfach detected?
MfG
-
Schön gemacht. Haste die Idee selbst gehabt oder von www.gamedeception.net?
-
Berechnet die cpu die hashes oder geht das über die Grafikkarte
Ich hab einen auf m pc macht auf ner gts450 ca. 380 mio hashes die sekunde
380 MILLIONEN Hashecodes die Sekunde? THIS IS A LIE! -
Nein Ich wollte einen BreakPoint auf die MessageBoxA Funktion setzten und wenn dieser ausgelöst wird ein Parameter verändern. Jedoch weiß ich nicht wie ich das mit dem UnhandlerExceptionFilter soll. Wollte versuches MessageBoxA auf diese weiße zu "hooken".
-
Hey, ich war zufällig auf der suche nach dem selben Problem.
Ich habe eine neue Funktion gemacht und in dieser meinen Breakpoint gesetzt.Code- void SetBreakPoint( )
- {
- int pid = GetProcessID( "lol.exe" );
- LPMODULEENTRY32 ModuleInfo = GetModuleInfo( ( DWORD )pid, "user32.dll" );
- __asm
- {
- mov addr, offset MessageBoxA
- }
- CONTEXT ctx = { CONTEXT_DEBUG_REGISTERS };
- ctx.Dr0 = addr;
- ctx.Dr7 = 0x000001;
- SetThreadContext( ( HANDLE )ModuleInfo->szModule, &ctx );
- }
So sieht mein UnhandlerExceptionFilter aus:
Code- LONG WINAPI __UnhandlerExceptionFilter( struct _EXCEPTION_POINTERS* ExceptionInfo )
- {
- if ( ExceptionInfo->ExceptionRecord->ExceptionCode == EXCEPTION_SINGLE_STEP )
- {
- if ( ( DWORD )ExceptionInfo->ExceptionRecord->ExceptionAddress == addr )
- {
- /* MessageBoxA
- 769BFEAE U> 8BFF MOV EDI,EDI
- 769BFEB0 55 PUSH EBP
- 769BFEB1 8BEC MOV EBP,ESP
- 769BFEB3 6A 00 PUSH 0
- 769BFEB5 FF75 14 PUSH DWORD PTR SS:[EBP+14]
- 769BFEB8 FF75 10 PUSH DWORD PTR SS:[EBP+10]
- 769BFEBB FF75 0C PUSH DWORD PTR SS:[EBP+C]
- 769BFEBE FF75 08 PUSH DWORD PTR SS:[EBP+8]
- 769BFEC1 E8 A0FFFFFF CALL USER32.MessageBoxExA
- 769BFEC6 5D POP EBP ; kernel32.750C3677
- 769BFEC7 C2 1000 RETN 10
- */
- DWORD RetAddress = ( DWORD )( ExceptionInfo->ContextRecord->Esp );
- PDWORD Arguments = ( PDWORD )( ExceptionInfo->ContextRecord->Esp + 0x4 );
- DWORD Argument[ 4 ] = { };
- memcpy( &Argument, Arguments, 4 * sizeof( DWORD ) );
- memcpy( ( char* )Argument[ 1 ], "Testing...", sizeof( DWORD ) );
- __asm
- {
- mov edi, edi
- }
- ExceptionInfo->ContextRecord->Eip += 0x2;
- return EXCEPTION_CONTINUE_EXECUTION;
- }
- }
- return EXCEPTION_CONTINUE_SEARCH;
- }
1) Ich bin mir nicht sicher ob Überhaupt UnhandlerExceptionFilter gecallt wird.
2) Ich weiß nicht ob man die neuen Args die ich gesetzt habe noch mal alle in den Stack pushen muss.Könnte mir jemand weiterhelfen?