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
Antwort
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.
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.
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
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
Die seltsame Sprache ist die AT & T-Notation ;-) – ProfK
nur aus Neugier, welches Tutorial? – Nils
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