2009-03-01 11 views
3

Ich bin beschäftigt, ein Tutorial zu folgen, in dem der Autor DUMPBIN verwendet, um Exporte aufzulisten, und OllyDbg, um den Assembly-Code für eine exportierte Funktion abzurufen. Wie würde ich den Funktionscode in der vollständigen Disassemblierung finden, da die Exporttabellen RVA's bei der Demontage nicht realen Adressen entsprechen.Suchen einer Funktion in einer Zerlegung

+0

nur aus Neugier, welches Tutorial? – Nils

+1

Es ist ein Teil von Reversing: Geheimnisse des Reverse Engineering, Eldad Eilam. Eine etwas bahnbrechende Arbeit über Reverse Engineering IA-32 Windows-Anwendungen. Sein erstes Ziel ist es, die Fähigkeit zu entwickeln, eine "tote" Auflistung mit minimalen Werkzeugen zu lesen. – ProfK

Antwort

2

Ein RVA ist eine verschiebbare virtuelle Adresse. Um die reale Adresse im Prozessbereich zu finden, müssen Sie die Basisadresse kennen, unter der das Modul geladen wurde. Fügen Sie diese Basisadresse zur RVA hinzu und Sie haben die echte Adresse. Ich habe ollydbg nicht verwendet, aber ich wäre erstaunt, wenn es nicht die Basisadresse für die Module liefert, die in dem Prozess geladen sind, an den es angehängt wurde. Wenn es aus irgendeinem Grund diese Information nicht liefert, können Sie es erhalten, indem Sie procexp.exe von den sysinternal-Tools verwenden.

2

Ein ziemlich guter Indikator für eine Funktion, zumindest für Programme, die in Hochsprachen geschrieben sind, ist Code, der einen Stapelrahmen einrichtet.

Wenn Sie den Compiler kennen, der verwendet wurde, um den fraglichen Code zu generieren, sollten Sie herausfinden können, wonach Sie suchen sollen.

Beispiel

$ cat main.c 
int main(int argc, char **argv) { 
     return 1; 
} 
$ gcc -m32 -S main.c 
$ cat main.s 
     .file  "main.c" 
     .text 
.globl main 
     .type main, @function 
main: 
     leal  4(%esp), %ecx 
     andl  $-16, %esp 
     pushl -4(%ecx) 
     pushl %ebp 
     movl  %esp, %ebp 
     pushl %ecx 
     movl  $1, %eax 
     popl  %ecx 
     popl  %ebp 
     leal  -4(%ecx), %esp 
     ret 
     .size main, .-main 
     .ident "GCC: (Debian 4.3.3-4) 4.3.3" 
     .section .note.GNU-stack,"",@progbits 

In meinem Beispiel die movl% esp,% ebp Anweisung ist die letzte Anweisung des Setup-Code.

Der kommerzielle Disassembler IDA Pro, für den eine free-as-in-beer version zum Download verfügbar ist, funktioniert ziemlich gut automatisch Funktionen zu finden.

+0

Ich habe das kostenlose IDA Pro, und es ist fantastisch, aber ich bleibe bei dem Buchautor und mache es "kalt". Ich habe keine Funktion gesucht, wie Ihre Antwort vermuten lässt, sondern einen spezifischen Export. Was ist das komische Sprache, die Sie hier zeigen, ich kenne nur Windows, :-) – ProfK

+0

die "seltsame Sprache" ist nur Copy & Paste Text aus einer Unix-Shell-Sitzung, mit dem "$" die Eingabeaufforderung. Ein minimales C-Programm wird zur x86-Assembly kompiliert. – hillu

+0

Die seltsame Sprache ist die AT & T-Notation ;-) – ProfK