Im Buch Umkehren: Secrets of Reverse Engineering auf S. 152 arbeitet er durch einige Windows-API-Wende- und wir haben herausgefunden, dass die Struktur wie dieses IchDatentypen in struct, wenn Reverse Engineering
struct TABLE
{
UNKNOWN Member1;
UNKNOWN_PTR Member2;
UNKNOWN_PTR Member3;
UNKNOWN_PTR Member4;
UNKNOWN Member5;
UNKNOWN Member6;
UNKNOWN Member7;
UNKNOWN Member8;
UNKNOWN Member9;
UNKNOWN Member10;
};
sieht gefolgt wie er zu diesem Punkt gekommen, und dann schaut er auf einer anderen Funktion in der API und bietet dieses Bit
ist untersuchen Lassen gehen, was hoffentlich eine einfache Funktion ist: RtlNumberGenericTableElements. Die Idee ist, dass, wenn die Stammdatenstruktur ein Element hat, das die Gesamtzahl der Elemente in der Tabelle darstellt, diese Funktion es offen legen würde. Wenn nicht, würde diese Funktion durch alle Elemente iterieren und sie nur währenddessen zählen. Das Folgende ist die OllyDbg-Ausgabe für RtlNumberGenericTableElements.
RtlNumberGenericTableElements:
7C923FD2 PUSH EBP
7C923FD3 MOV EBP,ESP
7C923FD5 MOV EAX,DWORD PTR [EBP+8]
7C923FD8 MOV EAX,DWORD PTR [EAX+14]
7C923FDB POP EBP
7C923FDC RET 4
Nun, so scheint es, dass die Frage beantwortet wurde. Diese Funktion einfach nimmt einen Zeiger auf, was man nur annehmen kann, ist die gleiche Struktur wie vorher, und gibt zurück, was in Offset +14 ist. Offensichtlich enthält Offset +14 die Nummer von Elementen in einer generischen Tabellendatenstruktur. Lassen Sie uns die Definition der TABLE-Struktur aktualisieren.
Mit nur dieser Funktion, die die Anzahl der Elemente in der Tabelle zurückgibt, aktualisiert er die Struktur wie folgt.
struct TABLE
{
UNKNOWN Member1;
UNKNOWN_PTR Member2;
UNKNOWN_PTR Member3;
UNKNOWN_PTR Member4;
UNKNOWN Member5;
ULONG NumberOfElements;
UNKNOWN Member7;
UNKNOWN Member8;
UNKNOWN Member9;
UNKNOWN Member10;
};
Hinweis alles, was er tut, ist Member6 Update vom Typ ULONG zu sein und es NumberOfElements nennen, offenbar das Element enthält eine Art int die Anzahl der Elemente der Tabelle zu enthalten, aber wie sieht er aus dieser weiß, dass es ist ein ULONG? könnte es nicht auch ein UINT oder INT sein oder macht er nur einige Annahmen