Ich stehe gerade vor einem mir unerklärlichem Problem.
Bis gerade eben dachte ich noch es liegt an meiner Unfähigkeit mit Detorus umzugehen bzw. meinen Reversing Künsten, aber jetzt ist mir aufgefallen, dass es scheinbar gar nicht direkt an den Detour-Funktionen liegt, sondern an meiner Dll.
Um das ganze ein bisschen genauer zu beschreiben:
Ich wollte endlich mal mit dem Thema Detours anfangen, klingt auch alles soweit logisch und ich glaube auch es verstanden zu haben. Also habe ich mir nach einem Tutorial von "xNopex" ([Only registered and activated users can see links. Click Here To Register...]) eine Opferanwendung geschrieben (wie beschrieben).
Dann habe ich WinInject genommen und einen selbstgemachten und dann noch einen selbstkopierten Injector. Alle sagen mir, dass die Dll erfolgreich injeziert wurde und meine Dll wird auch als Modul aufgeführt in der Exe, aber komischerweise wird sie nicht ausgeführt:
Dll:
Meine Exe:
Meine gefundene Stelle in der Exe für die Funktion:
[Only registered and activated users can see links. Click Here To Register...]
Ich muss vielleicht noch anmerken, dass mir OLLY folgende Warnung gibt, wenn ich versuche die Exe zu disassemblen:
[Only registered and activated users can see links. Click Here To Register...]
Und wenn ich jetzt die Dll in diesen Prozess injiziere, passiert nichts, wirklich gar nichts, es wird nicht einmal die MessageBox am Anfang gezeigt, aber das sollte sie ja eigentlich auf jeden Fall:
Als Compiler wurde GCC verwendet (müsste der bei Code::Blocks mitgelieferte sein).
So und jetzt meine Frage:
Wieso passiert da nix? :D
Edit:
Keine Ahnung obs hilft, aber ich benutze Win XP SP 3, 32Bit.
Edit2:
Habe versucht dieselbe Dll mal in Opera.exe zu injecten, in Notepad, in Wordpad, usw.
und das Ergebnis ist dasselbe, nämlich es passiert nichts, also was ist mit dieser Dll los?
Bis gerade eben dachte ich noch es liegt an meiner Unfähigkeit mit Detorus umzugehen bzw. meinen Reversing Künsten, aber jetzt ist mir aufgefallen, dass es scheinbar gar nicht direkt an den Detour-Funktionen liegt, sondern an meiner Dll.
Um das ganze ein bisschen genauer zu beschreiben:
Ich wollte endlich mal mit dem Thema Detours anfangen, klingt auch alles soweit logisch und ich glaube auch es verstanden zu haben. Also habe ich mir nach einem Tutorial von "xNopex" ([Only registered and activated users can see links. Click Here To Register...]) eine Opferanwendung geschrieben (wie beschrieben).
Dann habe ich WinInject genommen und einen selbstgemachten und dann noch einen selbstkopierten Injector. Alle sagen mir, dass die Dll erfolgreich injeziert wurde und meine Dll wird auch als Modul aufgeführt in der Exe, aber komischerweise wird sie nicht ausgeführt:
Dll:
Code:
#include <iostream>
#include <windows.h>
bool DetourFunc( BYTE* oldFunc, BYTE* newFunc, DWORD len )
{
BYTE* newMem4base = NULL;
DWORD dwOld;
newMem4base = ( BYTE* )malloc( 5+len );
if( newMem4base == NULL )
return false;
for( DWORD i = 0; i < ( len+5 ); i++ )
newMem4base[i] = 0x90;
VirtualProtect( oldFunc, len, PAGE_READWRITE, &dwOld );
memcpy( newMem4base, oldFunc, len );
oldFunc[0] = 0xE8;
*( DWORD* )( oldFunc+0x01 ) = DWORD( newFunc-oldFunc-5 );
oldFunc[5] = 0xE9;
*( DWORD* )( oldFunc+0x06 ) = DWORD( newMem4base-( oldFunc+0x5 )-5 );
newMem4base += len;
newMem4base[0] = 0xE9;
*( DWORD* )( newMem4base+0x01 ) = DWORD( ( oldFunc+10 )-newMem4base-5 );
for( DWORD i = 10; i <len; i++ )
oldFunc[i] = 0x90;
return true;
}
void *DetourFunc2(BYTE *src, const BYTE *dst, const int len) // credits to gamedeception
{
BYTE *jmp = (BYTE*)malloc(len+5);
DWORD dwback;
VirtualProtect(src, len, PAGE_READWRITE, &dwback);
memcpy(jmp, src, len); jmp += len;
jmp[0] = 0xE9;
*(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
src[0] = 0xE9;
*(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
VirtualProtect(src, len, dwback, &dwback);
return (jmp-len);
}
void test()
{
MessageBox(0, "Detour was succesful", "Started", 0);
std::cout<<"detour works";
}
DWORD WINAPI Thread( LPVOID lpParam )
{
DetourFunc2((BYTE*) 0x0040134C,(BYTE*) &test,14);
return 0;
}
int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
{
MessageBox(0, "Dll injected", "Started", 0);
if( reason == DLL_PROCESS_ATTACH )
{
MessageBox(0, "Detour started", "Started", 0);
HANDLE hThread = CreateThread( NULL, 0, Thread, NULL, 0, NULL );
CloseHandle( hThread );
}
return TRUE;
}
Code:
#include <iostream>
#include <windows.h>
using namespace std;
void NormaleFunc()
{
cout << "Von EXE\n";
}
int main( int argc, char** argv )
{
while( true )
{
NormaleFunc();
Sleep( 250 );
}
return 0;
}
[Only registered and activated users can see links. Click Here To Register...]
Ich muss vielleicht noch anmerken, dass mir OLLY folgende Warnung gibt, wenn ich versuche die Exe zu disassemblen:
[Only registered and activated users can see links. Click Here To Register...]
Und wenn ich jetzt die Dll in diesen Prozess injiziere, passiert nichts, wirklich gar nichts, es wird nicht einmal die MessageBox am Anfang gezeigt, aber das sollte sie ja eigentlich auf jeden Fall:
Code:
int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)
{
MessageBox(0, "Dll injected", "Started", 0);
if( reason == DLL_PROCESS_ATTACH )
{
MessageBox(0, "Detour started", "Started", 0);
HANDLE hThread = CreateThread( NULL, 0, Thread, NULL, 0, NULL );
CloseHandle( hThread );
}
return TRUE;
}
So und jetzt meine Frage:
Wieso passiert da nix? :D
Edit:
Keine Ahnung obs hilft, aber ich benutze Win XP SP 3, 32Bit.
Edit2:
Habe versucht dieselbe Dll mal in Opera.exe zu injecten, in Notepad, in Wordpad, usw.
und das Ergebnis ist dasselbe, nämlich es passiert nichts, also was ist mit dieser Dll los?