| |||||||
| Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
![]() |
| | Themen-Optionen | Ansicht |
| | #1 |
| Moderator Registriert seit: Aug 2004 Karma: 1217 | [Registry-wrapping] Nightingale Hi! Nachdem ich in den letzten Monaten an chronischem Zeitmangel gelitten habe, konnte ich wenigstens dieses Programm halbwegs fertig stellen... Der Name "Nightingale" ist, wie üblich, das Ergebnis einer spontanen Laune. Dieses mal geht es um die Portabilität von Programmen auf USB-Sticks. Da viele Programme von der Registry abhängig sind, habe ich mir überlegt ob es nicht eine einfache Lösung gibt, um sie davon zu lösen. Das Ergebnis ist eine kleine DLL, die die Registry-Funktionen wrapped und den Datentransfer für bekannte Einträge übernimmt. Weitere Informationen und natürlich auch die Sourcen sind unter http://www.deneke.biz/nightingale/ zu finden. Wenn ihr Verbesserungsvorschläge oder Diskussionsbedarf habt, schreibt einfach. ;-) |
| | |
| | #2 |
| Technischer Administrator Registriert seit: Sep 2002 Karma: 1523 | Re: [Registry-wrapping] Nightingale Ich denke es waere fuer die naechsten Releases auf jeden Fall sinnvoll ein kleines Helper Tool zu schreiben, welches die Schritte unter Usage automatisiert erledigt? Ich denke das sollte schnell geschrieben sein und es erspart einem doch einiges an Arbeit, wenn das Programm diverse DLLs einsetzt. Wobei "Repeat for dlls that also belong to the program." nicht ganz so einfach sein kann, wenn die DLLs ueberall im System verstreut sind. Das zweite waere noch: ![]() http://validator.w3.org/check?verbos...nightingale%2F __________________ Don't you feel the power of CSS layouts? |
| | |
| | #3 |
| Moderator Registriert seit: Aug 2004 Karma: 1217 | Re: [Registry-wrapping] Nightingale Asche auf mein Haupt, das übliche Problem wieder. ;-) Ich werd's korrigieren und bei Gelegenheit auch mal 'nen 'Installationstool' schreiben. |
| | |
| | #4 | |
| Administrator Registriert seit: Apr 2004 Karma: 1219 | Re: [Registry-wrapping] Nightingale Hi, nait! Nettes Tool, wobei es auch noch von meiner Seite ein paar Verbesserungsvorschläge gibt Zitat:
Was man imo auch noch hinzufügen sollte (ich hab' mir die Sources jedoch noch nicht durchgeschaut und weiß daher auch nicht, ob so etwas in der Art schon implementiert ist), wäre eine Funktion, welche sämtliche Zugriffe auf die Registry unterbindet und im Fall, dass ein bestimmter Schlüssel oder Wert in der Registry-Table nicht existiert, einfach den Default-Wert oder einen anderen, zuvor festgelegten String zurückgibt. Es kann unter Umständen nervig sein, wenn man meint, dem Wrapper alle Rückgabewerte für Registry-Zugriffe beigebracht zu haben und später doch noch irgendwo ein Wert von einem Fremdsystem ausgelesen und ständig benutzt wird. Man könnte den Wert zwar manuell in der Table fixen, aber einfacher fände ich es, wenn in einem bestimmten Modus erst gar keine neuen Werte aus der Registry aufgenommen werden. Wo wir gerade schon bei der Überwachung von Änderungen in der Table sind, hätte ich noch den Vorschlag, eine Logging-Funktion einbauen. Sollte diese aktiviert sein (das ließe sich z.B. über eine kleine INI im Programmverzeichnis steuern), so werden alle Registry-Zugriffe oder wahlweise auch nur das Hinzufügen neuer Table-Entries in einer Textdatei geloggt. Das kann zwar zu Startverzögerungen führen, aber man hätte einen guten Überblick über die aufgerufenen Keys bzw. die neuen Einträge in der Registry-Tabelle (manche Keys möchte man für den portablen Einsatz eventuell anpassen). Ich hoffe, dass du mit meinen Anregungen etwas anfangen kannst und dass das Projekt gut vorankommt. Ich könnte das Tool selbst gut gebrauchen, da ich gerade versuche, eine ganze Menge meiner wichtigsten Applikationen portabel zu machen und es doch relativ mühsam ist, alle Registry-Zugriffe manuell umzubiegen Grüße, CryptoCrack __________________ http://cryptocrack.de/ | |
| | |
| | #5 |
| Moderator Registriert seit: Aug 2004 Karma: 1217 | Re: [Registry-wrapping] Nightingale So, der Validator ist wieder friedlich. ;-) Danke CryptoCrack. Übrigens bin ich am Loader dran, er sollte in den nächsten Tagen fertig sein. Der Hinweis mit der DLL-Injection war der nötige Tipp, so ist das halt mit dem Wald und den Bäumen. Danke. Was das Logging betrifft, kannst du in reg_tree.h das #if 0 in Zeile 26 rausnehmen und damit das loggen aktivieren. Ist zwar nicht so schön, war aber eigentlich auch nicht als Feature gedacht. ;-) |
| | |
| | #6 | |
| Administrator Registriert seit: Apr 2004 Karma: 1219 | Re: [Registry-wrapping] Nightingale Hi! Mir ist eben noch eine Idee gekommen, wie man den Loader etwas kompatibler gestalten könnte: Anstatt einer separaten PE, welche die eigentliche Executable startet, könnte man doch auch einen Stub am Einsprungspunkt des Targets eingefügen, der sämtliche Aufgaben übernimmt (noch besser wäre es, wie die meisten Packer vorzugehen und eine neue Section hinzuzufügen). Dieser könnte dann per LoadLibrary die nightingale.dll nachladen und das Inline-Hooking durchführen. Der beste Ansatz wäre hier vermutlich, alle Exports der advapi32.dll oder nightingale.dll (sollten im Prinzip dieselben sein) durchzulaufen, per GetProcAddress die jeweiligen Adressen auszulesen und dann zu hooken. Vom Ablauf her läuft im Prinzip alles gleich wie bei einem externen Loader, wobei jedoch keine Zugriffe aus Fremdprozessen erfolgen müssten (die DLL-Injection würde auch wegfallen und es sollte keine Probleme mit nicht vorhandenen Rechten geben). Zitat:
CryptoCrack P.S.: Mir ist gerade noch aufgefallen, dass die advapi32.dll zum Zeitpunkt, an dem der Stub ausgeführt wird, eventuell noch gar nicht geladen ist (wenn z.B. ein Packer verwendet wird, der die Imports erst nach dem Nightingale Loader verarbeitet). Umgehen könnte man das beispielsweise, indem man das Hooking nicht sofort durchführt, sondern einen Thread erstellt, der wartet, bis die DLL in den Adressraum geladen wurde und dann seine Arbeit verrichtet. Problematisch wird es, wenn das Programm bereits Funktionen der advapi32.dll verwendet, bevor der Thread Wind von der geladenen Library bekommt - allerdings besteht dieses Problem auch bei einem externen Tool... Mir fällt hierzu atm keine saubere Lösung ein (außer einem Breakpoint auf die LoadLibrary-Funktion, was auch wieder zu Schwierigkeiten führen könnte), aber vielleicht hast du noch eine passende Idee. __________________ http://cryptocrack.de/ | |
| | |
| | #7 |
| Moderator Registriert seit: Aug 2004 Karma: 1217 | Re: [Registry-wrapping] Nightingale Ich hatte auch schon überlegt den Loader als Stub vor die eigentliche Datei zu hängen, allerdings würde man dann wieder direkt in die Datei eingreifen und bekäme unter umständen dadurch mehr Probleme als Vereinfachungen (z.B. durch false positives von Virenscannern). Im Moment löse ich das Problem durch die Annahme, dass es keine DLL gibt die auf nightingale verweist. Aus diesem Grund kann ich (obwohl in der MSDN 'must not' steht) in der DLLmain LoadLibrary für die ADVAPI32.dll verwenden. natürlich ist das nicht wirklich sauber... Die Alternative wäre zu argumentieren, dass eh keine DLL in ihrer Main-Funktion Reg-Funktionen aufrufen kann ohne die DLL geladen zu haben (was ja 'verboten' ist). Das heißt es gäbe bis zum (TLS-)Entrypoint keine Möglichkeit, das etwas am nightingale-System vorbeiläuft. Durch den Loader wird am (TLS-)Entrypoint angehalten, die DLL injectet, der EIP auf die Init-Funktion umgebogen. Die Init-Funktion übernimmt das Hooking und kehrt nicht mit einem RET sondern einem JMP zum EP zurück, so dass kein Unterschied zu erkennen sein wird. Der Vorteil ist, dass diese Methode auch für Programme funktioniert, die Checksummen über sich selbst berechnen. Ich denke das werde ich auch so implementieren. |
| | |
| | #8 | |
| Registered User Registriert seit: Oct 2000 Karma: 307 | Re: [Registry-wrapping] Nightingale Das Gerücht, dass man für einen Loader, der DLL-Injection o.ä. macht, erweiterte Rechte braucht, hält sich zwar schon eine Weile, stimmt aber trotzdem nicht: Zitat:
__________________ "Die Terroristen haben versucht, unsere Gesellschaft zu erschüttern. Die Innenminister haben es geschafft." (Andreas Pfitzmann) | |
| | |
| | #9 |
| Moderator Registriert seit: Aug 2004 Karma: 1217 | Nightingale Eigentlich wollte ich ja bis morgen warten, aber da ich gerade nach Hause gekommen bin und eh noch nicht schlafen kann... Nach einer langen Zeit ohne Updates, kann ich endlich eine neue Version präsentieren. Im Vergleich zum vorherigen Stand gab es einige massive Änderungen. Hier ein kurzer Überblick:
Der Link ist gleich geblieben: http://deneke.biz/nightingale Auch hier nochmal vielen Dank an CryptoCrack für den ausgiebigen Support beim Testen und dem Umbau der Seite. |
| | |
| | #10 |
| Moderator Registriert seit: Aug 2004 Karma: 1217 | Re: Nightingale Die Sourcen sind jetzt auch wieder online. |
| | |
| | #11 |
| Registered User Registriert seit: Jul 2002 Karma: 752 | Re: Nightingale Eigentlich koennten wir das auf Buha spiegeln? __________________ Die Nacht ist die schönste Zeit des Tages, alle Bälger sind im Bett und die scheiß Sonne scheint auch nicht! |
| | |
| | #12 |
| Moderator Registriert seit: Aug 2004 Karma: 1217 | Re: Nightingale Ich habe noch einen Bug-Fix für das Problem beim Wrappen von Anwendungen die Sockets verwenden erstellt. Damit ist das Problem auch behoben. :-) |
| | |
![]() |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Registry Problem | [elix] | Windows | 6 | 21.05.2004 13:51 |
| Registry | Anything | Pascal / Delphi | 4 | 28.04.2001 17:24 |
| Registry | Outcast | Algorithmen und sonstige Programmiersprachen | 9 | 05.04.2001 23:13 |
| registry | Real Tigger | VisualBasic / VBScript | 4 | 11.12.2000 21:18 |
| registry | AssembWriter | VisualBasic / VBScript | 5 | 12.11.2000 18:11 |
Alle Zeitangaben in WEZ +2. Es ist jetzt 09:25 Uhr.







Linear-Darstellung

