Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Api Hooking / Logen (https://www.delphipraxis.net/125964-api-hooking-logen.html)

flash2009 15. Dez 2008 19:14


Api Hooking / Logen
 
Hey Leute
ich hab die sprinf von der msvcr.dll gehookt, also nen jump von der dll in meine dll,
nur hab ich folgendes Problem, die sprintf bekommt nen string(mit #0) gepusht
zB "d%"
so jetzt fang ich das ding übern Stack ab und versuche das an meinen Code zu übergebe
dazu hab ich schon einiges probiert
zb mov eax, esp+$20 und dann push eax
das klappt auch wunderbar nur irgenwie schaft es dann die Funktion(unten als code) mittem in sonen code haufen zu springen , dann krieg ich ne exception

debugen mach ich mit ollydbg

und das wird dann im endefekt als funtion/procedur ausgeführt

Delphi-Quellcode:
procedure LogToFileStr(Text:String);stdcall;
var
  log      : textfile;
begin
  AssignFile(log, DateToStr(now)+'errorlog.log');
  try
    if not FileExists(DateToStr(now)+'errorlog.log') then
    begin
      Rewrite(log,DateToStr(now)+'errorlog.log');
      WriteLn(log,'['+TimeToStr(now)+']:'+'llalala #');
      WriteLn(log,'##################################################################');
    end;
    Append(log);
    WriteLn(log,'['+TimeToStr(now)+']:'+ Text);
    WriteLn(log,text);
  finally
    CloseFile(log);
  end;
end;
Wenn ich einfach ne Messagebox aufrufe ist das kein Problem nur halt bei dem Code bricht das Program zusammen, hab ich was übersehen oder soll ich den log anders erstellen ?
die Parameter werden auch richtig übergeben.
oder darf man sowas generell nicht machen ?
ich kann auch mehr Code posten, eingetlich müsten die meisten wissen was ich mache halt die Api umlenken.
ich kann auch Screenshots in Olly machen , Testapps und so hochladen =).

die funktion läuft in ner normalen exe ohne problem
ich verwende d7 :)

gruß flash

Der.Kaktus 15. Dez 2008 19:21

Re: Api Hooking / Logen
 
Zitat:

Zitat von flash2009
Hey Leute
ich hab die sprinf von der msvcr.dll gehookt, also nen jump von der dll in meine dll,
nur hab ich folgendes Problem, die sprintf bekommt nen string(mit #0) gepusht
zB "d%"
so jetzt fang ich das ding übern Stack ab und versuche das an meinen Code zu übergebe
dazu hab ich schon einiges probiert
zb mov eax, esp+$20 und dann push eax
das klappt auch wunderbar nur irgenwie schaft es dann die Funktion(unten als code) mittem in sonen code haufen zu springen , dann krieg ich ne exception

debugen mach ich mit ollydbg

und das wird dann im endefekt als funtion/procedur ausgeführt

Delphi-Quellcode:
procedure LogToFileStr(Text:String);stdcall;
var
  log      : textfile;
begin
  AssignFile(log, DateToStr(now)+'errorlog.log');
  try
    if not FileExists(DateToStr(now)+'errorlog.log') then
    begin
      Rewrite(log,DateToStr(now)+'errorlog.log');
      WriteLn(log,'['+TimeToStr(now)+']:'+'llalala #');
      WriteLn(log,'##################################################################');
    end //ELSE
    Append(log);
    WriteLn(log,'['+TimeToStr(now)+']:'+ Text);
    WriteLn(log,text);
   //END ELSE
  finally
    CloseFile(log);
  end;
end;
wenn ich einfach ne messagebox aufrufe ist das kein problem nur halt bei dem code bricht das program zusammen, hab ich was übersehen oder soll ich den log anders erstellen ?
die parameter werde auch richtig übergeben.
oder darf man sowas generell nicht machen ?
ich kann auch mehr code posten, eignetlich müsten die meisten wissen was ich mache halt die api umlenken.
ich kann auch screenshots in olly machen , testapps und so hochladen =).

die funktion läuft in ner normalen exe ohne problem
ich verwenden d7 :)

grußn flash

..vielleicht hilft die Korrektur ;-)

sirius 15. Dez 2008 19:24

Re: Api Hooking / Logen
 
Ich denke, es ist eher interessant, wie du an die Information kommst und nicht wie du sie weiterverarbeitest. Wahrscheinlich bringst du das Stackframe durcheinander. In dem einen fall passiert dadurch nichts, und im zweiten Fall kommt berechtigter Weise eine Exception.

Der.Kaktus 15. Dez 2008 19:26

Re: Api Hooking / Logen
 
Bitte loeschen...Forum hing..Danke!!

flash2009 15. Dez 2008 19:31

Re: Api Hooking / Logen
 
@Der.Kaktus
Also von Delphi aus kann ich da nicht mehr machen , das ist alles nur assembler.

@sirius
Ja genau das ist das Problem vor nem return liegt murks aufm stack nur die funktion selbst is ja delphi
ohne inline asm
also müste der call (in dem fall logtofile) eigentlich bündig sein (also der müste ja insich wieder zum ende finden)

Wenn das danach passiert würd ich das verstehen können aber tut es ja dummerweise nicht, eine Messagebox wird richtig ausgeführt.
Das einzige was mir noch einfällt das er irgendwie intern über den String stolpert, aber das halt ich auch für nicht möglich da die exe mit nur einem Thread arbeitet.

sirius 15. Dez 2008 20:04

Re: Api Hooking / Logen
 
Ach du lenkst ihn direkt in die funktion. Ja dann ist der String als Parameter falsch. Versuch mal PChar!

flash2009 16. Dez 2008 00:42

Re: Api Hooking / Logen
 
Boah bei mir is echt grad der Fehlerteufel drin ,hab schon probiert kann es aber grade nicht weiter debugen.

Hier nochmal das ding was ich hooke
int sprintf ( char * str, const char * format, ... );

Ich werds morgen nochmal ausgiebig ausarbeiten.

----------------------------------
Hier das gehört nicht direkt dazu das ist halt mein inject Tool für die dll
das macht mir 1-2 c000008 oder d00008 exceptions , im Netz stand das wäre schon geschlossen wenn so etwas auftrit.

Delphi-Quellcode:
if CreateRemoteThread(HandleWindow,nil,0,GetProcAddress(GetModuleHandle('kernel32.dll'),'LoadLibraryA'),pAllocMem,0,cThreadID) <> 0 then
  begin
    WaitForSingleObject(cThreadID,INFINITE);
Eigentlich hatte ich vor das cThreadID Handle zu closen, aber das gibt mir immer ne exeption.
also hab ich das schonmal entfernt
Zum Schluss close ich noch alles was ich so an Handles habe und da spuckt Olly mit auch noch eine hinterher. Beenden sich die Handles irgendwie selber oder hab ich was nicht verstanden.
Die Dlls werden aber astrein injected.

---------------------------------------------------
Das ist noch ne andere Frage aber zum gleichen Program , warum schreiben alle möglichen Tools die ich Create(Process), eigentlich direkt in meine Delphi Konsole vom Program das den Prozess startet , find ich irgendwie komisch.

Wenn interesse besteht ich hab nen Loader und ne Api Hook Klasse(als pas file) leicht zu verstehen und einbinden einfach bescheid geben , ansonsten rel ich die vll falls interesse besteht und alles fertig ist.

so bis später :)

edit2:
so geiler tip mit pcar der funzt perfekt :D
thx schonmal für die schnelle hilfe

gruß flash

flash2009 20. Dez 2008 00:06

Re: Api Hooking / Logen
 
so alles läuft jetzt, irgendwo stand ich soll wieder was deaktivieren wenn die frage beantwortet wurde , ich weiß aber nicht wo


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz