Wie werden undokumentierte Funktionen entdeckt? [geschlossen]

11


Ich habe mich immer gefragt, wie Sie eine undokumentierte / private API finden.

Beispiel: Apple undokumentierte / private API, Play Station , Windows Phone 7 , Win32-Kernel , Windows-API , versteckter Rückruf usw.

Mit welchen Tools informieren sich Hacker über private und nicht dokumentierte Funktionen?

Wo kann ich über die Erfahrungen der Menschen mit privaten APIs und Reverse Engineering-Techniken lesen, die die Geheimnisse enthüllen, die normalerweise in der API-Dokumentation erklärt werden?

danke,
A.

elp
quelle

Antworten:

7

Ich kann mir verschiedene Möglichkeiten vorstellen:

  1. Betrachtung. Hier erhalten Sie ein Objekt und bitten es, Informationen über sich selbst wie Methoden, Eigenschaften usw. preiszugeben. Mit den richtigen Optionen (je nach Sprache) können Sie Informationen anzeigen, die nicht "öffentlich" sind.

  2. Dekompilierung. Dies regeneriert (eine Version) der Quelle, die zum Erstellen der Binärdatei verwendet wurde. Dies könnte wiederum nicht öffentliche Teile der API enthüllen.

Sie können der Liste auch "aus Versehen" hinzufügen. Ein falsch geschriebener Aufruf / Befehl, der funktioniert, oder ein Hilfebildschirm, der zu viele Informationen anzeigt.

ChrisF
quelle
2
Sie könnten der Liste versehentlich hinzufügen . Ja, es ist weniger häufig, aber es passiert;) Besonders wenn die API-Besitzer den Unfall provozieren.
1
@ Pierre - guter Punkt.
ChrisF
Auch Signaturen für gemeinsam genutzte Bibliotheken. Dies hängt mit der Dekompilierung zusammen, aber exportierte Funktionen in einer .dll / .dylib / .so-Datei können mit offiziellen Tools durchsucht werden (Abhängigkeits-Explorer in Visual Studio, nm in Unixes)
Chris Dolan
4

Normale Tools, mit denen Sie Software entwickeln :)

Normalerweise sind undokumentierte API-Funktionen genau das, undokumentiert und nicht wirklich sorgfältig verborgene Geheimnisse.

Das Entwerfen einer zukunftssicheren API ist schwierig - Sie können problemlos Inhalte zur API hinzufügen, aber es ist wirklich schwierig, etwas zu entfernen (ohne einige Clients zu beschädigen). Sie werden also sehr vorsichtig, wenn Sie etwas zur API hinzufügen. Aus diesem Grund gibt es in der API möglicherweise einige zusätzliche Funktionen (zum Testen, in der Entwicklung, für einen schnellen Hack?), Die nicht dokumentiert sind und keine Garantie dafür haben, dass sie funktionieren oder in der nächsten Version vorhanden sind.

Diese undokumentierten Funktionen lassen sich leicht finden, wenn Sie wissen, wie Compiler, Linker, Bibliotheken und Debugger funktionieren (Systemprogrammierung). Die Kenntnis der Assemblersprache der Zielarchitektur schadet nicht. Wenn Ihre IDE / Ihr Compiler funktionierende ausführbare Dateien erstellen kann, können Sie dies auch "manuell" tun. Wenn Sie diesen Pfad offen halten, werden Sie möglicherweise einige versteckte Funktionen entdecken :)

Beispiel in einer Unix-Umgebung: Ein Szenario, in dem wir nur Dokumentation für die printf- Funktion haben und wissen möchten, ob es andere printf- ähnliche Funktionen gibt. Der Gedankengang könnte ungefähr so ​​aussehen:

1. Überprüfen Sie die Header-Dateien

