begin process at 2012 05 27 19:15:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications Windows

 > [MASM32] CRACK (PATCH)

[MASM32] CRACK (PATCH)


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Applications Windows Classé sous :masm32, crack, patch, cracking Niveau :Débutant Date de création :10/04/2003 Date de mise à jour :02/02/2008 12:53:40 Vu / téléchargé :32 335 / 1 193

Auteur : Dean

Ecrire un message privé
Commentaire sur cette source (26)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ceci est la source d'un crack écrit en Win32ASM (MASM32), possédant la plupart
des fonctionnalités habituelles : recherche du fichier, patch, backup et
restauration.

ATTENTION: je tiens à préciser que ce n'est pas illégal.
En effet, j'ai mis cette source pour que certains comprennent le principe de
fonctionnement d'un crack. Moi-même cela m'a longtemps fasciné (qui n'a jamais
rêvé de faire des cracks comme ceux du mythique SuperGégé ?), et je pense que ça
peut être intéressant.
Un crack est une type de patch un peu particulier, et j'ai aussi prévu cette
source pour faire des patchs (utilisation d'un thread pour les modifications
importantes des fichiers).

De plus cela constitue une bonne initiation à la programmation avec l'API
Windows (gestion des dialogues, des contrôles, écriture dans un fichier,
etc...). En gros les 10 premiers tutoriaux d'Iczelion sont couverts.

J'ai essayé de commenter le code (en anglais, désolé), mais j'espère que ça en
aidera quelques-uns ;-)  

