• C语言游戏脚本:利用API 函数实现一个简单的超级玛丽外挂!


    通过 C 语言编写一个简单的外挂,通过 API 函数修改游戏数据,从而实现作弊功能。

    ● 对象分析

    ● 要用的 API 函数简单介绍

    ● 编写测试效果

    ● 总体评价

    对象分析


     

    本次游戏对象为 Super Mario XP

    没有更新所以可用任意版本 试玩发现人物血量最大为 10,心最大为 99,命最大为 99

    要用的 API 函数简单介绍

    HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName); 

    // 通过类名或窗口名查找,返回窗口句柄

    DWORD GetWindowThreadProcessId(HWND hWnd,LPDWORD lpdwProcessId); 

    // 得到窗口句柄后通过 GetWindowThreadProcessId 这个函数来获得窗口所属进程 ID 和线程 ID

    HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId) 

    // 打开一个已存在的进程对象,并返回进程的句柄

    bool WriteProcessMemory(HANDLE hProcess,LPVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesWritten); 

    // 能写入某一进程的内存区域。入口区必须可以访问,否则操作将失败

    编写测试效果


     

    打开游戏


     

    运行外挂


     

     

    成功执行

    //  01一个简单的内存外挂.cpp

    //  C/C++

    #include <windows.h>

    #include <stdio.h>

    int main() {

       HWND h = ::FindWindow(NULL, "Super Mario XP");  //  寻找并打开进程

       DWORD processid;

       GetWindowThreadProcessId(h, &processid);

       HANDLE hprocess = 0;

       hprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processid);

       if (hprocess == 0) {    //  对应处理

           printf("打开进程失败!

    "

    );

           return 1;

       } else {

           printf("打开进程成功!

    "

    );

           DWORD hp = 10;  //  要修改的游戏数据最大值  

           DWORD heart = 99;

           DWORD life = 99;

           DWORD addr = 0x00428282;    //  通过CE找到的游戏数据地址

           DWORD addr2 = 0x00428292;

           DWORD addr3 = 0x004282a2;

           DWORD res = WriteProcessMemory(hprocess, (LPVOID)addr, &hp, 4, 0);  //  写入内存修改游戏数据

           DWORD res2 = WriteProcessMemory(hprocess, (LPVOID)addr2, &heart, 4, 0);

           DWORD res3 = WriteProcessMemory(hprocess, (LPVOID)addr3, &life, 4, 0);

           return 0;

       }

    总体评价

    由于是简单外挂,没有 GDI 界面和失败对应处理,仅供入门学习交流!

    文章来源:https://cloud.tencent.com/developer/article/1443763


     

    如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!

    C语言C++学习企鹅圈子】,分享(源码、项目实战视频、项目笔记,基础入门教程)

    欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

    编程学习书籍:


     

    编程学习视频:


     
  • 相关阅读:
    go,指针
    go ,字符串的编码及如何统计字符长度,
    go中的map,如python中的字典
    go 可变长参数的应用
    go 数组切片
    Django 模板层
    Django的路由层和视图层
    Django
    Django简介
    JQurey
  • 原文地址:https://www.cnblogs.com/mu-ge/p/14334659.html
Copyright © 2020-2023  润新知