Faire un patcheur en Assembleur Win32.
Dans le precedent Memento nous a vue comment faire son patcheur en Delphi mais aussi en Assembleur. Dans ce tut nous allons voir comment faire son patcheur en Assembleur mais 32bits sous Windows (Win32Asm).
Préface :
Déjà on pourrais se dire
pourquoi choisit on l'asm comme language alors qu'il en existe
d'autre plus évolué.
En faite l'asm est un language tres rapide, compacte et
contrairement aux idées reçu pas si compliqué que ca. Mais
j'ai deja cité tous les aventages dans le numéro precedant.
Du source, donnez moi du source :
Pour faire simple et conci nous
allons directement voir une partie du source et comment sa mise
en oeuvre fonctionne. Ce code est assé ancien et j'ai juste
ajouter plus de commentaires, il se peut aussi qu'il ne soit pas
optimisé à fond (certaines astuces ne marches pas sous NT) et
en plus il date, en attendant un nouveaux super patcheur et en
preparation dans nos labos ;)
Comme d'habitude tout ce qui est en rouge et jaune est modifable
pour la configuration du patcheur. Editez ce code sous des progs
comme Notepad ou Edit, c'est preferable :
.386P Locals Jumps include Wpatcheur32.inc ; include .Model Flat, StdCall .Data ;[SC]Patcher v1.2 ;/////////////////////////////////// Zone à modifier ////////////////////////////////////////// Nick equ " Static REvenge " ; Ton nick (respecte l'espace entre chaque guillement) Nom_du_prog equ " SuperProg v2.0 " ; Le nom du prog cracké Type_de_patch equ " Kill time limit! " ; Met ici ce que fait ton patch Fichier equ "xns3.exe" taille equ 1610240 ; taille de la cible en octets nb_blocs equ 11 ; nombre de blocs patch_ptr0 equ 0EB6D0h, 0EB6EDh, 0EB944h ; adresse hexa new_val0 equ 0EBh, 0EBh, 005h, 000h ; nouvelles valeurs long_bloc0 equ 1, 2, 1 ; longueures des chaines about db "------------------------= Infos =-------------------------",13,10,13,10 db " cONTACT : static_revenge@shmeitcorp.org",13,10 db " wEBsITE : http://www.shmeitcorp.org ",13,10 db " GrEeTiNGz : All members from Shmeit Corp !",13,10,13,10 db "----=[Coded in Win32ASM by Static REvenge]=----",0 ; laissez-le si ca vous dis :)
Le code complet et commenté se
trouve ici. Maintenant on vas revoir quelques points
dans l'ordre :
- Le fichier Wpatcheur32.inc est in fichier include, cela veux
dire qu'il fait partis du programme mais je l'ai mis à par pour
que le tout soit plus lisible. Il contient les procedures et
autres adresses hexa utilisées par le patcheur (interruptions, evenements, etc..), le compilateur
en a besoin pour savoir ce qu'il doit linker
- Le "equ" indique une equivalance, on pourrait
tres bien aussi le remplacer par l'opperateur "=",
c'est une question de gouts.
Ensuite il y à quelques signes à
connaitre comme :
- db qui signifie Declare Byte, il sert à reserver des octets
avec des caracteres alphanumeriques (1,2,3, a,b,c,..)
- dd signifie Declare Double Dword, declaration d'un double mot
long soit 32bits
- dw signifie Declare Word, on declare juste un mot
Pour ce qui est des instructions et de la synthaxe ca risque d'être long vu qu'il en existe des pres d'une centaine, donc je vous recommande toujours le même bouquin! A savoir "Assembleur", de Bernard Fabrot aux éditions Marabout, ca coute à peine 50 balles et c'est tres complet, en plus il viens d'être réedité! :)
La compilation :
Une fois un programme écrit, il
faut le compiler pour le rendre executable. Il existe des compilateurs de toutes sortes
mais leurs principes restes les mêmes : compiler (trop fort).
Ici j'ai utiliser Tasm (comme dans le M#3) car il est rapide dans
la compilatio net fourni aussi des projet rapides d'executions
une fois compilé. De plus avec Tasm on programme vraiment en
assembleur contrairementà Masm qui ressemble plus à du basic
(je zap le debat).
Pour compiler sous Tasm il faut le compilateur et le fichier Make. Ce fichir va servir à automatiser la compilation du projet car nous aurons ecrit tous les parametres au prealable. Notre fichier make est comme ca :
@echo off
build\tasm32
/ml /m3 /z patch
build\brcc32
patcheur
build\tlink32
-x /Tpe /aa /c /V4.0 /o patch,patch,, build\import32.lib,,patch
del *.obj
Dans le repertoire
"bluid" doivent se trouver les fichiers pour la
compilation 32bits qui se trouves ici
ou sur le site dans la partie Coding.
Pour connaitre les utilités des arguments, il suffit d'executer
tasm32.exe et tlink32.exe ce qui donne ca :
tasm32.exe
tlink32.exe
On peut voir qu'il y
à pas mal d'options possible, même de linker des fichiers
ressources au format .res.
Cette options est pas mal du tout car editer un fichier ressource
de ce format est à la portée de pas mal de monde, tout est
visuel et une interface est faite en quelqeus minutes. Ensuite il
suffit d'assigner une adresse à chaque element qui serat
fonctionnel et les programmer.
Par exemple dans le patcheur, le bouton Patch a l'addresse 1003
que l'on ecrit en egualité avec un nom de son choix pour faire
une correspondance lisible :
- Dans Wpatcheur32.inc => IDD_OPEN equ 1003
- Dans patch.asm => cmp [wparam], IDD_OPEN ; Patch iD
Et ainsi de suite
pour tous les composants de la resource.
Pour editer cette ressource, il vous un editeur de ressource
(vraiment trop fort) de bonne qualité de preference. Le plus
utilisé est Visual C/C++ mais il existe aussi l'editeur officiel
pour de Borland qui est Borland Resource Workshop 4.5, un peut
vieillot mais efficace.
Et bien voilà, je
suis assis devant mon pc et j'ai pas trop d'idée pour faire la
suite du tut alors je vais m' arreter là, mais j'ai quelques
conseils à vous donner avant si vous voulez vous lancer dans la
prog asm :
- Achetez le fameux bouquin
- Essayez de comprendre le fonctionnement du patcheur
- Prenez votre temps
- Faites un plan d'un programme que vous penssez à coder
avant de le faire
- N'esitez pas à partager les fichiers et à créer vos propres
routines independament des autres fichiers pour pouvoir les
recycler facilement par la suite
- Soyez relax quans vous codez ;)
- Si vous pouvez, codez sous NT car il est beaucoup plus rigoureux
sur le code, ainsi vos programmes seront bien plus propres
- Et tres important, structurez vos programmes histoire que ca ne
finisse pas en plat de spaghettis!
Et amusez vous bien!!!
I'm just a AsM lover and you?