Source

  • ;; Pastille ;
  • ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  • ; Author: Dean ;
  • ; Date : 04.25.2003 ;
  • ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  • ; http://kickme.to/charloweb ;;
  • .486
  • .model flat, stdcall
  • option casemap: none
  • include \masm32\include\windows.inc
  • include \masm32\include\user32.inc
  • include \masm32\include\kernel32.inc
  • include \masm32\include\gdi32.inc
  • include \masm32\include\comdlg32.inc ; For the GetOpenFileName function
  • include \masm32\include\shell32.inc ; For the ShellExecute function
  • include \masm32\include\imagehlp.inc ; For the MapFileAndCheckSumA function
  • includelib \masm32\lib\user32.lib
  • includelib \masm32\lib\kernel32.lib
  • includelib \masm32\lib\gdi32.lib
  • includelib \masm32\lib\comdlg32.lib
  • includelib \masm32\lib\shell32.lib
  • includelib \masm32\lib\imagehlp.lib
  • HyperlinkProc PROTO : DWORD, : DWORD, : DWORD, : DWORD
  • DlgProc PROTO : DWORD, : DWORD, : DWORD, : DWORD
  • PatchThread PROTO : DWORD
  • .const
  • ; The resource IDs
  • IDI_TARGETFILE equ 100
  • IDB_AUTHOR equ 200
  • IDC_NAME equ 300
  • IDC_CONTACT equ 301
  • IDC_AUTHOR equ 302
  • IDC_RELEASEDATE equ 303
  • IDC_TARGET equ 304
  • IDC_TARGETFILE equ 305
  • IDC_BROWSE equ 306
  • IDC_BACKUP equ 307
  • IDC_PATCH equ 308
  • IDC_EXIT equ 309
  • ; Custom messages for the patch thread
  • WM_BEGINPATCH equ WM_USER + 100h
  • WM_ENDPATCH equ WM_USER + 101h
  • ; <ReleaseSettings>
  • ; The name and the filename of the target
  • TargetName equ 'TextFile'
  • TargetFileName equ 'textfile.txt'
  • ; The size and the new size of the target file (if it is the same, set it to TargetFileSize)
  • TargetFileSize equ 26
  • TargetFileNewSize equ 4
  • ; The checksum of the target file
  • TargetFileCheckSum equ 0CD93h
  • ; The offsets and the new bytes
  • Offsets equ 0, 1, 2, 3
  • NewBytes equ 44h, 65h, 61h, 6Eh
  • ; The author and the release date
  • Author equ 'Dean', 0
  • ReleaseDate equ 'Apr 23rd 2003'
  • ; </ReleaseSettings>
  • ; <AdvancedSettings>
  • ; The title and the name of the patch
  • PatchTitle equ 'Charloweb presents:'
  • PatchName equ TargetName, ' crack'
  • ; The contact URI
  • ContactURI equ 'http://kickme.to/charloweb'
  • ; The text of the labels
  • AuthorLabelText equ 'Author: ', Author
  • ReleaseDateLabelText equ 'Release date: ', ReleaseDate
  • TargetLabelText equ 'Target file:'
  • ; The text of the buttons (use & to make a shortcut)
  • BrowseButtonText equ 'Br&owse...'
  • BackupButtonText equ 'Create &backup file'
  • PatchButtonText equ 'Apply &patch'
  • ExitButtonText equ 'E&xit'
  • ; The title and the filter string of the "open" dialog box
  • OpenTitle equ 'Select the target file:'
  • OpenFilterString equ TargetName, ' (', TargetFileName, ')', 0, TargetFileName, 0, 'All files (*.*)', 0, '*.*', 0
  • ; The extension of the backup file
  • BackupFileExt equ '.bak', 0
  • ; The title of the message boxes
  • WarningTitle equ 'Warning'
  • ErrorTitle equ 'Error'
  • InfoTitle equ 'Information'
  • ; The messages of error
  • BackupErrorMsg equ 'The backup file cannot be created. Continue anyway?'
  • OpeningErrorMsg equ 'The file does not exists or cannot be opened.'
  • FileSizeErrorMsg equ 'The file has not got the right size.'
  • CheckSumErrorMsg equ 'The file has already been modified or the checksum cannot be computed.'
  • RestoreErrorMsg equ 'The file cannot be restored.'
  • ; Restoration message
  • RestoreMsg equ 'The file has already been patched. Would you like to restore it?'
  • ; The messages of success
  • PatchSuccessMsg equ 'The file has been successfully patched!'
  • RestoreSuccessMsg equ 'The file has been successfully restored!'
  • ; </AdvancedSettings>
  • .data
  • ; Settings
  • nOffsets DWORD Offsets
  • nNewBytes BYTE NewBytes
  • szTargetFileName CHAR TargetFileName, 0
  • szPatchTitle CHAR PatchTitle, 0
  • szPatchName CHAR PatchName, 0
  • szContactURI CHAR ContactURI, 0
  • szAuthorLabelText CHAR AuthorLabelText, 0
  • szReleaseDateLabelText CHAR ReleaseDateLabelText, 0
  • szTargetLabelText CHAR TargetLabelText, 0
  • szBrowseButtonText CHAR BrowseButtonText, 0
  • szBackupButtonText CHAR BackupButtonText, 0
  • szPatchButtonText CHAR PatchButtonText, 0
  • szExitButtonText CHAR ExitButtonText, 0
  • szOpenTitle CHAR OpenTitle, 0
  • szOpenFilterString CHAR OpenFilterString, 0
  • szBackupFileExt CHAR BackupFileExt, 0
  • szWarningTitle CHAR WarningTitle, 0
  • szErrorTitle CHAR ErrorTitle, 0
  • szInfoTitle CHAR InfoTitle, 0
  • szBackupErrorMsg CHAR BackupErrorMsg, 0
  • szOpeningErrorMsg CHAR OpeningErrorMsg, 0
  • szFileSizeErrorMsg CHAR FileSizeErrorMsg, 0
  • szCheckSumErrorMsg CHAR CheckSumErrorMsg, 0
  • szRestoreErrorMsg CHAR RestoreErrorMsg, 0
  • szRestoreMsg CHAR RestoreMsg, 0
  • szPatchSuccessMsg CHAR PatchSuccessMsg, 0
  • szRestoreSuccessMsg CHAR RestoreSuccessMsg, 0
  • ; Other variables
  • szDlgName CHAR 'PASTILLE', 0
  • szOpenCmd CHAR 'open', 0
  • bPatch BOOL TRUE
  • bRestore BOOL FALSE
  • .data?
  • ; Handles
  • hInstance HINSTANCE ?
  • hIcon HICON ?
  • hHandCursor HCURSOR ?
  • hTargetFile HANDLE ?
  • hBackupFile HANDLE ?
  • ; The variables of command-line arguments
  • argc DWORD ?
  • argv DWORD 16 dup(?)
  • ; Path and filename buffers
  • szTargetFile CHAR MAX_PATH dup(?)
  • szBackupFile CHAR MAX_PATH dup(?)
  • ; Checksum values
  • nHeaderSum DWORD ?
  • nCheckSum DWORD ?
  • ; Other variables
  • Ofn OPENFILENAME <?>
  • BoldFont LOGFONT <?>
  • nPatchThreadID DWORD ?
  • nBytesWritten DWORD ?
  • .code
  • start:
  • ; Get the handle of the application instance
  • INVOKE GetModuleHandle, NULL
  • mov hInstance, eax
  • ; Get the command-line and process it
  • ; It is a code of comrade <comrade2k@hotmail.com>
  • INVOKE GetCommandLine
  • mov esi, eax
  • mov edi, OFFSET argv
  • xor ecx, ecx
  • xor ebx, ebx
  • xor edx, edx
  • @@cmss:
  • mov eax, esi
  • mov dl, 20h
  • cmp byte ptr [esi], 22h
  • sete cl
  • lea edx, [edx + ecx * 2]
  • add eax, ecx
  • stosd
  • @@cm00:
  • inc esi
  • cmp byte ptr [esi], 0
  • je @@cm01
  • cmp byte ptr [esi], dl
  • jne @@cm00
  • mov byte ptr [esi], 0
  • add esi, ecx
  • inc esi
  • cmp byte ptr [esi], 0
  • je @@cm01
  • inc [argc]
  • jmp @@cmss
  • @@cm01:
  • inc [argc]
  • ; Load the icon and the cursor resources
  • INVOKE LoadIcon, hInstance, IDI_TARGETFILE
  • mov hIcon, eax
  • INVOKE LoadCursor, NULL, IDC_HAND
  • mov hHandCursor, eax
  • ; Display the dialog box
  • INVOKE DialogBoxParam, hInstance, ADDR szDlgName, NULL, ADDR DlgProc, NULL
  • ; When all the operations are done, terminate the process
  • INVOKE ExitProcess, eax
  • ; The link procedure, used to change the cursor when the link is rolled over
  • HyperLinkProc PROC hWnd: DWORD, uMsg: DWORD, wParam: DWORD, lParam: DWORD
  • .IF uMsg == WM_SETCURSOR
  • INVOKE SetCursor, hHandCursor
  • .ELSE
  • INVOKE GetWindowLong, hWnd, GWL_USERDATA
  • INVOKE CallWindowProc, eax, hWnd, uMsg, wParam, lParam
  • ret
  • .ENDIF
  • xor eax, eax
  • ret
  • HyperLinkProc ENDP
  • ; The main procedure
  • DlgProc PROC hWnd: DWORD, uMsg: DWORD, wParam: DWORD, lParam: DWORD
  • .IF uMsg == WM_INITDIALOG
  • ; Change the icon of the dialog
  • INVOKE SendMessage, hWnd, WM_SETICON, ICON_BIG, hIcon
  • ; Attach the HyperLink procedure to the contact label
  • INVOKE GetDlgItem, hWnd, IDC_CONTACT
  • push eax
  • INVOKE SetWindowLong, eax, GWL_WNDPROC, ADDR HyperLinkProc
  • pop edx
  • INVOKE SetWindowLong, edx, GWL_USERDATA, eax
  • ; Fill all fields of text with the settings
  • INVOKE SetWindowText, hWnd, ADDR szPatchTitle
  • INVOKE SetDlgItemText, hWnd, IDC_NAME, ADDR szPatchName
  • INVOKE SetDlgItemText, hWnd, IDC_CONTACT, ADDR szContactURI
  • INVOKE SetDlgItemText, hWnd, IDC_AUTHOR, ADDR szAuthorLabelText
  • INVOKE SetDlgItemText, hWnd, IDC_RELEASEDATE, ADDR szReleaseDateLabelText
  • INVOKE SetDlgItemText, hWnd, IDC_TARGET, ADDR szTargetLabelText
  • INVOKE SetDlgItemText, hWnd, IDC_BROWSE, ADDR szBrowseButtonText
  • INVOKE SetDlgItemText, hWnd, IDC_BACKUP, ADDR szBackupButtonText
  • INVOKE SetDlgItemText, hWnd, IDC_PATCH, ADDR szPatchButtonText
  • INVOKE SetDlgItemText, hWnd, IDC_EXIT, ADDR szExitButtonText
  • ; Set the "target file" edit box with the command-line argument or the
  • ; target filename by default
  • .IF argc > 1
  • INVOKE SetDlgItemText, hWnd, IDC_TARGETFILE, argv + 04h
  • .ELSE
  • INVOKE SetDlgItemText, hWnd, IDC_TARGETFILE, ADDR szTargetFileName
  • .ENDIF
  • ; Check the "backup" checkbox
  • INVOKE CheckDlgButton, hWnd, IDC_BACKUP, BST_CHECKED
  • .ELSEIF uMsg == WM_CTLCOLORSTATIC
  • INVOKE GetDlgCtrlID, lParam
  • .IF eax == IDC_NAME
  • ; Set the font of the title
  • INVOKE SendMessage, hWnd, WM_GETFONT, 0, 0
  • INVOKE GetObject, eax, SIZEOF LOGFONT, ADDR BoldFont
  • mov BoldFont.lfWeight, FW_BOLD
  • INVOKE CreateFontIndirect, ADDR BoldFont
  • INVOKE SelectObject, wParam, eax
  • .ELSEIF eax == IDC_CONTACT
  • ; Change the color of the link
  • INVOKE SetBkMode, wParam, TRANSPARENT
  • INVOKE SetTextColor, wParam, 770000h
  • INVOKE GetSysColor, COLOR_BTNFACE
  • INVOKE CreateSolidBrush, eax
  • ret
  • .ENDIF
  • .ELSEIF uMsg == WM_COMMAND
  • mov eax, wParam
  • mov edx, wParam
  • shr edx, 16
  • .IF dx == BN_CLICKED
  • .IF ax == IDC_CONTACT
  • ; Open the contact URI
  • INVOKE ShellExecute, hWnd, ADDR szOpenCmd, ADDR szContactURI, NULL, NULL, 0
  • .ELSEIF ax == IDC_BROWSE
  • ; Fill the "open" dialog structure and display the window
  • mov Ofn.lStructSize, SIZEOF Ofn
  • push hWnd
  • pop Ofn.hwndOwner
  • mov Ofn.lpstrFilter, OFFSET szOpenFilterString
  • INVOKE lstrcpy, ADDR szTargetFile, ADDR szTargetFileName
  • mov Ofn.lpstrFile, OFFSET szTargetFile
  • mov Ofn.nMaxFile, SIZEOF szTargetFile
  • mov Ofn.lpstrTitle, OFFSET szOpenTitle
  • mov Ofn.Flags, OFN_HIDEREADONLY
  • INVOKE GetOpenFileName, ADDR Ofn
  • .IF eax == TRUE
  • ; Set the "target file" edit box with the fullpath and the name of the file
  • INVOKE SetDlgItemText, hWnd, IDC_TARGETFILE, ADDR szTargetFile
  • .ENDIF
  • .ELSEIF ax == IDC_PATCH
  • ; Create a new thread which executes the operations
  • INVOKE CreateThread, NULL, 0, ADDR PatchThread, hWnd, 0, ADDR nPatchThreadID
  • INVOKE CloseHandle, eax
  • .ELSEIF ax == IDC_EXIT
  • INVOKE SendMessage, hWnd, WM_CLOSE, 0, 0
  • .ENDIF
  • .ENDIF
  • .ELSEIF uMsg == WM_BEGINPATCH
  • ; Disable the "patch" button
  • INVOKE GetDlgItem, hWnd, IDC_PATCH
  • INVOKE EnableWindow, eax, FALSE
  • .ELSEIF uMsg == WM_ENDPATCH
  • ; Enable the "patch" button
  • INVOKE GetDlgItem, hWnd, IDC_PATCH
  • INVOKE EnableWindow, eax, TRUE
  • .ELSEIF uMsg == WM_CLOSE
  • INVOKE EndDialog, hWnd, 0
  • .ENDIF
  • xor eax, eax
  • ret
  • DlgProc ENDP
  • ; The patch procedure
  • PatchThread PROC hWnd: DWORD
  • INVOKE PostMessage, hWnd, WM_BEGINPATCH, 0, 0
  • INVOKE GetDlgItemText, hWnd, IDC_TARGETFILE, ADDR szTargetFile, SIZEOF szTargetFile
  • ; Obtain the backup file name
  • INVOKE lstrcpy, ADDR szBackupFile, ADDR szTargetFile
  • INVOKE lstrcat, ADDR szBackupFile, ADDR szBackupFileExt
  • ; If the backup file already exists, ask the user if he wants to restore
  • INVOKE CreateFile, ADDR szBackupFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL
  • .IF eax != INVALID_HANDLE_VALUE
  • mov hBackupFile, eax
  • INVOKE GetFileSize, hBackupFile, NULL
  • push eax
  • INVOKE CloseHandle, hBackupFile
  • pop eax
  • .IF eax == TargetFileSize
  • INVOKE MapFileAndCheckSumA, ADDR szBackupFile, ADDR nHeaderSum, ADDR nCheckSum
  • .IF eax == CHECKSUM_SUCCESS
  • .IF nCheckSum == TargetFileCheckSum
  • mov bRestore, TRUE
  • INVOKE MessageBox, hWnd, ADDR szRestoreMsg, ADDR szInfoTitle, MB_ICONINFORMATION OR MB_YESNO
  • .IF eax == IDYES
  • INVOKE MoveFileEx, ADDR szBackupFile, ADDR szTargetFile, MOVEFILE_REPLACE_EXISTING
  • .IF eax != 0
  • INVOKE MessageBox, hWnd, ADDR szRestoreSuccessMsg, ADDR szInfoTitle, MB_ICONINFORMATION OR MB_OK
  • .ELSE
  • INVOKE MessageBox, hWnd, szRestoreErrorMsg, ADDR szErrorTitle, MB_ICONERROR OR MB_OK
  • .ENDIF
  • .ENDIF
  • .ENDIF
  • .ENDIF
  • .ENDIF
  • .ENDIF
  • ; Patch the file
  • .IF bRestore == FALSE
  • ; Open the file specified in the "target" edit box
  • INVOKE CreateFile, ADDR szTargetFile, GENERIC_READ OR GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL
  • .IF eax != INVALID_HANDLE_VALUE
  • mov hTargetFile, eax
  • ; Get the target file size
  • INVOKE GetFileSize, hTargetFile, NULL
  • .IF eax == TargetFileSize
  • ; Computes the file checksum
  • INVOKE MapFileAndCheckSumA, ADDR szTargetFile, ADDR nHeaderSum, ADDR nCheckSum
  • .IF eax == CHECKSUM_SUCCESS
  • .IF nCheckSum == TargetFileCheckSum
  • INVOKE IsDlgButtonChecked, hWnd, IDC_BACKUP
  • .IF eax == BST_CHECKED
  • ; Create the backup file
  • INVOKE CopyFile, ADDR szTargetFile, ADDR szBackupFile, 0
  • .IF eax == 0
  • INVOKE MessageBox, hWnd, ADDR szBackupErrorMsg, ADDR szWarningTitle, MB_ICONWARNING OR MB_OKCANCEL
  • .IF eax == IDCANCEL
  • mov bPatch, FALSE
  • .ENDIF
  • .ENDIF
  • .ENDIF
  • .IF bPatch == TRUE
  • xor ecx, ecx
  • lea eax, nOffsets
  • lea edx, nNewBytes
  • patch:
  • ; Save the registers
  • pushad
  • pushad
  • ; Move to the offset
  • INVOKE SetFilePointer, hTargetFile, [eax + ecx * 4], NULL, FILE_BEGIN
  • ; Restore the registers
  • popad
  • ; Write the new byte
  • add edx, ecx
  • INVOKE WriteFile, hTargetFile, edx, 1, ADDR nBytesWritten, NULL
  • ; Restore the registers
  • popad
  • inc ecx
  • cmp ecx, SIZEOF nNewBytes
  • je endpatch
  • jmp patch
  • endpatch:
  • ; Truncate the file to the new file size
  • INVOKE SetFilePointer, hTargetFile, TargetFileNewSize, NULL, FILE_BEGIN
  • INVOKE SetEndOfFile, hTargetFile
  • ; Display the message of success
  • INVOKE MessageBox, hWnd, ADDR szPatchSuccessMsg, ADDR szInfoTitle, MB_ICONINFORMATION OR MB_OK
  • .ENDIF
  • mov bPatch, TRUE
  • .ELSE
  • INVOKE MessageBox, hWnd, ADDR szCheckSumErrorMsg, ADDR szErrorTitle, MB_ICONERROR OR MB_OK
  • .ENDIF
  • .ELSE
  • INVOKE MessageBox, hWnd, ADDR szCheckSumErrorMsg, ADDR szErrorTitle, MB_ICONERROR OR MB_OK
  • .ENDIF
  • .ELSE
  • INVOKE MessageBox, hWnd, ADDR szFileSizeErrorMsg, ADDR szErrorTitle, MB_ICONERROR OR MB_OK
  • .ENDIF
  • INVOKE CloseHandle, hTargetFile
  • .ELSE
  • INVOKE MessageBox, hWnd, ADDR szOpeningErrorMsg, ADDR szErrorTitle, MB_ICONERROR OR MB_OK
  • .ENDIF
  • .ENDIF
  • mov bRestore, FALSE
  • INVOKE PostMessage, hWnd, WM_ENDPATCH, 0, 0
  • INVOKE ExitThread, 0
  • xor eax, eax
  • ret
  • PatchThread ENDP
  • END start
