c++实现内存修改进程内存 修改马里奥

1.HWND:表示句柄(handle), Wnd 是变量对象描述,表示窗口,所以hWnd 表示窗口句柄

2.FindWindow函数返回与指定字符串相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。这个函数不会查找子窗口。
函数原型:
HWND FindWindow( LPCTSTR lpClassName,LPCTSTR lpWindowName)//类名,标题名
3.DWORD双字DWORD processid 进程标识符id用双字类型

4.HANDLE:句柄,是Windows用来表示对象的(不是C++的对象),HWND是其中一种,HWND是HANDLE,但HANDLE不只是HWND,HANDLE是一个通用句柄表示,HWND是一个专用表示窗口的句柄。

5.OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。
函数原型:
HANDLE OpenProcess(

DWORD dwDesiredAccess, //渴望得到的访问权限(标志)

BOOL bInheritHandle, // 是否继承句柄

DWORD dwProcessId// 进程标示符

);

6.GetWindowThreadProcessId
函数原型

DWORD GetWindowThreadProcessId(

HWND hWnd,

LPDWORD lpdwProcessId

);返回线程号,注意,lpdwProcessId 是存放进程号的变量。返回值是线程号,lpdwProcessId 是进程号存放处。

当然可以把答案再放到其它地方。如

DWORD dwPID, dwTID;

dwTID = GetWindowThreadProcessId( hWnd, &dwPID );

7.WriteProcessMemory
VC++声明

BOOL WriteProcessMemory(

HANDLE hProcess,//由OpenProcess返回的进程句柄。

LPVOID lpBaseAddress,//要写的内存首地址

LPVOID lpBuffer,//指向要写的数据的指针

DWORD nSize,//要写入的字节数。

LPDWORD lpNumberOfBytesWritten//返回值,非零值代表成功(编程时写0)

);

vc++修改马里奥总结:
1.使用findWindow找到窗口句柄
2.通过GetWindowThreadProcessId找到进程id(pid)
3.OpenProcess打开进程
4.WriteProcessMemory修改内存

 

源代码:

#include<stdio.h>
#include<windows.h>
int main()
{
    HWND h=FindWindow(NULL,"Super Mario XP") ;//获取窗口句柄
    DWORD processid;
    GetWindowThreadProcessId(h,&processid);//获取进程id
    HANDLE Hprocess=NULL;
    Hprocess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processid);//打开进程
    if(Hprocess==0)
    printf("打开进程失败!\n");
    else
    {
        printf("打开进程成功!\n");
        printf("修改为:");
        int n;
        scanf("%d",&n);
        DWORD life;
        life=(DWORD)n;
    //    DWORD lifeaddr=0x004282a2;
        DWORD a=WriteProcessMemory(Hprocess,(LPVOID)(0x004282a2),&life,4,0);//注意参数
        if(a==0)
        printf("修改失败!");
        else
        printf("修改成功!");
    }
    return 0;
}

效果图:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值