Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
02.08.2007, 21:54
Felheart



Hi,
ganz einfach: wie hooke ich funktionen ?

Beispiel:
Wenn ich Notepad(den EDITOR) offen habe, wie mach ich dann z.B. das wenn ich eine datei speichern will das dann die funktion fopen bzw. CreateFile
von Notepad von meinem Programm abgefangen werden und ich dann da
beispielsweise den Pfad der zu speichernden datei ändern kann ?

oder noch einfacher:

Quellcode:bool blah()
{
return true;
}
int main()
{
if(blah() == true)
printf("OMG!!!1");
}
Wie kann ich hier mit einem anderen programm verhindern das "OMG!!!1"
angezeigt wird ? Also das "return true;" abfangen und in false ändern.

--

zum Seitenanfang zum Seitenende Profil || Suche
001
02.08.2007, 22:03
hausi



madCodeHook wäre eine Lösung für Delphi und MSVC++, wobei man damit alle WinAPI- und sonstigen DLL-Calls umbiegen kann.

--

zum Seitenanfang zum Seitenende Profil || Suche
002
03.08.2007, 00:34
Felheart



Werds mal ausprobieren, thx

--

zum Seitenanfang zum Seitenende Profil || Suche
003
03.08.2007, 01:46
oxff



Microsoft Detours.

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
004
03.08.2007, 18:28
Felheart



Detours ist gut aber ich komme damit nicht so ganz zurecht:
Quellcode:static void (WINAPI *TrueSleep)(DWORD l) = Sleep;

VOID WINAPI MySleep(DWORD l)
{
    printf("Sleep called, adding 2sec.\n");
    TrueSleep(l + 2000);
}

int main()
{
    DetourFunction((PBYTE)Sleep, (PBYTE)MySleep);

    CDuration dur; // "Stoppuhr"
    dur.Start();

    Sleep(100); // Hier wird zuerst mein hook aufgerufen!

    dur.Stop();
    printf("Sleep: %0.3f", dur.GetDuration()/1000); // Millisekunden

    TrueSleep(INFINITE); // Warten, hook umgehen
}
Header: CDuration, windows, iostream, detours

Mit "DetourFunction" hooke ich das Sleep und leite alle Sleep calls in dem
adressraum in dem die exe oder dll läuft um auf meine eigene Sleepfunktion
die dann 2sekunden dazuadiert und das wahre sleep aufruft.

So hab ich mir das gedacht -.-
aber beim aufruf vom Sleep() stürtzt das programm ab,
wenn ich Sleep auskommentiere und nur das TrueSleep ab ende steht dann
geht alles oO

Was mach ich dan falsch ?

--

zum Seitenanfang zum Seitenende Profil || Suche
005
04.08.2007, 19:09
Felheart



Ok, ich habs jetzt fast:
Um die ungehookte funktion aufrufen zu können braucht man
eine sog. "Trampolin" funktion die den zeiger auf die alte / noch nicht veränderte funktion hat.

Quellcode:DETOUR_TRAMPOLINE(void Sleep_T(DWORD dwMilliseconds), Sleep);

void Sleep_D(DWORD dwMilliseconds)
{
    return Sleep_T(dwMilliseconds);
}

int main()
{
    printf("Sleep1 START\n");
    Sleep(100);
    printf("Sleep1 ENDE\n");

    DetourFunctionWithEmptyTrampoline((PBYTE)Sleep_T,(PBYTE)Sleep,(PBYTE)Sleep_D);

    printf("Sleep2 START\n");
    Sleep(2000);
    printf("Sleep2 ENDE\n");
}
So, hier erscheinen alle meldungen auf dem bildschirm.
Vor "Sleep2 ENDE" allerdings kommt:

"Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."

Obwohl alles stimmt,
mit einer selber geschriebenen funktion:
Quellcode:int add(int a, int b)
{
return a+b;
}
funktioniert alles einwandfrei,
da kann ich eingfach "add" detouren und 1+1=3 ausgeben lassen

Blos Sleep funktioniert damit nicht!
Ich probier jetzt mal andere API funktionen zu hooken...

//EDIT:

