BOOL
Check::PatchPauseWnd()
{
DWORD PatchAddr
=
0x00452720
;
/
/
BYTE OldData[
1
]
=
{
0x56
};
/
/
push esi
BYTE PatchData[
1
]
=
{
0xC3
};
/
/
ret
BYTE bufRead[
1
]
=
{
0
};
BOOL
bIsPatched
=
FALSE;
/
/
是否已找到目标并完成修改
DWORD dwOldProtect;
HANDLE hProcess
=
GetCurrentProcess();
if
(this
-
>bInit)
/
/
如果已初始化就还原
{
VirtualProtect((LPVOID)PatchAddr, sizeof(DWORD), PAGE_READWRITE, &dwOldProtect);
WriteProcessMemory(hProcess, (LPVOID)PatchAddr, &OldData, sizeof(OldData), NULL);
bIsPatched
=
TRUE;
VirtualProtect((LPVOID)PatchAddr, sizeof(DWORD), dwOldProtect, &dwOldProtect);
}
else
{
while
(!bIsPatched)
{
VirtualProtect((LPVOID)PatchAddr, sizeof(DWORD), PAGE_READWRITE, &dwOldProtect);
ReadProcessMemory(hProcess, (LPVOID)PatchAddr, (LPVOID)bufRead, sizeof(bufRead), NULL);
if
(memcmp(bufRead, OldData, sizeof(OldData))
=
=
0
)
{
WriteProcessMemory(hProcess, (LPVOID)PatchAddr, &PatchData, sizeof(PatchData), NULL);
bIsPatched
=
TRUE;
}
VirtualProtect((LPVOID)PatchAddr, sizeof(DWORD), dwOldProtect, &dwOldProtect);
}
}
return
bIsPatched;
/
/
00452720
56
push esi
/
/
00452721
8BF1
mov esi, ecx
/
/
00452723
80BE
15090000
0
>
cmp
byte ptr ds : [esi
+
0x915
],
0x0
/
/
0045272A
75
0F
jnz short PlantsVs.
0045273B
/
/
0045272C
E8
9FFFFFFF
call PlantsVs.
004526D0
/
/
00452731
84C0
test al, al
/
/
00452733
74
06
je short PlantsVs.
0045273B
/
/
00452735
56
push esi
/
/
00452736
E8
750F0000
call PlantsVs.
004536B0
/
/
0045273B
5E
pop esi;
7FFE0010
/
/
0045273C
C3 retn
}