;; Pastille                                                                   ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Author: Dean                                                               ;
 ; Date  : 04.25.2003                                                         ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;                                                http://kickme.to/charloweb  ;;

.486
.model flat, stdcall
option casemap: none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
include \masm32\include\comdlg32.inc ; For the GetOpenFileName function
include \masm32\include\shell32.inc  ; For the ShellExecute function
include \masm32\include\imagehlp.inc ; For the MapFileAndCheckSumA function

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\shell32.lib
includelib \masm32\lib\imagehlp.lib

HyperlinkProc PROTO : DWORD, : DWORD, : DWORD, : DWORD
DlgProc       PROTO : DWORD, : DWORD, : DWORD, : DWORD
PatchThread   PROTO : DWORD

.const

; The resource IDs
IDI_TARGETFILE  equ 100
IDB_AUTHOR      equ 200
IDC_NAME        equ 300
IDC_CONTACT     equ 301
IDC_AUTHOR      equ 302
IDC_RELEASEDATE equ 303
IDC_TARGET      equ 304
IDC_TARGETFILE  equ 305
IDC_BROWSE      equ 306
IDC_BACKUP      equ 307
IDC_PATCH       equ 308
IDC_EXIT        equ 309

; Custom messages for the patch thread
WM_BEGINPATCH equ WM_USER + 100h
WM_ENDPATCH   equ WM_USER + 101h

