内存补丁程序编写

#include "stdafx.h"
#include <windows.h>

int main(int argc, char* argv[])
{
#define PATCH_ADDRESS 0x00408EC2

	char szFileName[] = "5Star.exe";
	BOOL flag = TRUE;
	BYTE ReadBuffer[128] = {0};
	BYTE TarGetData[] = {0x0F,0x85,0x0A,0x00,0x00,0x00};
	BYTE WriteData[] =	{0x74,0x0E,0x90,0x90,0x90,0x90};
	DWORD Oldpp;

	STARTUPINFO si = {sizeof(STARTUPINFO)};
	PROCESS_INFORMATION pi;
	if (!CreateProcessA(szFileName,0,0,0,0,CREATE_SUSPENDED,0,0,&si,&pi))
	{
		MessageBox(NULL,"CreateProcess Failed","error",MB_ICONERROR);
		return FALSE;
	}
	
	while (flag)
	{
		ResumeThread(pi.hThread);
		Sleep(10);//程序运行10MS
		SuspendThread(pi.hThread);//看程序是否已解码
		ReadProcessMemory(pi.hProcess,(LPVOID)PATCH_ADDRESS,&ReadBuffer,6,NULL);
		if (0 == memcmp(TarGetData,ReadBuffer,6))
		{
			VirtualProtectEx(pi.hProcess,(LPVOID)PATCH_ADDRESS,6,PAGE_EXECUTE_READWRITE,&Oldpp);
			WriteProcessMemory(pi.hProcess,(LPVOID)PATCH_ADDRESS,&WriteData,6,0);
			ResumeThread(pi.hThread);
			flag = FALSE;
		}
	}

	
	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);
	return 0;
}

程序破解思路是    

00408EC2   /0F85 0A000000   jnz 5Star.00408ED2				//改这里的跳位jz
00408EC8   |6A 00           push 0x0
00408ECA   |E8 065C0000     call 5Star.0040EAD5
00408ECF   |83C4 04         add esp,0x4
00408ED2   \8B5D FC         mov ebx,dword ptr ss:[ebp-0x4]
00408ED5    85DB            test ebx,ebx
00408ED7    74 09           je X5Star.00408EE2


转载于:https://www.cnblogs.com/zcc1414/p/3982522.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值