Retour
invoke WriteProcessMemory,
DBEvent.u.CreateProcessInfo.hProcess, \ process dans lequel on écrit en mémoire
offset1, \ addr où on commence à écrire
addr patch1 \, 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)
Donc ici pour écrire dans le programme cible il faut d'abord donner le handle de son process,
et c'est DBEvent.u.CreateProcessInfo.hProcess car son handle à été recipéré dens notre
structure DEBUG_EVENT qu'on avait nommé DBEvent, mais il ne se trouve pas n'importe où
dans cette structure, il se trouve dans son paramètre CreateProcessInfo. OK?
Ensuite il faut savoir à quel endroit dans le programme cible on doit écrire. J'ai vu avec
W32Dasm que le problème de la cible était un 'Jmp' qui se trouvait à l'offset 004010D8, donc
j'ai déclaré cette valeur dans les '.data' et je l'ai appelé Offset1, j'y fais donc
maintenant référence.
Reste à savoir quoi écrire à cet enplacement. C'est ce que j'ai placé dans Patch1.
2 c'est la longueur en octet de ce qui doit être écrit. Puisque ce que j'écris c'est 9090h
ou 2 fois 90h ça me donne bien 2 octets.
Le NULL c'est parce qu'on s'en fout de saboit combient d'octets ont bien étés écrits.
Retour