Sicher, fürs
API-Hooking in fremden anwendungen brauchst du im normalfall eine
DLL. Ich hab zwar schon leute gesehen, die das mit einer exe gemacht haben, aber ich hab gehört, dass dies nicht zu empfehlen sei.
Diese
DLL musst du dann in dein Zielprogramm "injezieren", sprich, du musst das programm dazu bringen, die
dll zu laden. Das geht bei MadCodeHook per InjectLibrary.
Nun, sobald die
DLL dann im Speicher ist, wird die
DLL-Main ausgeführt, sprich das, was zwischen "begin" und "end." steht. Dort musst du nun die Funktionen hooken. Das tust du ganz einfach per
HookAPI('dllname', 'funktionsname', @pointer_auf_callbackfunc, @pointer_auf_nextfunc);
Dieser aufruf ersetzt die funktion 'funktionsname' die von der 'dllname'-
DLL exportiert wird durch @pointer_auf_callbackfunc, speichert aber die originalfunktion unter @pointer_auf_nextfunc .
D.h. du brauchst eine funktionen, die exakt die gleichen parameter aufweist, wie die originale (welche das sind, kannst du entweder in einer headerdatei nachschauen, oder in der
PSDK), und eine variable, in der du den pointer der originalfunktion (aufrufbar) abspeicherst.
Dann musst du nurnoch in der callback funktion, die immer anstatt der originalfunktion aufgerufen wird, mitloggen, und die originalfunktion aufrufen, damit das was passieren sollte, dann auch funktioniert ... ^^.
Ich hänge mal 2 beispiele (die waren eigentlich für mein Hooking-Tut, das ich aber leider bis jetzt nicht fertiggekriegt hab
) an, ich hoffe die erklären sich vom quellcode her und der obigen beschreibung von allein ... das eine beispiel zeigt, wie man funktionen in einer eigenen anwendungen hooken kann, anhand eines MessageBoxA-Hooks. Das andere beispiel ist eine
DLL, die man in ein anderes programm "injezieren" muss (injector liegt bei; bitte per PID in einzelne programme injezieren (PID im taskmanager nachschaun), und das uninjezieren (nach dem testen) nicht vergessen!). Diese
DLL ersetzt den Text jeder MessageBoxA (des programms in welches die
dll injeziert wurde) durch 'geänderter text'.
Und ich glaube, du musst nicht die wsock32.dll hooken, sondern die ws2_32.dll , was da genau der unterschied ist, weis ich nicht, aber appsniff macht das auch so. Achja, für dein vorhaben, kann dir der quellcode von AppSniff ziemlich weiter helfen, denn dieses Programm tut ja auch nichts anderes ... ^^
ok, bei fragen, fragen!
ciao, Philipp
[edit]oops, anhang vergessen
[/edit]