fopen -> lässt sich ohne probleme hooken / ändern
dabei treten keinelei probleme / warnungen, weder zur Runtime noch zur compilezeit auf!

CreateFile -> geht nicht oO

Anscheinend lassen sich die WindowsAPI funktionen nicht recht hooken,
wegen schon oben genanntem fehler.
Hilfe ist immer erwünscht, neuigkeiten poste ich hier... ^^

--


Dieser Beitrag wurde am 04.08.2007 um 20:18 von Felheart bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
05.08.2007, 14:12
oxff



Du verwendest eine falsche Calling Convention in der gehookten?

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
007
05.08.2007, 22:49
Felheart



Und wie ist die Calling Convention richtig ?
Quellcode:DETOUR_TRAMPOLINE(void Sleep_T(DWORD dwMilliseconds), Sleep); ????
Das stimmt doch oder nicht oder was ?

//edit:

Es heisst
DETOUR_TRAMPOLINE(void WINAPI Sleep_T(DWORD dwMilliseconds), Sleep);

//edit2:
hab auch gerade nachschauen müssen und für alle die jetzt nicht ganz mitgekomen sind warum da ein WINAPI hinmuss.
Mein Fehler war eine WINAPI (also __stdcall) als __cdecl aufzurufen.
Für mehr info: Google -> __stdcall

--


Dieser Beitrag wurde am 06.08.2007 um 00:57 von Felheart bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
06.08.2007, 12:28
oxff



Man munkelt im Übrigen, dass current VAC Detours detected. Also den VAC Shellcode abfangen usw..

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
009
06.08.2007, 16:13
Felheart



Meinst du ned das ich mir lieber ein Base-Kit zum spiele h4x0rn
oder gleich nen fertigen hack runterladen würde?

--

zum Seitenanfang zum Seitenende Profil || Suche
010
06.08.2007, 19:08
oxff



Das wär dann aber äußerst anspruchslos.

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
011
06.08.2007, 20:07
Felheart



ROFL
ich will aber wirklich nix in die richtung machen^^

btw:
wie find ich raus welche funktion notepad callt um eine datei zu öffnen um
diese dann zu hooken? (mit olly komm ich da an kein ergebniss)
OpenFile und fopen hab ich schon probiert :(

--

zum Seitenanfang zum Seitenende Profil || Suche
012
06.08.2007, 20:18
hausi



Versuchs mal noch mit CreateFile, das kann man afaik auch zum öffnen von Files verwenden.
Edit: Sonst kannst du ev. auch mal StraceNT verwenden. Kenne das Ding allerdings nicht, war aber mit strace windows das erste resultat.

--


Dieser Beitrag wurde am 06.08.2007 um 20:19 von hausi bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
013
06.08.2007, 21:43
oxff



ZwCreateFile, alles andere sind Wrapper

--

mwcollect - mein Projekt | oxlog - mein blog | happyhardcore.com Stream - gute Musik

zum Seitenanfang zum Seitenende Profil || Suche
014
06.08.2007, 22:14
Felheart



in welchem header ist den die funktion ? ZwCreateFile ?
windows.h kann nicht sein, die hab ich eingebunden

Meinst du CreateFileA ?

--


Dieser Beitrag wurde am 06.08.2007 um 22:16 von Felheart bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
015
07.08.2007, 00:08
hausi



Die Zw-Funktionen sind aus dem DDK/WDM und diese ist somit wahrscheinlich in der wdm.h deklariert. Allgemein empfiehlt es sich bei solchen Fragen das MSDN zu kontaktieren. Dort werden diese immer beantwortet.
Edit:
Allerdings ist mein Verständnis der WinAPI (das glücklicherweise nicht soo weit geht) so, dass eigentlich keine Applikation direkt die Zw-Varianten aufrufen sollte (bzw. darf?) und also imo auch das Abfangen dieser nicht nötig sein sollte. Ev. erhält man beim systemweiten Hooken dieser Funktionen sogar Nebenwirkungen, allerdings hab ich das natürlich nie ausprobiert.

--


Dieser Beitrag wurde am 07.08.2007 um 00:10 von hausi bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche