Wie finde ich heraus, wo alles in eine Closed-Source-Anwendung geschrieben wird?

7

Ich habe eine Anwendung (die Quelle, für die ich nicht habe), die von der Befehlszeile wie folgt aufgerufen werden kann

%Vor%

Ich möchte alle Standorte kennen, an die die Anwendung schreibt. Es gibt einige Dateien in dem Verzeichnis aus, von dem es aufgerufen wird, aber ich muss sicherstellen, dass dies die einzigen Dateien sind, die erstellt werden.

Also muss ich die Anwendung isolieren, um herauszufinden, welche Dateien sie während ihrer Ausführung erstellt / bearbeitet hat.

Wie kann ich das tun?

Irgendwie mit Perl oder C oder C ++? Verfügt eine der Standardbibliotheken in diesen Sprachen über Möglichkeiten?

    
Lazer 08.09.2010, 08:58
quelle

5 Antworten

24

strace , ktrace / kdump , truss , dtruss oder was auch immer für ein anderes Programm, das Ihre Plattform für das Verfolgen von Systemaufrufen bereitstellt, ist wahrscheinlich das, wonach Sie suchen.

Erwarten Sie viel Output von diesen. Um herauszufinden, in welche Dateien die Anwendung liest und schreibt, möchten Sie die Ausgabe möglicherweise auf einige wenige Systemaufrufe beschränken. strace -eopen ./notmyapp , zum Beispiel.

Die Anwendung kann auch untergeordnete Prozesse abzweigen, um einen Teil ihrer Arbeit zu erledigen. Bei den meisten Systemaufruf-Tracern müssen Sie sich genau mit der Verfolgung dieser untergeordneten Prozesse befassen. Mit strace wäre das strace -f ./notmyapp .

    
rafl 08.09.2010, 09:16
quelle
5

In Unix-Systemen können Sie strace verwenden, um eine Ablaufverfolgung aller Systemaufrufe und empfangenen Signale auszudrucken ein Prozess:

%Vor%

grep kann verwendet werden, um die Ausgabe auf eine Teilmenge von Systemaufrufen zu beschränken:

%Vor%     
Eugene Yarmash 08.09.2010 09:07
quelle
2

Sie könnten strace verwenden.

    
David Feurle 08.09.2010 09:06
quelle
2

Sie sagen als Antwort auf die Antwort von rafl, dass notmyapp eine Eingabeaufforderung erzeugen und auf Eingaben warten [...] soll, bevor Sie etwas tun.

Platzieren Sie Ihre Eingaben im Voraus in eine einfache Textdatei (zB responses.txt ), eine Eingabe pro Zeile. Verwenden Sie dann strace , wie vorgeschlagen, um Aufrufe von open() oder write() piping im Inhalt von responses.txt :

zu verfolgen %Vor%

Wenn Sie eine Menge Dateizugriffe erwarten, sollten Sie die Ausgabe an Ihren bevorzugten Pager oder Editor leiten:

%Vor%

strace ist ein mächtiges Werkzeug. Weitere Informationen erhalten Sie in man strace .

    
Johnsyweb 08.09.2010 11:28
quelle
1

Sie könnten versuchen, es als Benutzer auszuführen, der keine Rechte hat, irgendwo auf ein Laufwerk zu schreiben. Dann erhalten Sie eine Fehlermeldung, wenn es versucht, die erste Datei zu erstellen / schreiben. Protokollieren Sie das Verzeichnis / die Datei und geben Sie ihm Schreibrechte, und wiederholen Sie den Vorgang, bis keine weiteren Fehlermeldungen mehr angezeigt werden.

    
Péter Török 08.09.2010 09:07
quelle

Tags und Links