Ce programme permet d'inserer une image (GIF,JPG,BMP) dans n'importre quel exe 32bits
cette image s'affichera en premier plan le temps désiré par l'utilisateur
Source / Exemple :
.386
.model flat,stdcall
option casemap:none
include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\gdi32.inc
include c:\masm32\include\comdlg32.inc
include c:\masm32\include\GetValue.inc
include c:\masm32\include\oleaut32.inc
include c:\masm32\include\ole32.inc
include c:\masm32\include\winmm.inc
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\gdi32.lib
includelib c:\masm32\lib\comdlg32.lib
includelib c:\masm32\lib\winmm.lib
includelib c:\masm32\lib\oleaut32.lib
includelib c:\masm32\lib\ole32.lib
includelib c:\masm32\lib\GetValue.lib
DialogProc PROTO : HWND, : UINT, : WPARAM, : LPARAM
OnCommand PROTO : HWND, : WPARAM
FileOpen PROTO : DWORD,:DWORD,:DWORD
FileMap PROTO : DWORD,:DWORD,:DWORD,:DWORD
.CONST
OPCODESIZE equ 70Dh
OFF_JUMP_PT_ENTRY equ 332h
OFF_ELAPSE_TIME equ 45Ah
IDD_DIALOG equ 100
IDB_BKG equ 300
IDB_EXIT equ 301
IDB_OPEN1 equ 302
IDB_OPEN2 equ 303
IDB_PATCH equ 304
IDC_EXENAME equ 400
IDC_BMPNAME equ 401
IDC_TIME equ 402
IDC_TEST equ 403
CR_BACKGROUND equ 00876265h
CR_TEXT equ 00FFDADDh
KEYCOLOR equ 00FEFEFEh
NOTE_C equ 403C78C0h
NOTE_E equ 40407BC0h
NOTE_G equ 40437BC0h
.DATA
old_pt_entry DD 0
new_pt_entry DD 0
imagebase DD 0
off_new_section DD 0
off_to_file DD 0
off_v_data DD 0
hBKG DD 0
hBgColor DD 0
hBgEdit DD 0
hPatch DD 0
ptr_PE DD 0
h_mapPE DD 0
h_filePE DD 0
SIZE_PE DD 0
ptr_PICTURE DD 0
h_mapPICTURE DD 0
h_filePICTURE DD 0
SIZE_FILE_PICTURE DD 0
FilterStrBMP db "Image Files (*.bmp;*.gif;*.jpg)",0,"*.bmp;*.gif;*.jpg",0,0
FilterStrEXE db "Executable Files (*.exe)",0,"*.exe",0,0
filename db 200 dup(0)
lpfile db 50 dup(0)
OPFN dd 76
hwnd dd 0,0,0,0,0,0,offset filename,200
dd offset lpfile,50,0,0,0,0,0,0,0
msg1 db '(*.EXE) NON VALIDE !',0
msg2 db '(*.EXE) NON PATCHABLE',0
msg3 db '(*.EXE) DEJA CHARGER OU EN LECTURE SEUL !'
STRNULL db 0
STRDEFT db '5000',0
hMidiOut DD 0
include patch03.hex
include xlpicture.asm
include skinbtn.asm
.CODE
PROGRAMME:
;###########################################
;------------------- WINMAIN ---------------
;###########################################
Invoke XLoadImage,IDB_BKG
Invoke CreatePatternBrush,eax
mov hBKG,eax
INVOKE CreateSolidBrush, CR_BACKGROUND
mov hBgColor, eax
INVOKE DialogBoxParam,400000h, IDD_DIALOG,0, ADDR DialogProc, 0
INVOKE DeleteObject,hBKG
INVOKE DeleteObject,hBgColor
INVOKE ExitProcess, 0
;###########################################
;------------------- DIALOGPROC ------------
;###########################################
DialogProc PROC hWnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM
mov eax,[ebp+12]
cmp eax,WM_CTLCOLORDLG
je WMCOLORDLG
cmp eax,WM_CTLCOLORSTATIC
je WMCOLORSTATIC
cmp eax,WM_CTLCOLOREDIT
je WMCOLOREDIT
cmp eax,WM_LBUTTONDOWN
je WMLBTNDOWN
cmp eax,WM_COMMAND
je WMCOMMAND
cmp eax,WM_INITDIALOG
je WMINITDLG
cmp eax,WM_CLOSE
je WMCLOSE
jmp DLG
WMCOLORDLG: mov eax, hBgColor
ret
WMCOLORSTATIC: INVOKE SetBkMode, wParam, TRANSPARENT
INVOKE GetDlgCtrlID, lParam
cmp eax,IDC_TEST
jne @static
mov eax,hBKG
ret
@static: INVOKE SetTextColor, wParam, CR_TEXT
mov eax, hBgColor
ret
WMCOLOREDIT: INVOKE SetBkMode, wParam,TRANSPARENT
INVOKE SetTextColor, wParam, CR_TEXT
mov eax,hBgColor
ret
WMLBTNDOWN: Invoke SendMessage,hWnd,WM_NCLBUTTONDOWN,HTCAPTION,[ebp+20]
jmp DLG
WMCOMMAND: Invoke OnCommand,hWnd,wParam
jmp DLG
WMINITDLG: mov eax,hWnd
mov hwnd,eax
Invoke midiOutOpen,ADDR hMidiOut,0,0,0,CALLBACK_NULL
Invoke XButton,hWnd,NOTE_C,219,208,IDB_EXIT,600
Invoke XButton,hWnd,NOTE_E,330,88,IDB_OPEN1,601
Invoke XButton,hWnd,NOTE_G,330,128,IDB_OPEN2,602
Invoke XButton,hwnd,NOTE_C,37,208,IDB_PATCH,603
Invoke GetDlgItem,hWnd,603
mov hPatch,eax
Invoke ShowWindow,eax,SW_HIDE
jmp DLG
WMCLOSE: Invoke midiOutClose, hMidiOut
INVOKE EndDialog, hWnd, 0
DLG: xor eax, eax
ret
DialogProc ENDP
;##################################################
;----------------------- ONCOMMAND ----------------
;##################################################
OnCommand PROC hWnd: HWND, wParam : WPARAM
mov eax,wParam
cmp ax,602
je CMD_OPENBMP
cmp ax,601
je CMD_OPENEXE
cmp ax,603
je CMD_PATCH
cmp ax,600
je CMD_QUIT
ret
CMD_OPENBMP: Invoke FileOpen,ADDR h_filePICTURE,ADDR FilterStrBMP,0
test eax,eax
jnz @mapbmp
ret
@mapbmp: invoke GetFileSize, eax, NULL
mov SIZE_FILE_PICTURE,eax
Invoke FileMap,h_filePICTURE,ADDR h_mapPICTURE,PAGE_READONLY,0
mov ptr_PICTURE,eax
call GetInfoBMP
Invoke UnmapViewOfFile,ptr_PICTURE
Invoke CloseHandle,h_mapPICTURE
ret
CMD_OPENEXE: Invoke FileOpen,ADDR h_filePE,ADDR FilterStrEXE,GENERIC_WRITE
test eax,eax
jnz @mapexe
ret
@mapexe: invoke GetFileSize, eax, NULL
mov SIZE_PE,eax
Invoke FileMap,h_filePE,ADDR h_mapPE,PAGE_READWRITE,0
mov ptr_PE,eax
call GetInfoPE
Invoke UnmapViewOfFile,ptr_PE
Invoke CloseHandle,h_mapPE
ret
CMD_PATCH: Invoke ShowWindow,hPatch,SW_HIDE
Invoke EnableWindow,hPatch,FALSE
mov eax,OPCODESIZE
add eax,SIZE_FILE_PICTURE
add eax,4
test eax,511
jz @mul512
shr eax,9
inc eax
shl eax,9
@mul512: add eax,SIZE_PE
Invoke FileMap,h_filePE,ADDR h_mapPE,PAGE_READWRITE,eax
mov ptr_PE,eax
Invoke FileMap,h_filePICTURE,ADDR h_mapPICTURE,PAGE_READONLY,0
mov ptr_PICTURE,eax
call Patch
Invoke UnmapViewOfFile,ptr_PE
Invoke CloseHandle,h_mapPE
Invoke CloseHandle,h_filePE
mov h_filePE,0
Invoke UnmapViewOfFile,ptr_PICTURE
Invoke CloseHandle,h_mapPICTURE
Invoke CloseHandle,h_filePICTURE
mov h_filePICTURE,0
Invoke SetDlgItemText ,hwnd,IDC_EXENAME,ADDR STRNULL
Invoke SetDlgItemText ,hwnd,IDC_BMPNAME,ADDR STRNULL
Invoke SetDlgItemText ,hwnd,IDC_TIME,ADDR STRDEFT
ret
CMD_QUIT: Invoke SendMessage,hwnd,WM_CLOSE,0,0
ret
OnCommand ENDP
;#####################################################
;-------------- OUVERTURE D'UN FICHIER AVEC BOITE OPEN
;#####################################################
FileOpen PROC addrhfile : DWORD,addrfilter : DWORD,DesirAccess : DWORD
;--------boite open
lea eax,filename
mov byte ptr [eax],0
mov eax,addrfilter
mov [OPFN+12],eax
mov [OPFN+52],OFN_LONGNAMES or OFN_HIDEREADONLY \
or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
mov [OPFN+44],0
push offset OPFN
call GetOpenFileName
test eax,eax
jz Annuler
;----------------------fermer hande file
mov edi,addrhfile
Invoke CloseHandle,[edi]
;-----------------------désactive btn patch
Invoke ShowWindow,hPatch,SW_HIDE
Invoke EnableWindow,hPatch,FALSE
;-------------ouvrir fichier
mov eax,DesirAccess
or eax,GENERIC_READ
Invoke CreateFile,ADDR filename,eax,\
0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
mov edx,eax
inc edx
jnz openOK
push offset msg3
call MSGERROR
xor eax,eax
jmp Annuler
openOK:
stosd
Annuler:
ret
FileOpen ENDP
;############################################
;----------------------- MAPPAGE D'UN FICHIER
;############################################
FileMap PROC hfile : DWORD,addrhMap : DWORD,desirAccess : DWORD,sizeMap : DWORD
mov esi,desirAccess
Invoke CreateFileMapping,hfile,0,esi,0,sizeMap,0
mov edi,addrhMap
mov [edi],eax
;-------------optenir le pointeur
add esi,2
Invoke MapViewOfFile,eax,esi,0,0,0
ret
FileMap ENDP
;//////////////////////////////////////
;------------------OPTENIR INFO BITMAP
;//////////////////////////////////////
GetInfoBMP proc
Invoke SetDlgItemText ,hwnd,IDC_BMPNAME,ADDR filename
mov eax,h_filePE
test eax,eax
jz nopatch
Invoke ShowWindow,hPatch,SW_SHOW
Invoke EnableWindow,hPatch,TRUE
nopatch: ret
GetInfoBMP endp
;//////////////////////////////////////
;----------------- OPTENIR INFO SUR PE
;//////////////////////////////////////
GetInfoPE proc
;----test validité
cmp word ptr [eax],'ZM'
jnz noValidePE
;--------taille sections header
mov edx,[eax+60];PEH
add eax,edx ;+ptr_mapp
;----test validité
cmp dword ptr [eax],4550h
jnz noValidePE
push [eax+40]
pop old_pt_entry
push [eax+52]
pop imagebase
mov di,[eax+6] ;nbrsection
mov cx,[eax+6]
shl di,5
shl cx,3
add di,cx
movzx edi,di
;---------taille place libre dans header
add edx,248 ;+size peh
add edx,edi ;+size section header
mov off_new_section,edx
add edx,[eax+212];+size bound import
mov ecx,[eax+84] ;size header to file
sub ecx,edx
;--------
cmp ecx,40
jl noPlace
Invoke SetDlgItemText ,hwnd,IDC_EXENAME,ADDR filename
mov eax,h_filePICTURE
test eax,eax
jz noPa
Invoke ShowWindow,hPatch,SW_SHOW
Invoke EnableWindow,hPatch,TRUE
ret
noValidePE:
push offset msg1
call MSGERROR
ret
noPlace:
push offset msg2
call MSGERROR
noPa:
ret
GetInfoPE endp
;###############################
;---------------------- PATCHAGE
;###############################
Patch proc
;-----decalage du bound import
mov eax,ptr_PE
add eax,[eax+60]
inc word ptr [eax+6];inc nbr sections
mov ecx,[eax+212] ;size bound import
test ecx,ecx
jz noboundimport
mov esi,[eax+208] ;off bound import
add esi,ecx
add esi,ptr_PE
add dword ptr [eax+208],40
mov edi,[eax+208]
add edi,ecx
add edi,ptr_PE
std
rep movsb
cld
noboundimport:
;###################################################################
;--------------ECRIRE DS HEADER : AJOUT SECTION,NOUVEAU PT D'ENTREE,
; NOUVELLE TAILLE DE L'IMAGE
;###################################################################
;------------- AJOUT SECTION
mov edi,off_new_section
add edi,ptr_PE
;-------------- NOM
mov dword ptr [edi],'ttt.'
mov dword ptr [edi+4],0
;-------------- TAILLE VIRTUELLE
mov eax,OPCODESIZE
add eax,SIZE_FILE_PICTURE
mov dword ptr [edi+8],eax
;-------------- offset virtuelle
mov eax,[edi-32]
add eax,[edi-28]
test eax,0FFFh
jz @mul1000h
shr eax,12
inc eax
shl eax,12
@mul1000h:
mov dword ptr [edi+12],eax
mov edx,imagebase
add edx,eax
mov off_v_data,edx
mov new_pt_entry,eax
;------- size to file
mov eax,OPCODESIZE;size_opcode
add eax,SIZE_FILE_PICTURE
test eax,511
jz mul200h
shr eax,9
inc eax
shl eax,9
mul200h:
mov dword ptr [edi+16],eax
;------- off to file
mov eax,[edi-24]
add eax,[edi-20]
mov dword ptr [edi+20],eax
mov off_to_file,eax
;----------
mov dword ptr [edi+24],0
mov dword ptr [edi+28],0
mov dword ptr [edi+32],0
;-------- caracteristic
mov dword ptr [edi+36],0FE000020h
;--------------- NOUVELLE TAILLE DE L'IMAGE
mov eax,[edi+8]
add eax,[edi+12]
test eax,0FFFh
jz SizeOfImage
and eax,0FFFFF000h
add eax,1000h
SizeOfImage:
mov edx,ptr_PE
add edx,[edx+60]
mov [edx+80],eax
;----------------- NOUVEAU PT D'ENTREE
push new_pt_entry
pop [edx+40]
;#########################################################
;----------------- PETITE MODIFICATION DANS L'OPCODE -----
;#########################################################
lea edi,opcode
;-------- CALCUL DU SAUT AU POINT D'ENTREE INITIAL
mov edx,new_pt_entry
add edx,OFF_JUMP_PT_ENTRY
add edx,3
sub edx,old_pt_entry
not edx
mov dword ptr [edi+OFF_JUMP_PT_ENTRY],edx ;saut ancien point d'entree
;------- REGLAGE TIMER
Invoke GetDlgItemInt,hwnd,IDC_TIME,0,FALSE
push eax
pop [edi+OFF_ELAPSE_TIME] ;elapse time
;#####################################################################
;--------------- COPIE DE L'OPCODE ET DU FICHIER IMAGE DANS PROG CIBLE
;#####################################################################
;---------- copie opcode dans fichier
lea esi,opcode
mov edi,ptr_PE
add edi,off_to_file
mov ecx,OPCODESIZE
rep movsb
;---------- copie fichier image dans fichier
mov esi,ptr_PICTURE
push SIZE_FILE_PICTURE
pop [edi]
add edi,4
mov ecx,SIZE_FILE_PICTURE
rep movsb
ret
Patch endp
;////////////////////////////////////////////
MSGERROR PROC
Invoke MessageBox,hwnd,[esp+12],ADDR lpfile,MB_ICONEXCLAMATION
Invoke CloseHandle,h_filePE
mov h_filePE,0
Invoke SetDlgItemText ,hwnd,IDC_EXENAME,ADDR STRNULL
ret 4
MSGERROR ENDP
end PROGRAMME
Conclusion :
Je tiens à remercier BLUEBIBUBBLE pour sa participation graphique
j'ai mis un Readme.txt dans le zip.
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.