Retour
invoke WriteProcessMemory , DBEvent.u.CreateProcessInfo.hProcess process dans lequel on écrit en mémoire
, context.regEip addr où on commence à écrire
, addr buffer adresse du buffer où on a placé nos données
, 2 nombre d'octets à écrire
, NULL nombre d'octets réellement écrits.(ici on s'en fout)
On a déjà récupéré le context du programme cible et on la recopié dans notre structure
'context'.
|regEbp
|regEip = EIP du programme cible au moment où on s'est introduit dans la cible
context (de type |regCs
|regFlag
CONTEXT_CONTROL) |regEsp
|regSs
Donc context.regEip est la valeur de la copie de EIP dans notre context donc de l'EIP de la
cible elle-même.
addr buffer est l'endroit où on a stocké les deux 90h (les deux nop) pour pouvoir les écrire.
Et le temps est venu.
2 Vous avez compris.
NULL on s'en fout de savoir combien de bytes ont bien été écrits.
Maintenant : DBEvent.u.CreateProcessInfo.hProcess...
On a bien trouvé a quel endroit on doit écrire et ce qu'il y a à écrire, Mais reste a savoir
dans quel programme ou plutôt Process.
Bon ici c'est un cas simple, quelquechose que vous ne verrez jamais ailleurs, car quand on
lance la cible, elle tourne en ronde sur son JMP. Donc EIP qui représente l'adresse de la
prochaine instruction à exécuter est FIXE. Par la suite, quelque soit le moment où on
lance le Memory Patch, le EIP de la cible n'a rien de hasardeux!!! Le Memory Patch récupère
la valeur de l'EIP dans son context (regEip). Et donc on a plus qu'à écrire (WriteProcessMemory)
ce qu'il faut à l'adresse ayant la valeur regEip soit LE EIP de la cible.
Comprenez bien que si il y avait eu un NOP au-dessus du JMP et que ce jump retournait sur NOP
alors le EIP de la cible aurait fait un roulement entre 'EIP du nop' et 'EIP du jump', donc là,
ça n'aurait pas pu marcher, on bien plus exactement : une chance sur deux que ça marche...
Le mieux, c'est toujours de se débrouiller à récupérer l'Image Base de la cible pour avoir un
point d'ancrage, une base justement, et de se déplacer dans le programme à partir de ce point
connu.
Retour