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-Funktion "hooken" direkt in Anwendung (https://www.delphipraxis.net/122409-api-funktion-hooken-direkt-anwendung.html)

chri_ri 15. Okt 2008 17:10


API-Funktion "hooken" direkt in Anwendung
 
Hallo,
erstmal sorry dass mein Thema nicht wirklich mit Delphi zu tun hat aber ich weiß nicht weiter.


Mein Problem:

Ich habe eine Anwendung, welche ich NICHT selbst programmiert habe und zu welcher ich KEINEN Quellcode habe. In welcher Programmiersprache diese programmiert wurde bin ich mir nicht sicher.

Die Anwendung legt ein paar Config-Dateien unter "C:\Dokumente und Einstellungen\<USERNAME>\Anwendungsdaten\<Programm name> an. Vermutlich verwendet Sie dabei die Systemvariable "%appdata%".

Ich möchte nun lediglich das erstellen dieser Config-Dateien verhindern. Eine Zugriffsüberwachung und Korrigierung (Löschung) der Config-Dateien wäre zwar wesentlich einfacher, jedoch möchte ich es so möglichst NICHT lösen.
Ich hatte daran gedacht per Assembler (OllyDbg) mir den Code anzuschaun und an der Entscheidenden Stelle den Aufruf der CreateFile-Funktion der Windows-API "blind" zu machen. Jedoch NUR für diese / in dieser einzigen Anwendung.


Ich scheitere leider kläglich.


Ich würde mich sehr über ein paar Tips freuen. Schonmal vielen Dank im Vorraus!



mfg. FRY82

jmd anders 15. Okt 2008 20:26

Re: API-Funktion "hooken" direkt in Anwendung
 
wie siehts damit aus einfach den ordner schreibgeschützt zu machen? was passiert dann?

zero_x 15. Okt 2008 20:27

Re: API-Funktion "hooken" direkt in Anwendung
 
Hallo chri_ri,

mit dieser Funktion sollte es eigentlich möglich sein: http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx .

zero_x

Zacherl 15. Okt 2008 21:06

Re: API-Funktion "hooken" direkt in Anwendung
 
Ich glaube er will das Programm direkt patchen über OllyDbg und co.

Du müsstest rausfinden an welcher Stelle die Files geschrieben werden und dann den Codeverlauf mit gezielten JMPs umzubiegen.

brechi 16. Okt 2008 10:12

Re: API-Funktion "hooken" direkt in Anwendung
 
Willst du es durch patchen machen oder eventuell durch andere Methoden (hooking). Zweiteres ist jedenfalls eifnach indem du CreateFileA hooks und eben dann die Datei nicht öffnest, bzw auf eine TEMP Datei umleitest. Dies ist dann nötig wenn z.b. ein Fehler auftritt wenn die Datei nicht erstellt werden konnte.

Wenn du Glück hast, kannst du einen Hexeditor nehmen und dort nach der cfg Datei suchen (der name sollte da drin stehen). Dann machst du einfach ein #0 am Beginng des Namen (dadurch hast du Ihn sozusagen gelöscht) oder du nimmst Zeichen die von windows nicht erlaubt sind (z.B. <) und überschreibst da einen Buchstaben mit.

Im Normalfall wird dann CreateFileA mit einerm Ordner bzw. ungültigen Dateinamen aufgerufen und sollte fehlschlagen.

chri_ri 16. Okt 2008 16:42

Re: API-Funktion "hooken" direkt in Anwendung
 
Also ich möchte nicht überwachen, sondern das schreiben dieser config-dateien ganz verhindern.
Ein Sperren des Zielordner kommt nicht in Frage.
Eine Möglichkeit per Hook oder ähnlichem wäre zwar noch was, jedoch würde ich das patchen auf jeden Fall vorziehen.
Mal ganz davon abgesehn, dass diverse AntiVir-Programme wie z.B. Kaspersky bei nem Hook den unwissenden User verwirren könnten, falls ich das Prinzip auch mal bei nem Tool oder so anwende, welches ich weitergebe.
Weil hab schon öfters nach einer Lösung für ähnliche Probleme gesucht.

Achja und nach Dateipfaden habe ich schon gesucht und leider nix gefunden.



mfg. chri_ri

brechi 16. Okt 2008 22:00

Re: API-Funktion "hooken" direkt in Anwendung
 
du sollst ja auch den dateinamen abändern

chri_ri 17. Okt 2008 01:15

Re: API-Funktion "hooken" direkt in Anwendung
 
Danke für den tipp. Habe das auch schon richtig verstanden. Nur ich finde keine Dateinamen in der Anwendung. Sonst hätte ich das ja schon längst versucht. Nungut. Sorry habe echt immernoch keine Lösung :-(


mfg. chri_ri

brechi 17. Okt 2008 12:31

Re: API-Funktion "hooken" direkt in Anwendung
 
dann setz nen BP auf CreateFileA dort ist ja auch der parameter für die Datei angegeben. Dann steppst du soweit durch bis du zu einem aufruf kommst wo vorher der ordner+dateiname zusammengeügtwerden. dann nur noch da den aufruf noppen.

als alternative kannst du mir auch die datei schicken

chri_ri 17. Okt 2008 13:24

Re: API-Funktion "hooken" direkt in Anwendung
 
Liste der Anhänge anzeigen (Anzahl: 1)
hm also was du meinst kann ich mir in etwa vorstellen.

Nur ich komme trotzdem nicht zurecht.

Ich habe ja extra nach dem CreateFile gesucht. Ich bin was Assembler angeht nicht so ganz bewandert. Also habe ich angenommen, dass ich es vielleich in dem Code vor dem EP (EntryPoint) finde.
Habe dort oben auch irgendetwas gefunden, was nen Wert per MOV zu irgendeinem Offset schiebt. Und mein "OllyDbg" hat mir dahinter das Kernel32.CreateFile als Info angezeigt. Wollte das NOOPen, weil ich keine Ahnung hatte obs das is und es einfach testen wollte.

Schließlich als ich speichern wollte habe ich gesehn, dass mein OllyDbg zwar die Anwendung geöffnet hat, jedoch mir komischerweise immer beim speichern (nichtnur bei Änderungen über dem EP) sagt, ich wäre in der kernel32.dll (C:\WINDOWS\System32).

Also irgendwie kommt mir das ein wenig spanisch vor. Und durchsehen tu ich in dem Code irgendwie nicht ganz. Ich kenne zwar die Grund-Assembler-Befehle aber naja. Und ich denke, dass mir Ohne Durchblick einfach das setzen eines Breakpoints an irgendeinem vermeintlichem CreateFile und das damit verbundene Verhindern der Ausführung dieses Befehls nicht viel bringen wird :-(


Also ich hänge mal eine Beispel-Anwendung an, mit der ich das machen möchte, aber nicht zurecht komme.



mfg. chri_ri

Carlo91 17. Okt 2008 14:46

Re: API-Funktion "hooken" direkt in Anwendung
 
Hi,
also ich hab mir jetzt nur den ersten und letzten beitrag durch gelsen und wollte mir die beispiel.exe angucken(in Olly usw.)...
da gibt es nur ein kleines problem xD :D es ist eine .Net application kann man mit olly nicht soviel machen oder hab ich irgendwas verpasst?

MfG Carlo

jfheins 17. Okt 2008 14:50

Re: API-Funktion "hooken" direkt in Anwendung
 
Auch .NET Applikationen kann man antürlich decompilen (man bekommt sogar "mehr" wieder raus, wenn ich mich nicht irre)

Ob das mit Ollydbg geht weis ich aber nicht ;)

Carlo91 17. Okt 2008 14:52

Re: API-Funktion "hooken" direkt in Anwendung
 
Ja ich weiß das man die decompilen kann.... hab ich aber noch nie gemacht(muss man die nicht dann irgendwie neu compilen?!? kp...)... aber Olly ist kein .Net debugger und hooks+.Net geht glaub ich auch nicht bzw. noch nie gemacht/von gehört.

MfG Carlo

chri_ri 18. Okt 2008 00:09

Re: API-Funktion "hooken" direkt in Anwendung
 
Erstmal THX, dass Ihr euch die Zeit genommen habt und die Anwendung mal angeschaut habt!


Also heißt das, dass nur weil es .NET ist kann ich in dem Assembler-Code nicht "rumfuschen"? *verwirrt*


Wenn Decompilieren so eine gute Idee wäre, hätte dann da jemand eventuell ein paar Tips?



mfg. chri_ri

DGL-luke 18. Okt 2008 01:37

Re: API-Funktion "hooken" direkt in Anwendung
 
In .Net gibt es etwas viel schöneres namens Reflection. Damit kannst du mit deinem Code eigentlich machen was du willst. Hooks sollten nicht besonders schwer sein.

Wenn du aber die WinAPI hooken willst, musst du dafür zuerst mal eine Brücke zwischen managed und unmanaged schlagen. Da fällt immer das Stichwort "P/Invoke". Frag mich jetzt aber nicht was das bedeutet...


Obiges hilft dir alles nicht weiter :P

http://de.wikipedia.org/wiki/.NET_Reflector

Sollte theoretisch vollauf reichen, um die anwendung zu dekompilieren, das erstellen der datei abzustellen und das ding wieder zu kompilieren. C#-Kommandozeilencompiler gibt es frei verfügbar von Microsoft.

chri_ri 18. Okt 2008 12:50

Re: API-Funktion "hooken" direkt in Anwendung
 
Erstmal Big THX!

werde es gleich mal ausprobieren!^^


//EDIT

Sorry, klappt nicht wie ich dachte.

Also der ".NET Reflector" is echt ne tolle Sache und gibt mir einen echt guten Überblick über diverse Klassen und Proceduren. Eventuell habe ich mit ein bissschen Glück sogar schon die Variable gefunden, welche für das Zielverzeichnis verwendet wird.
Nur gibt es drei Probleme:
- Ich erhalte keinerlei Informationen über den eigentlichen Programmcode oder weiß einfach nicht wie.
- Ich kann keinerlei Werte ändern.
- Ich erhalte Nichts was ich direkt wieder rekompilieren könnte.

Würde mich echt freuen über ein paar Tips, was ich falsch mache.

//EDIT ENDE


//NEUES EDIT

Sorry, mein Fehler^^ XD

Habe jetzt wahrscheinlich herausgefunden, wie ich an den eigentlichen Programmcode komme und auch eine "Export-Möglichkeit" gefunden.
Hatte wohl nicht richtig gesucht.
Und das ändern der Werte / des Codes bekomme ich hoffentlich auch noch hin.

Und nochmal THX für das Tool.

//EDIT ENDE



mfg. chri_ri

chri_ri 18. Okt 2008 15:22

Re: API-Funktion "hooken" direkt in Anwendung
 
Also nochmals an alle vielen Dank!

Ihr seid echt die besten. Ich denke, dass ich auch langsam mit dem Tool klarkomme.

Jetzt muss ich nurnoch meinem Delphi ".NET" beibringen XD

Na dann auf ein nächstes mal.^^



mfg. chri_ri

jfheins 18. Okt 2008 16:09

Re: API-Funktion "hooken" direkt in Anwendung
 
Zitat:

Zitat von chri_ri
Jetzt muss ich nurnoch meinem Delphi ".NET" beibringen XD

Viel Spaß :mrgreen:

Es gibt auch Visual Studio Express C# für kostenlos ;)

chri_ri 18. Okt 2008 16:46

Re: API-Funktion "hooken" direkt in Anwendung
 
@jfheins: ok, danke für den Tipp. Aber ich bevorzuge im Moment Delphi.

Achja hätte noch jemand ne Idee, warum ".NET Reflector" beim Export keine Projekt-Datei erstellt?



mfg. chri_ri


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 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