All pastes #804201 Raw Edit

Someone

public text v1 · immutable
·published 2007-12-03 05:39 UTC
rendered paste body
.386
.model flat, stdcall
option casemap:none

include \code\winasm\include\windows.inc
include \code\winasm\include\kernel32.inc
include \code\winasm\include\user32.inc

includelib \code\winasm\lib\kernel32.lib
includelib \code\winasm\lib\user32.lib

OFFSET_CHEAT_VAR		equ		08ACA89h ; cheat variable.
OFFSET_CHEAT_CHK 		equ		0660CE7h ; cheat check opcode.

;------------ CONST ---------
.const

g_szWindowTitle			db	"Hitman Blood Money 1.2 cheat enabler - by ZoiD", 0h

g_szHitmanWindowName	db	"Hitman Blood Money", 0h
g_szHitmanClassName		db	"ZSystemClass000",0h

g_szSuccessMsg			db	"Cheats have been enabled.", 0dh,
							 "Press 'C' ingame to bring up the cheat menu.", 0dh,
							"You can close this window.", 0h
						      
g_szAlreadyEnabled		db	"Cheats are already enabled,", 0dh,
							"to disable them you must restart the game.", 0h

g_szFailureMsg			db	"There was a problem enabling Hitman Blood Money 1.2 cheats.", 0h
g_szNoWindow			db	"Hitman Blood Money 1.2 was not found.", 0h

;------------ DATA ----------
.data

;------------ DATA? ----------
.data?

;------------ CODE ----------
.code

main:

push ESI
push EDI
push ECX

xor EDI, EDI

mov ESI, ESP

invoke FindWindow, offset g_szHitmanClassName, offset g_szHitmanWindowName

.if EAX == EDI
	mov EAX, offset g_szNoWindow
	jmp @F
.endif

invoke GetWindowThreadProcessId, EAX, ESI
invoke OpenProcess, PROCESS_ALL_ACCESS, EDI, dword ptr [ ESI ]

push EAX

invoke ReadProcessMemory, EAX, OFFSET_CHEAT_CHK, ESI, 2, EDI
pop EAX

.if word ptr [ ESI ] ==  09090h
	mov EAX, offset g_szAlreadyEnabled
	jmp @F
.endif

mov word ptr [ ESI ], 09090h

invoke WriteProcessMemory, EAX, OFFSET_CHEAT_CHK, ESI, 2, EDI

.if EAX != EDI
	mov EAX, offset g_szSuccessMsg
.else
	mov EAX, offset g_szFailureMsg
.endif

@@:

invoke MessageBox, EDI, EAX, offset g_szWindowTitle, MB_ICONINFORMATION

pop ECX
pop EDI
pop ESI

ret

end main