; <ReleaseSettings>

; The name and the filename of the target
TargetName     equ 'TextFile'
TargetFileName equ 'textfile.txt'

; The size and the new size of the target file (if it is the same, set it to TargetFileSize)
TargetFileSize    equ 26
TargetFileNewSize equ 4

; The checksum of the target file
TargetFileCheckSum equ 0CD93h

; The offsets and the new bytes
Offsets  equ 0, 1, 2, 3
NewBytes equ 44h, 65h, 61h, 6Eh

; The author and the release date
Author      equ 'Dean', 0
ReleaseDate equ 'Apr 23rd 2003'

; </ReleaseSettings>

; <AdvancedSettings>

; The title and the name of the patch
PatchTitle equ 'Charloweb presents:'
PatchName  equ TargetName, ' crack'

; The contact URI
ContactURI equ 'http://kickme.to/charloweb'

; The text of the labels
AuthorLabelText      equ 'Author: ', Author
ReleaseDateLabelText equ 'Release date: ', ReleaseDate
TargetLabelText  equ 'Target file:'

; The text of the buttons (use & to make a shortcut)
BrowseButtonText equ 'Br&owse...'
BackupButtonText equ 'Create &backup file'
PatchButtonText  equ 'Apply &patch'
ExitButtonText   equ 'E&xit'

; The title and the filter string of the "open" dialog box
OpenTitle        equ 'Select the target file:'
OpenFilterString equ TargetName, ' (', TargetFileName, ')', 0, TargetFileName, 0, 'All files (*.*)', 0, '*.*', 0

; The extension of the backup file
BackupFileExt equ '.bak', 0

; The title of the message boxes
WarningTitle equ 'Warning'
ErrorTitle   equ 'Error'
InfoTitle    equ 'Information'

; The messages of error
BackupErrorMsg   equ 'The backup file cannot be created. Continue anyway?'
OpeningErrorMsg  equ 'The file does not exists or cannot be opened.'
FileSizeErrorMsg equ 'The file has not got the right size.'
CheckSumErrorMsg equ 'The file has already been modified or the checksum cannot be computed.'
RestoreErrorMsg  equ 'The file cannot be restored.'

; Restoration message
RestoreMsg equ 'The file has already been patched. Would you like to restore it?'

; The messages of success
PatchSuccessMsg   equ 'The file has been successfully patched!'
RestoreSuccessMsg equ 'The file has been successfully restored!'

; </AdvancedSettings>

.data

; Settings
nOffsets               DWORD Offsets
nNewBytes              BYTE  NewBytes
szTargetFileName       CHAR  TargetFileName, 0
szPatchTitle           CHAR  PatchTitle, 0
szPatchName            CHAR  PatchName, 0
szContactURI           CHAR  ContactURI, 0
szAuthorLabelText      CHAR  AuthorLabelText, 0
szReleaseDateLabelText CHAR  ReleaseDateLabelText, 0
szTargetLabelText      CHAR  TargetLabelText, 0
szBrowseButtonText     CHAR  BrowseButtonText, 0
szBackupButtonText     CHAR  BackupButtonText, 0
szPatchButtonText      CHAR  PatchButtonText, 0
szExitButtonText       CHAR  ExitButtonText, 0
szOpenTitle            CHAR  OpenTitle, 0
szOpenFilterString     CHAR  OpenFilterString, 0
szBackupFileExt        CHAR  BackupFileExt, 0
szWarningTitle         CHAR  WarningTitle, 0
szErrorTitle           CHAR  ErrorTitle, 0
szInfoTitle            CHAR  InfoTitle, 0
szBackupErrorMsg       CHAR  BackupErrorMsg, 0
szOpeningErrorMsg      CHAR  OpeningErrorMsg, 0
szFileSizeErrorMsg     CHAR  FileSizeErrorMsg, 0
szCheckSumErrorMsg     CHAR  CheckSumErrorMsg, 0
szRestoreErrorMsg      CHAR  RestoreErrorMsg, 0
szRestoreMsg           CHAR  RestoreMsg, 0
szPatchSuccessMsg      CHAR  PatchSuccessMsg, 0
szRestoreSuccessMsg    CHAR  RestoreSuccessMsg, 0

; Other variables
szDlgName    CHAR 'PASTILLE', 0
szOpenCmd    CHAR 'open', 0
bPatch       BOOL TRUE
bRestore     BOOL FALSE

.data?

; Handles
hInstance   HINSTANCE ?
hIcon       HICON     ?
hHandCursor HCURSOR   ?
hTargetFile HANDLE    ?
hBackupFile HANDLE    ?

; The variables of command-line arguments
argc DWORD ?
argv DWORD 16 dup(?)

; Path and filename buffers
szTargetFile CHAR MAX_PATH dup(?)
szBackupFile CHAR MAX_PATH dup(?)

; Checksum values
nHeaderSum DWORD ?
nCheckSum  DWORD ?

; Other variables
Ofn            OPENFILENAME <?>
BoldFont       LOGFONT      <?>
nPatchThreadID DWORD        ?
nBytesWritten  DWORD        ?

.code

start:

; Get the handle of the application instance
INVOKE GetModuleHandle, NULL
mov hInstance, eax

; Get the command-line and process it
; It is a code of comrade <comrade2k@hotmail.com>
INVOKE GetCommandLine
mov esi, eax
mov edi, OFFSET argv
xor ecx, ecx
xor ebx, ebx
xor edx, edx

@@cmss:
mov eax, esi
mov dl, 20h
cmp byte ptr [esi], 22h
sete cl
lea edx, [edx + ecx * 2]
add eax, ecx
stosd

@@cm00:
inc esi
cmp byte ptr [esi], 0
je @@cm01
cmp byte ptr [esi], dl
jne @@cm00
mov byte ptr [esi], 0
add esi, ecx
inc esi
cmp byte ptr [esi], 0
je @@cm01
inc [argc]
jmp @@cmss

@@cm01:
inc [argc]

; Load the icon and the cursor resources
INVOKE LoadIcon, hInstance, IDI_TARGETFILE
mov hIcon, eax
INVOKE LoadCursor, NULL, IDC_HAND
mov hHandCursor, eax

; Display the dialog box
INVOKE DialogBoxParam, hInstance, ADDR szDlgName, NULL, ADDR DlgProc, NULL

; When all the operations are done, terminate the process
INVOKE ExitProcess, eax

; The link procedure, used to change the cursor when the link is rolled over
HyperLinkProc PROC hWnd: DWORD, uMsg: DWORD, wParam: DWORD, lParam: DWORD

  .IF uMsg == WM_SETCURSOR
    INVOKE SetCursor, hHandCursor
  .ELSE
    INVOKE GetWindowLong, hWnd, GWL_USERDATA
    INVOKE CallWindowProc, eax, hWnd, uMsg, wParam, lParam
    ret
  .ENDIF

  xor eax, eax
  ret
HyperLinkProc ENDP

; The main procedure
DlgProc PROC hWnd: DWORD, uMsg: DWORD, wParam: DWORD, lParam: DWORD

  .IF uMsg == WM_INITDIALOG

    ; Change the icon of the dialog
    INVOKE SendMessage, hWnd, WM_SETICON, ICON_BIG, hIcon

    ; Attach the HyperLink procedure to the contact label
    INVOKE GetDlgItem, hWnd, IDC_CONTACT
    push eax
    INVOKE SetWindowLong, eax, GWL_WNDPROC, ADDR HyperLinkProc
    pop edx
    INVOKE SetWindowLong, edx, GWL_USERDATA, eax

    ; Fill all fields of text with the settings
    INVOKE SetWindowText, hWnd, ADDR szPatchTitle
    INVOKE SetDlgItemText, hWnd, IDC_NAME, ADDR szPatchName
    INVOKE SetDlgItemText, hWnd, IDC_CONTACT, ADDR szContactURI
    INVOKE SetDlgItemText, hWnd, IDC_AUTHOR, ADDR szAuthorLabelText
    INVOKE SetDlgItemText, hWnd, IDC_RELEASEDATE, ADDR szReleaseDateLabelText
    INVOKE SetDlgItemText, hWnd, IDC_TARGET, ADDR szTargetLabelText
    INVOKE SetDlgItemText, hWnd, IDC_BROWSE, ADDR szBrowseButtonText
    INVOKE SetDlgItemText, hWnd, IDC_BACKUP, ADDR szBackupButtonText
    INVOKE SetDlgItemText, hWnd, IDC_PATCH, ADDR szPatchButtonText
    INVOKE SetDlgItemText, hWnd, IDC_EXIT, ADDR szExitButtonText

    ; Set the "target file" edit box with the command-line argument or the
    ; target filename by default
    .IF argc > 1
      INVOKE SetDlgItemText, hWnd, IDC_TARGETFILE, argv + 04h
    .ELSE
      INVOKE SetDlgItemText, hWnd, IDC_TARGETFILE, ADDR szTargetFileName
    .ENDIF

    ; Check the "backup" checkbox
    INVOKE CheckDlgButton, hWnd, IDC_BACKUP, BST_CHECKED

  .ELSEIF uMsg == WM_CTLCOLORSTATIC
    INVOKE GetDlgCtrlID, lParam

    .IF eax == IDC_NAME

      ; Set the font of the title
      INVOKE SendMessage, hWnd, WM_GETFONT, 0, 0
      INVOKE GetObject, eax, SIZEOF LOGFONT, ADDR BoldFont
      mov BoldFont.lfWeight, FW_BOLD
      INVOKE CreateFontIndirect, ADDR BoldFont
      INVOKE SelectObject, wParam, eax

    .ELSEIF eax == IDC_CONTACT

      ; Change the color of the link
      INVOKE SetBkMode, wParam, TRANSPARENT
      INVOKE SetTextColor, wParam, 770000h
      INVOKE GetSysColor, COLOR_BTNFACE
      INVOKE CreateSolidBrush, eax
      ret

    .ENDIF

  .ELSEIF uMsg == WM_COMMAND
    mov eax, wParam
    mov edx, wParam
    shr edx, 16

    .IF dx == BN_CLICKED

      .IF ax == IDC_CONTACT

        ; Open the contact URI
        INVOKE ShellExecute, hWnd, ADDR szOpenCmd, ADDR szContactURI, NULL, NULL, 0

      .ELSEIF ax == IDC_BROWSE

        ; Fill the "open" dialog structure and display the window
        mov Ofn.lStructSize, SIZEOF Ofn
        push hWnd
        pop Ofn.hwndOwner
        mov Ofn.lpstrFilter, OFFSET szOpenFilterString
        INVOKE lstrcpy, ADDR szTargetFile, ADDR szTargetFileName
        mov Ofn.lpstrFile, OFFSET szTargetFile
        mov Ofn.nMaxFile, SIZEOF szTargetFile
        mov Ofn.lpstrTitle, OFFSET szOpenTitle
        mov Ofn.Flags, OFN_HIDEREADONLY
        INVOKE GetOpenFileName, ADDR Ofn

        .IF eax == TRUE

          ; Set the "target file" edit box with the fullpath and the name of the file
          INVOKE SetDlgItemText, hWnd, IDC_TARGETFILE, ADDR szTargetFile

        .ENDIF

      .ELSEIF ax == IDC_PATCH

        ; Create a new thread which executes the operations
        INVOKE CreateThread, NULL, 0, ADDR PatchThread, hWnd, 0, ADDR nPatchThreadID
        INVOKE CloseHandle, eax

      .ELSEIF ax == IDC_EXIT
        INVOKE SendMessage, hWnd, WM_CLOSE, 0, 0
      .ENDIF

    .ENDIF

  .ELSEIF uMsg == WM_BEGINPATCH

    ; Disable the "patch" button
    INVOKE GetDlgItem, hWnd, IDC_PATCH
    INVOKE EnableWindow, eax, FALSE

  .ELSEIF uMsg == WM_ENDPATCH

    ; Enable the "patch" button
    INVOKE GetDlgItem, hWnd, IDC_PATCH
    INVOKE EnableWindow, eax, TRUE

  .ELSEIF uMsg == WM_CLOSE
    INVOKE EndDialog, hWnd, 0
  .ENDIF

  xor eax, eax
  ret
DlgProc ENDP

; The patch procedure
PatchThread PROC hWnd: DWORD
  INVOKE PostMessage, hWnd, WM_BEGINPATCH, 0, 0

  INVOKE GetDlgItemText, hWnd, IDC_TARGETFILE, ADDR szTargetFile, SIZEOF szTargetFile

  ; Obtain the backup file name
  INVOKE lstrcpy, ADDR szBackupFile, ADDR szTargetFile
  INVOKE lstrcat, ADDR szBackupFile, ADDR szBackupFileExt

  ; If the backup file already exists, ask the user if he wants to restore
  INVOKE CreateFile, ADDR szBackupFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL

  .IF eax != INVALID_HANDLE_VALUE
    mov hBackupFile, eax
    INVOKE GetFileSize, hBackupFile, NULL
    push eax
    INVOKE CloseHandle, hBackupFile
    pop eax

    .IF eax == TargetFileSize
      INVOKE MapFileAndCheckSumA, ADDR szBackupFile, ADDR nHeaderSum, ADDR nCheckSum

      .IF eax == CHECKSUM_SUCCESS

        .IF nCheckSum == TargetFileCheckSum
          mov bRestore, TRUE

          INVOKE MessageBox, hWnd, ADDR szRestoreMsg, ADDR szInfoTitle, MB_ICONINFORMATION OR MB_YESNO

          .IF eax == IDYES
            INVOKE MoveFileEx, ADDR szBackupFile, ADDR szTargetFile, MOVEFILE_REPLACE_EXISTING

            .IF eax != 0
              INVOKE MessageBox, hWnd, ADDR szRestoreSuccessMsg, ADDR szInfoTitle, MB_ICONINFORMATION OR MB_OK
            .ELSE
              INVOKE MessageBox, hWnd, szRestoreErrorMsg, ADDR szErrorTitle, MB_ICONERROR OR MB_OK
            .ENDIF
              
          .ENDIF

        .ENDIF

      .ENDIF

    .ENDIF

  .ENDIF

  ; Patch the file
  .IF bRestore == FALSE
    ; Open the file specified in the "target" edit box
    INVOKE CreateFile, ADDR szTargetFile, GENERIC_READ OR GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL

    .IF eax != INVALID_HANDLE_VALUE
      mov hTargetFile, eax

      ; Get the target file size
      INVOKE GetFileSize, hTargetFile, NULL

      .IF eax == TargetFileSize

        ; Computes the file checksum
        INVOKE MapFileAndCheckSumA, ADDR szTargetFile, ADDR nHeaderSum, ADDR nCheckSum

        .IF eax == CHECKSUM_SUCCESS

          .IF nCheckSum == TargetFileCheckSum
            INVOKE IsDlgButtonChecked, hWnd, IDC_BACKUP

            .IF eax == BST_CHECKED

              ; Create the backup file
              INVOKE CopyFile, ADDR szTargetFile, ADDR szBackupFile, 0

              .IF eax == 0
                INVOKE MessageBox, hWnd, ADDR szBackupErrorMsg, ADDR szWarningTitle, MB_ICONWARNING OR MB_OKCANCEL

                .IF eax == IDCANCEL
                  mov bPatch, FALSE
                .ENDIF

              .ENDIF

            .ENDIF

            .IF bPatch == TRUE
              xor ecx, ecx
              lea eax, nOffsets
              lea edx, nNewBytes

              patch:

              ; Save the registers
              pushad
              pushad

              ; Move to the offset
              INVOKE SetFilePointer, hTargetFile, [eax + ecx * 4], NULL, FILE_BEGIN

              ; Restore the registers
              popad

              ; Write the new byte
              add edx, ecx
              INVOKE WriteFile, hTargetFile, edx, 1, ADDR nBytesWritten, NULL

              ; Restore the registers
              popad

              inc ecx
              cmp ecx, SIZEOF nNewBytes
              je endpatch

              jmp patch

              endpatch:

              ; Truncate the file to the new file size
              INVOKE SetFilePointer, hTargetFile, TargetFileNewSize, NULL, FILE_BEGIN
              INVOKE SetEndOfFile, hTargetFile

              ; Display the message of success
              INVOKE MessageBox, hWnd, ADDR szPatchSuccessMsg, ADDR szInfoTitle, MB_ICONINFORMATION OR MB_OK

            .ENDIF

            mov bPatch, TRUE
          .ELSE
            INVOKE MessageBox, hWnd, ADDR szCheckSumErrorMsg, ADDR szErrorTitle, MB_ICONERROR OR MB_OK
          .ENDIF

        .ELSE
          INVOKE MessageBox, hWnd, ADDR szCheckSumErrorMsg, ADDR szErrorTitle, MB_ICONERROR OR MB_OK
        .ENDIF

      .ELSE
        INVOKE MessageBox, hWnd, ADDR szFileSizeErrorMsg, ADDR szErrorTitle, MB_ICONERROR OR MB_OK
      .ENDIF

      INVOKE CloseHandle, hTargetFile
    .ELSE
      INVOKE MessageBox, hWnd, ADDR szOpeningErrorMsg, ADDR szErrorTitle, MB_ICONERROR OR MB_OK
    .ENDIF

  .ENDIF

  mov bRestore, FALSE

  INVOKE PostMessage, hWnd, WM_ENDPATCH, 0, 0
  INVOKE ExitThread, 0
  xor eax, eax
  ret
PatchThread ENDP

END start

 Conclusion

Si vous avez des remarques, des questions, des suggestions, n'hésitez pas à
ajouter un commentaire !

Vous pouvez aussi aller sur mon site pour les mises à jour (bien que j'uploade
régulièrement sur AsmFr.Com) :

http://kickme.to/charloweb (voir "Pastille").  

UPDATE DU 11.08.2003 :
------------------------------------------------ ------------
Suite à plusieurs demandes, j'ai ajouté une vieille version du patch, plus simplifiée.
Celle-ci se trouve dans le fichier "old.zip".

Il faudrait que je fasse une grosse update et ajouter la 2.0, mais je n'ai pas le temps. Vous pouvez me contacter par mail si vous voulez que je vous envoie les sources mises à jour !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

02 février 2008 12:53:41 :
J'ai juste enlevé mon mail (spam)

 Sources du même auteur

Source avec Zip Source avec une capture [MASM32] KEYGEN TEMPLATE
Source avec Zip [WIN32ASM] ARGUMENTS LIGNE DE COMMANDE

 Sources de la même categorie

Source avec Zip Source avec une capture DUMPER HEXADÉCIMAL par BLUEBIBUBBLE
Source avec Zip AFFICHAGE PIXEL EN ASM X86\VESA SOUS XP par wqaxs36
Source avec Zip LA COMMUNICATION ENTRE PROGRAMMES PAR ECHANGES DE MESSAGES par ToutEnMasm
Source avec Zip EDITEUR AVEC RICHEDIT ET OLE (POUR LES PHOTOS..) par ToutEnMasm
Source avec Zip METTRE UN BOUTON DANS UN CONTROLE EDIT par ToutEnMasm

 Sources en rapport avec celle ci