$ grep printf /usr/include/stdio.h | head -5
extern int fprintf (FILE *__restrict __stream,
extern int printf (__const char *__restrict __format, ...);
extern int sprintf (char *__restrict __s,
extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
extern int vprintf (__const char *__restrict __format, _G_va_list __arg);

2. Überprüfen Sie die Bibliothek

$ nm /usr/lib/libc.a | grep printf | head -5
         U __asprintf
         U __fwprintf
         U __asprintf
         U __fwprintf
         U __printf_fp

3. Zerlegen Sie die Bibliotheksfunktion

    $ objdump -S /usr/lib/libc.a | grep -A 10 '_fwprintf' | head
00000000 <__fwprintf>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   8d 45 10                lea    0x10(%ebp),%eax
   6:   83 ec 0c                sub    $0xc,%esp
   9:   89 44 24 08             mov    %eax,0x8(%esp)
   d:   8b 45 0c                mov    0xc(%ebp),%eax
  10:   89 44 24 04             mov    %eax,0x4(%esp)
  14:   8b 45 08                mov    0x8(%ebp),%eax
  17:   89 04 24                mov    %eax,(%esp)

Oder etwas ähnliches...

Maglob
quelle
2

Haftungsausschluss: Ich mag die Antwort von ChrisF. Ich denke, es werden einige Ansätze ausgelassen. Wenn es in den Kommentaren zur Antwort steht, wie sie behandelt werden, werde ich meine Antwort löschen.

Es könnte irgendwie unter Dekompilierung fallen:

Das Auffinden anderer undokumentierter APIs kann auch durch Debuggen eines vom Hersteller bereitgestellten Tools erfolgen, das genau das tut, was Sie möchten, und durch Verfolgen von Fernaufrufen. Auf diese Weise können Sie eine Vorstellung davon bekommen, welche Art von Daten wohin gesendet wird.

Andere "benutzerdefinierte" Tools können dann geschrieben werden, um mit diesen undokumentierten APIs unter Verwendung von Python und CTYPES oder Ruby mit einer ähnlichen Version zu spielen, bis Sie genau herausfinden, was sie tun oder was sie für Abstürze tun. Dieses Thema wird von Aaron Portnoy in minimaler Tiefe behandelt in: http://pentest.cryptocity.net/reverse-engineering/ und einigen seiner anderen Vorträge auf Konferenzen (ich erinnere mich, dass er bei einem Vortrag in Brasilien direkt darüber spricht ). Es hängt mit RE zusammen, aber ich denke nicht, dass es genau nur allgemeine RE ist. Hinweis: Die Videos auf pentest.cryptocity.net sind nicht NUR dieses Thema. Sie decken andere Bereiche eingehender ab, dies wird nur angesprochen. Ich denke, weil es oft etwas ist, das Tester als "die genauen Schritte würden unsere Geheimnisse preisgeben" schützen.

Vielen Dank für das Lesen von Feedback geschätzt.

Bearbeiten: Ein Tool, das sich auf der Windows-Seite als nützlich erweisen kann, wird hier nur minimal behandelt: http://breakingcode.wordpress.com/2010/08/24/winappdbg-1-4-is-out/
Call Hijacking für dickes Java Clients, die benutzerdefinierte Netzwerkdienste fuzzeln, werden hier behandelt:
http://www.securitytube.net/JavaSnoop-How-to-hack-anything-written-in-Java-video.aspx

Letzteres ist nur minimal relevant, könnte sich jedoch als relevant erweisen, wohin der Fragesteller letztendlich geht. Verwenden von APIs, die Sie nicht besitzen ... was auch immer.

RobotHumans
quelle
Es ist gut, eine eigene Antwort hinzuzufügen, um mehr / andere Informationen zu liefern - darum geht es bei einem Stack Exchange.
ChrisF
@ ChrisF danke für die Klarstellung. es schien nur, als wäre es durch Umkehren verdeckt worden. Ich dachte, es könnte eine spezifischere Notation einer anderen möglichen Methode / spezifischeren Teilmenge der Umkehrung tragen (die Umkehrung könnte die Suche nach Symbolen abdecken, auf die auch nicht in der MSDN verwiesen wird usw.).
RobotHumans
-2

Hacken klingt ziemlich romantisch, Industriespionage, Lecks, Bestechung, Diebstahl und einfaches Glück nicht. Ich würde sie aber nicht zählen.

Bitsplitter
quelle