Hallo Hb User,
bin normal ein aktiver Leser und Sucher, nur für dieses Problem muss ich euch mal direkt fragen. Ich habe einen simplen Patch in Masm32 geschrieben, nur leider funktioniert er nicht so wie er es sollte. Habe auch schon seit zwei tagen nach dem Fehler gesucht.
Aber seht selbst:
Offset im Programm:
Wär toll wenn ihr mir helfen könntet den Fehler zu finden.
Vielen Dank
bin normal ein aktiver Leser und Sucher, nur für dieses Problem muss ich euch mal direkt fragen. Ich habe einen simplen Patch in Masm32 geschrieben, nur leider funktioniert er nicht so wie er es sollte. Habe auch schon seit zwei tagen nach dem Fehler gesucht.
Aber seht selbst:
Offset im Programm:
Code:
.data
TargetName db "Patchtest.exe", 0
BackupName db "Patchtest.bak", 0
PatchOffset dd 103Bh
Old db 75h, 39h, 6Ah, 64h
New db 0EBh, 39h, 6Ah, 64h
...
.data?
hInstance HINSTANCE ?
hTarget HINSTANCE ?
RBuffer dd ?
BytesRead db ?
BytesWritten db ?
.code
...
Patch proc hWnd:HWND
invoke GetFileAttributes, ADDR TargetName
.if eax != FILE_ATTRIBUTE_NORMAL
invoke SetFileAttributes, ADDR TargetName, FILE_ATTRIBUTE_NORMAL
.endif
invoke CreateFile, ADDR TargetName, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL
.if eax != INVALID_HANDLE_VALUE
mov hTarget, eax
invoke SendDlgItemMessage, hWnd, CBBackup, BM_GETCHECK, NULL, NULL
.if eax == BST_CHECKED
invoke CopyFile, ADDR TargetName, ADDR BackupName, TRUE
invoke List, hWnd, ADDR s_Backup
.endif
invoke SetFilePointer, hTarget, PatchOffset, NULL, FILE_BEGIN
invoke ReadFile, hTarget, ADDR RBuffer, 4, ADDR BytesRead, NULL
.if BytesRead == 4
mov eax, dword ptr [RBuffer]
.if eax == dword ptr [Old]
invoke SetFilePointer, hTarget, PatchOffset, NULL, FILE_BEGIN
invoke WriteFile, hTarget, ADDR New, 1, ADDR BytesWritten, NULL
.if BytesWritten == 1
invoke List, hWnd, ADDR Success
.else
invoke List, hWnd, ADDR f_Write
.endif
.elseif eax == dword ptr [New]
invoke List, hWnd, ADDR f_Already
.else
invoke List, hWnd, ADDR f_Version
invoke MessageBox, hWnd, ADDR RBuffer, ADDR BytesWritten, MB_OK
.endif
.else
invoke List, hWnd, ADDR f_Read
.endif
.else
invoke List, hWnd, ADDR f_Open
.endif
invoke CloseHandle, hTarget
Ret
Patch endp
Vielen Dank