Source avec Zip ECRIRE DANS BDR, DEMO MINIMALE (WIN32) par BruNews
Source avec Zip Source avec une capture RESOLUTION DE SUDOKU par noel70
Source avec Zip OBTENIR LA VERSION DU SYSTEME,SON ENVIRONNEMENT,LE SERVICE P... par ToutEnMasm
Source avec Zip CONNECTIONS INTERNET HTTP.. DIAL-UP CONNECTIONS par ToutEnMasm
Source avec Zip Source avec une capture SOLITAIRE EN MASM32 POUR WINDOWS par BLUEBIBUBBLE

Commentaires et avis

Commentaire de gblade le 11/04/2003 12:42:48

Pourquoi mélanger les invoke avec les call classiques ?

Commentaire de Dean le 11/04/2003 19:05:49

Parce que j'avais envie ;-)

Non plus précisément j'étais au départ parti sur des call, puis j'ai décidé d'utiliser invoke et je n'ai pas eu le temps d'updater le reste du code... Je corrigerai probablement ça dans les prochaines versions.

Commentaire de Dean le 13/04/2003 00:59:13

Voilà, j'ai fait les modifs dans la 1.6.2, en essayant aussi de faire une présentation plus claire. La création du backup est également vérifiée.

Commentaire de Dean le 18/04/2003 21:57:42

J'ai mis en ligne une nouvelle version, la 1.7 dans laquelle un thread est utilisé pour modifier le fichier. De quoi faire des patchs plus robustes ;-)

Commentaire de BlackWizzard le 26/04/2003 17:21:03 administrateur CS

waow!
ça va etre super utile ça...
je V enfin pouvoir patcher mes prog, plutot que de tout redistribuer...
thx! tres bonne source!

Commentaire de anosan le 10/06/2003 18:32:04

salut.
Tout d'abord, ton code sources est très bien, je vais m'en servir.
Juste une question:comment est calculé le cecksum :CRC ou addition pure (j'ai po compris tout le code...je debutre en assembleur...)
++

Commentaire de Dean le 10/06/2003 20:52:03

Le checkum est calculé avec la fonction MapFileAndCheckSumA ou CheckSumMappedFile, située dans la librairie imagehlp.lib. Ce n'est en fait ni une addition ni un calcul du CRC qui est effectué (j'ai vérifié), mais un Win32Checkum, genre ce que l'on trouve dans les PE headers.

Commentaire de azertyuiop123654789 le 08/08/2003 12:41:51

GRose merde, c'est possible de faire mieux en 3 fois moins de place sous Tasm
Ah mais oui, tout de suite c'est pas le même genre d'assemble, MASM etant pour les pédales de l'AsM :)

Commentaire de Dean le 09/08/2003 00:46:33

À mon avis, tout ce qui est faisable avec TASM  l'est aussi avec MASM(ou presque). L'API reste la même, et la place ne vient pas de l'assembleur mais bien du code, au cas où tu ne le savais pas... Pour information, la première version de ce patch était codée sur une centaine de lignes, mais au fur et à mesure des fonctionnalités ont été ajoutées, pour finalement arriver à 600-700 lignes actuellement, ce qui reste tout à fait raisonnable.

Quand à tes remarques, pour ne pas dire tes injures, je les trouve totalement dénuées de sens et elles m'en disent déjà long sur ta maturité. Je trouve dommage qu'à l'heure actuelle des français se comportent encore de cette manière. C'est pitoyable.

Mais comme je ne te connais pas, j'attends que tu publies une source pour voir si la qualité de ton travail est aussi exceptionelle que tu laisses le présumer. En tout cas c'est vraiment mal parti...

Commentaire de BlackWizzard le 09/08/2003 01:23:13 administrateur CS

je en pense pas que ce gamin va poster quoi que ce soit.
C le genre immature qui ne sais pas faire grand chose, mais se permet de critiquer en montrant des connaissances lu dans un article douteux d'un site lycos...
si tu vx que je supprime ce commentaire, dis le moi.

Commentaire de BlackWizzard le 09/08/2003 01:25:42 administrateur CS

heu... dis moi, tu pourrai poster la source "basic"?
G du mal a suivre avec autant de lignes et de boucles conditionnelles...
etant donnée mon nivo plutot faible, je pense qu'une source basic serai plus utile pour apprendre dans mon cas ;)
thx in advance!

Commentaire de Dean le 09/08/2003 01:30:12

Oui tu as bien fait de me le dire, je ferai une update bientôt, car même la source ici présente commence à dater...

Commentaire de BlackWizzard le 09/08/2003 02:53:21 administrateur CS

thx :)

Commentaire de Dean le 11/08/2003 16:33:48

Voilà c'est fait. L'ancienne version est dans le fichier "old.zip".

Commentaire de azertyuiop123654789 le 17/08/2003 20:41:21

Comme c'est mignon :)
Je n'ai fais que dire tout au ce que beaucoup penssent tout bas. Quand au coding AsM tu veux un bout de source de ce que j'ai fait? Allé tiens, je suis bon prince ;)
http://chezstatic.ath.cx/patcheur_136Final.zip

bye

Commentaire de azertyuiop123654789 le 17/08/2003 20:43:34

Ah oui j'allais oublié, matte l'optimisation.

Commentaire de Dean le 17/08/2003 22:57:10

Alors Static Revenge, Khéo ou un imposteur ?
Je pencherai plutôt pour Static Revenge au vu des nombreuses fautes d'orthographes présentes dans le NFO et dans les commentaires ici-même. Je sais aussi que Stat' est un fervent admirateur (et défenseur) de TASM. Et puis il y a le nom du serveur plutôt évocateur...

Bon alors même si je me trompe d'interlocuteur,  cela tombe très bien car j'avais plusieurs choses à te dire.

-- POUR STATIC --
Tout d'abord je te remercie pour tes participations dans les Mementos. C'est grâce à l'une de tes sources ASM, peu différente de celle que tu présentes ici d'ailleurs (hormis la partie graphique) que j'ai pu terminer ce patch. Je me suis inspiré des routines d'écriture dans le fichier...
Je te remercie aussi pour IDA et tous les autres tools que j'ai pu récupérer sur ton serveur il y a quelques mois...
C'est très sympa.
-- --

-- POUR azertyuiop123654789 --
Jusque là, je ne connaissais qu'un Static (?) : l'un des membres les plus populaires de la ShmeitCorp, réputé pour sa touche de professionnalisme me semble-t-il.
Celui que je viens de découvrir, si c'est bien lui,  est tout le contraire: un minable.
Je n'aurai jamais pensé un jour dire ça du grand Static Revenge, et pourtant...

Mais j'espère vraiment m'être trompé de personnage, et que azertyuiop123654789 est un imposteur, auquel cas je présente toutes mes excuses.
-- --

Maintenant, je vais me contenter de répondre plus "classiquement" à ton dernier commentaire :

&gt;&gt; Comme c'est mignon :)

Oui merci, c'est sympa. Je m'en fous de tes réponses "écran", ce qui compte est que tu aies lu et compris le message.

&gt;&gt; Je n'ai fais que dire tout au ce que beaucoup penssent tout bas

