Patcher

Contenu du snippet

Voici le code d'un patch. A la base c'est en fait le code d'un crack mais j'ai remplacé le nom du soft par "le soft" pour ne pas avoir de problèmes. C'est vraiment galère de trouver des infos sur l'utilisation des api avec NASM, alors pour éviter à d'autres de chercher pendant des heures (comment ouvrir le sélécteur de fichier par exemple), je poste ce code ici. Pour info, le soft concerné est la derniere version d'un célèbre logiciel de 3D, mais comme je ne précise pas lequel, je ne pense pas que ce que j'ai mis ici soit illégal.
(je fais de la bidouille pas de la programmation alors pitié svp)

Source / Exemple :


; à compiler avec NASM :
; http://quasar.astalavista.ms/tools/nasm32.zip
; bin\nasm patch.asm -fobj
; bin\alink patch.obj -oPE

[EXTERN SetFilePointer]
[import SetFilePointer kernel32.dll]
[EXTERN CreateFileA]
[import CreateFileA kernel32.dll]
[EXTERN WriteFile]
[import WriteFile kernel32.dll]
[EXTERN ExitProcess]
[import ExitProcess kernel32.dll]
[EXTERN CloseHandle]
[import CloseHandle kernel32.dll]
[EXTERN GetModuleHandleA]
[import GetModuleHandleA kernel32.dll]
[EXTERN MessageBoxA]
[import MessageBoxA user32.dll]
[EXTERN GetOpenFileNameA]
[import GetOpenFileNameA comdlg32.dll]

%include 'inc\win32\enums.inc'

[SECTION CODE USE32 CLASS=CODE]

..start:

; trouve un handle sur le processus
; et sauve dans hInstance
push dword 0
call [GetModuleHandleA]
mov [hInstance], eax

; Ouverture du browser
push dword OPENFILENAMESTRUCT
call [GetOpenFileNameA]
cmp eax, 0
jz error

; ouverture du fichier avec CreateFileA
push dword 0
push dword FILE_ATTRIBUTE_NORMAL
push dword OPEN_EXISTING
push 0
push 0
push GENERIC_WRITE
push strFileBuffer
call [CreateFileA]
cmp eax, -1
jz error
; sauve le handle du fichier
mov [fhandle], eax

; --- patchs ---
; eax = offset de l'octet à modifer
; [modifs] = octet patché

mov eax, dword 0d633h
mov [modifs], byte 75h 
call patch

mov eax, dword 0d63bh
mov [modifs], byte 84h
call patch

mov eax, dword 0da34h
mov [modifs], byte 85h
call patch

; -------------

; ferme le fichier
push dword [fhandle]
call [CloseHandle]

; fin
jmp fin

error:
push dword 0
call [ExitProcess] 

fin:
push MB_OK
push dword titre
push dword message
push dword 0
call [MessageBoxA]

jmp error

; fonction patch
patch:
; seek dans le fichier à la position eax
push dword FILE_BEGIN
push dword 0
push dword eax
push dword [fhandle]
call [SetFilePointer]

; écriture de l'octet
push dword 0
push dword written
push dword 1
push dword modifs
push dword [fhandle]
call [WriteFile]
ret

[SECTION DATA CLASS=DATA USE32]

titre          db          "le soft (v7.0 fr) patch", 0
message          db          "le soft est maintenant cracké!", 0
modifs          resd          1
fhandle          resd          1
written          resd          1

OPENFILENAMESTRUCT
lStructSize          dd          ENDSTRUCTOPENFILENAME - OPENFILENAMESTRUCT
hwndOwner          dd           0
hInstance           dd           0
lpstrFilter           dd filter
lpstrCustomFilter           dd           0
nMaxCustFilter           dd           0	
nFilterIndex           dd           0
lpstrFile           dd           strFileBuffer
nMaxFile           dd           255
lpstrFileTitle           dd           strTitleBuffer
nMaxFileTitle           dd           255
lpstrInitialDir           dd           initialDir
lpstrTitle           dd           title
flags           dd           0
nFileOffset           dw           0
nFileExtension           dw           0
lpstrDefExt           dd           0
lCustData           dd           0
lpfnHook           dd           0
lpTemplateName           dd           0
ENDSTRUCTOPENFILENAME

filter           db           ".Exe (*.exe)", 0, "*.exe", 0, 0		
title           db           "Localisez le soft.exe...", 0
strFileBuffer           resb           255
strTitleBuffer           resb           255
initialDir           db           "c:\", 0

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.