Petite 2.1 / 2.2
Comment patcher ?!

voici l'endroit critique:
(l'adresse du loader varie en fonction de la taille de l'executable)

(AVANT:)
41a0f2: xor dl,dl      32d2
41a0f4: dec ebx        4b
41a0f5: movsb          a4
41a0f6: xor ecx,ecx    33c9 
41a0f8: ...

-> il y a un exception handler qui pointe vers le program entry point.
quand la dcompression est termine, le movsb tente d'crire  un
endroit de la mmoire auquel il n'a pas accs. Donc le dernier movsb
revient  un jmp prog_entry_point.

le but est de dtourner l'execution du loader donc on fait:

(APRES:)
41a0f2: push 41a2f0h  68f0a24100
41a0f7: ret           c3
41a0f8: ...

ceci est une faon pas prise de tete de faire un absolute jump.
(rappel: ret renvoie  l'adresse [esp] donc un simple push permet
d'y avoir accs)
aprs le ret on se retrouve  l'adresse 41a2f0. Il y a un espace
libre suffisant pour notre patch.

41a2f0: xor dl,dl         32d2
41a2f2: dec ebx           4b00
41a2f3: cmp edi,400000h   81ff004000
41a2f9: jz 41a303h        7408
41a2fb: movsb             a4
41a2fc: xor ecx,ecx       33c9
41a2fe: jmp 41a0f8h       e9f5fdffff
41a304: ...

ce code "amliore" la routine originale: si il s'agit du dernier
movsb, on jump en 41a304 et on enchane avec la routine de patching.
sinon on continue la boucle et on jump en 41a0f8.

la routine de patch:
41a304: mov eax,46c31ch
41a309: mov dword ptr [eax], 90909090h

...avec autant de lignes de ce type ncessaires..

et puis on fini videmment par un movsb qui lance le soft dcompress.

J'espre avoir t utile et clair. Je tiens enfin  rendre les credits
 leurs propritaires: Christal pour l'explication sur le SEH, R!SC
pour son tut assez complet sur le sujet.

En vous remerciant,
SyntaxError, 2000