Oui, pour ceux qui n'ont pas franchi le cap de la petite guerre entre TASM et MASM. Moi je dis : chacun ses préférences, et je respecte le choix des autres, car ils ont une bonne raison.
Et désormais, je crois aussi que beaucoup pensent tout bas à autre chose, lorsqu'ils ont vu tes messages...

Voilà.

Static, heureux d'avoir pu faire ta connaissance, tu es toujours un "grand" pour moi, et azertyuiop123654789 j'espère que tes propos ne sont qu'accident... Et que tu te redresseras !

Dean

Commentaire de azertyuiop123654789 le 17/08/2003 23:45:44

Oui d'accord, j'ai rien à voir avec Static REvenge mais ce mec me fait trippé!!
Allé, vive la SC et que le memento 6 sorte passk'on est à vos crampons là, miam-miam, il sort quand le memento 6!!
:)

ps: oui je me trouve un peu con et j'espere reresser la barre!
pps: merci à Static pour m'avoir fillé l'url de cette source aussi vite qu'un eclair :)

Commentaire de StaticREvenge le 18/08/2003 10:35:54

Bonjour,
déjà merci à azerty... de m'avoir signalé qu'il avait posté mon source. En contrepartie c'est regrettable de voir son attitude puérile mais bon, il s'en rend compte c'est déjà ça !
Ensuite pour le code oui, c'est vrai qu'il est pas mal du tout, je l'ai fais il y à deux bonnes années avec Kheo en soutiens, surtout morale en cette periode pas très facile de ma vie.. hem-hem, alors vala, grosse bise à Kheo ;)
Pour ce qui est du patcheur en Masm il est pas mal même si il manque d'optimisation mais ça vas, il tourne bien. Le top serait de faire une interface Gui qui servirait à piocher ce coder et tout recompiler automatiquement sans à entrer les adresses à la main. On avait fait ça dans le groupe, ça s'appelait AZ-Compiler puis AZ-Compiler++, ça nous à bien aider, mais ça reste des outils internes au groupe, parmi tant d'autre.. peut être qu'un jours on les rendras publique :))
A par ça c'est sympa de voir des gars qui s'interesse encore à ce merveilleux language, même si il est vrai qu'il est plus épuré sous Tasm que Masm, le transfert de code sur une platforme differente étant plus simple avec un code Tasm.. hmm..bref, je préfère c'est vrai ;)
Sinon pour les fautes d'orthographe oui j'en suis pro, d'ailleur je ne me relis jamais, ça dois surement venir de là le problème, mais bon, c'est comme ça depuis que je suis tous petit alors voilà, arretez de m' embêter avec ça ! :)
Bonne route AsM et n'oubliez pas, écoutez des mods-chip !! =)

ps : venez sur notre chan irc, ça nous fait toujours plaisir, si possible le soir ;)
pps : le memento 6 sortira à  la fin de l'année.

Commentaire de StaticREvenge le 18/08/2003 12:17:59

Tiens, juste en passent, ca serait plus cool de faire le fichier de gestion ressource dans un include et aussi d'y regrouper les include d'api, c'est toujours plus propre :)

Commentaire de StaticREvenge le 18/08/2003 12:58:38

Et oui encore un message. Pour la forme j'ai up la source sur cette page, histoire que tout le monde ne profite.
Sur ce, bonne journée!

Commentaire de Dean le 18/08/2003 15:29:14

Bonjour Static,

Désolé d'avoir tenu des propos irrespectueux envers ta personne, mais la situation était tellement ambigüe... À un moment, j'ai vraiment cru que azertyuiop123654789 et toi-même ne faisaient qu'un.

Je te présente toutes mes excuses, bien sûr.

Sinon c'est génial que tu aies publié ta source, car le code vaut franchement le coup ;-).
Pour mon patch MASM32, je l'ai beaucoup amélioré et j'essaie maintenant de faire un patch maker qui automatise le processus d'initialisation.
J'ajouterai tout ça dès que j'aurai fini.

@+ et longue vie à la ShmeitCorp !

Commentaire de azertyuiop123654789 le 18/08/2003 20:21:14

ouai Static, désolé, j'suis un brèle... Je vais retourner faire du vb, ca m'apprendras...

Commentaire de StaticREvenge le 20/08/2003 14:00:31

Pas de problème Dean, ca roule ;)

Commentaire de warkrom le 11/05/2008 22:31:32

Merci encore pour cette source, plus haut tu disais :

     "Le checkum est calculé avec la fonction MapFileAndCheckSumA ou CheckSumMappedFile,        située dans la librairie imagehlp.lib. Ce n'est en fait ni une addition ni un calcul du CRC qui est effectué (j'ai vérifié), mais un Win32Checkum, genre ce que l'on trouve dans les PE headers."

Mais comment fait-on pour trouver le checksum d'un programme ?

Commentaire de Dean le 19/05/2008 09:42:36

Salut,

Tu peux essayer : http://charloweb.free.fr/files/CheckSum.zip

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Image jpg en Masm32 [ par phoenix1969asm ] Tout d'abord Merci pour l'aide que vous allez m'apporterje debute est je dois dire que je nage un peu ...je souhaiterai afficher une image Jpg de mani MASM32 et les types enumération. [ par frobinet ] Bonjour,comment peut on traduire la séquence suivante qui provient du C en language assembleur MASM32 :enum enum_field_types { FIELD_TYPE_DECIMAL, FIE masm32, include [ par coockiesch ] Hello!!!Plein de bonne volonté, j'ai dl un tuto pour ASM Win32... Voici mon code:.386.MODEL FLAT, STDCALLOPTION CASEMAP : NONEINCLUDE \masm32\in Problème sur les thèmes XP [MASM32] [ par frobinet ] Bonjour,je recherche des infos pour appliquer les thèmes XP en assembleur pour les boutons...J'ai vu qu'il faut utiliser les fonctions OpenThemeData,D [MASM32] Comment utiliser RECORD ? [ par frobinet ] Bonjour,J'essaie de faire un programme simple en RS232 pour piloterun modem et je bloque sur la structure du DCB qui comportele RECORD 'fbits' qui est La gestion de la pile dans masm32 [ par ToutEnMasm ] Par défaut la pile d'un programme masm32 est fixé a 4096 octets soit une page.je sais comment modifier cette taille au link mais je ne sais pas commen Scolling Text masm32 [ par Bros ] HelloJ'aimerais bien faire un scrolling text de bas en haut en masm32 (un peu comme dans le about de emule)Quelqu'un aurait-il une idée de comment pro segment partagé en masm32 [ par anthraxx ] bonjour a tous,je connais l'assembleur mais je suis pas tres habitué a masm32, et je me demandais ce qu'il faut mettre pour qu'un segment donné de ma MASM32 et Performances ???? [ par gor00 ] Salut à tous, Je me posé une question à propos des programmes en assembleur réalisés à l'aide de MASM32. Cet outil propose plusieurs fonctions et libr MASM32 et EDITASM ??? [ par DeAtHCrAsH ] Salut,Je viens de faire un tour sur le site de ToutEnAsm et j'ai dl masm32.Maintenant j'aimerai apprendre le MASM mais je n'ai trouvé aucun bien struc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales