UNIX上的“游戏修改器”

原创 2004年05月12日 18:29:00

在WIN上的游戏玩家,大多对游戏修改器比较熟悉,玩家可以利用游戏修改器来修改游戏里的人物的经验值或金钱等。那么WIN上的游戏修改器是怎么做的那?关于WIN上的游戏修改器的制作方法在网上有很多技术资料,我还清楚的记得,在《程序员》杂志的最早的几刊中对此有比较详细的介绍,那个时候我还在上大学^_^,这里不免为《程序员》杂志做一个广告,这个杂志是我上学时候最爱读的,现在依然如此,每一期都不会错过,从里面我学到了很多东西,在很大程度上丰富了自己的知识面,在这里我要感谢这个杂志,也衷心的希望《程序员》杂志越办越好!

哈哈,不免有些跑题了,我们言归正传,在WIN上有专门的API来对另一个进程的地址空间进行扫描,当然,通过什么样的扫描方式,来定位、猜测游戏中相关数据我就不说了,重要的是这个API提供给我们一个手段来操作另一个进程地址空间里的数据,正常来说,每一个进程都有自己独立的地址空间,这个进程是无法直接访问另一个进程地址空间的数据的。

在UNIX上其实我们也有类似的函数来进行这样的操作,pread、pwrite这些函数允许我们对另一个进程地址空间进行读写,很多调试工具其实就是利用这些接口来完成对另一个程序进行调试的,但是使用这2个函数,要有先决条件,就是要先使用ptrace函数catch住目标进程,然后才能调用pread或pwrite,既然已经catch住目标进程了,其实目标进程当前就停止运行了,那么有没有办法不catch目标进程,我们就能修改另一个进程地址空间的数据那?答案当然是有^_^,我们可以利用进程文件系统proc来轻松完成这件事情。

UNIX上的进程文件系统其实是一个虚拟的文件系统,你使用命令cd /proc,你发现这里面对应每一个进程号都有相应的一个文件夹,这个文件夹里面的东西就有能够帮我们完成修改另一个进程地址空间所需的东东^_^。另外在目录/usr/proc/bin目录里面包含了很多进程文件系统命令,例如:pstack,该命令可以查看另一个进程的堆栈信息,其实该命令的实现就是通过进程文件系统来实现的。

这里我们假设被修改地址空间数据的进程的进程号为3548,那么/proc/3548文件夹里面的文件as就是我们所需要的,这个文件是该进程地址空间里的数据的完整映射,并且我们可以通过标准的读写函数read、write等对这个as文件进行操作,从而达到修改3548进程地址空间里数据的目的,下面我列出了一段简单的代码来描述这个过程:

#include <stdio.h>
#include <sys/mman.h>
#include <errno.h>
#include <sys/fcntl.h>
#include <string.h>

int main(void)
{
        int     procfd;
        int except_value = 0;
        int old_value = 0;
        int new_value = 0;

        unsigned long  address= 0;

        char cmd_string[50];
        char proc_id[50];

        memset(cmd_string, 0, sizeof(cmd_string));
        memset(proc_id, 0 ,sizeof(proc_id));

        system("clear");

        printf("/t/t.............欢迎使用内存数据修改工具......../n");
        printf("/n");
        printf("/n");

        printf("请输入要修改的进程的进程id号...../n");
        scanf("%s",proc_id);

        printf("输入要修改的数据内存地址(输入的数据是十六进制格式,例如:ed80249
8)/n");
        scanf("%x",&address);

        printf("输入期望的数据/n");
        scanf("%d",&except_value);

        sprintf(cmd_string, "%s%s%s","/proc/",proc_id,"/as");
        procfd = open(cmd_string ,O_RDWR);//打开文件/proc//as,获得文件句柄
        if(procfd < 0){
                printf("打开进程文件系统失败,错误码为%d/n", errno);
                exit(1);
        }

        lseek(procfd,address,SEEK_SET);
        read(procfd, &old_value, 4);

        printf("该内存地址上的数据为%d/n", old_value);

        lseek(procfd,address,SEEK_SET);
        write(procfd, &except_value, 4);

        lseek(procfd,address,SEEK_SET);
        read(procfd, &new_value, 4);
        printf("修改后该内存地址上的数据为%d/n", new_value);

}


代码很简单、清晰,大家可以根据这个思路写出更复杂更好玩的东西,欢迎大家就这个东西和我做进一步交流!

游戏修改器制作流程

以休闲游戏“植物大战僵尸”为例,制作无限阳光修改器。 制作游戏修改器,应该有很多人对这类内容感兴趣吧。 发现这个游戏纯属巧合,一日我在百度搜索“植物”这个词时,搜索框下方就列出一大堆“植物大战僵尸...
  • hpp24
  • hpp24
  • 2016年08月30日 16:39
  • 784

C/C++游戏内存修改器

/////////////////////////////////////////////////////////////// // MemRepair.cpp文件 #include "stdaf...
  • a772336300
  • a772336300
  • 2016年10月04日 17:42
  • 1148

如何使用CE来修改游戏并制作一个修改器

方法/步骤 1 首先下载CE,地址在参考资料里面。http://pan.baidu.com/s/1hqkrPcC打开后启动Cheat Engine.exe和练习软件Tutorial...
  • rnZuoZuo
  • rnZuoZuo
  • 2015年12月24日 14:52
  • 1421

自己动手丰衣足食-自己动手修改GBA ROM游戏文件

经过一天的努力终于琢磨出怎么修改GBA的游戏文件也就是俗称的ROM文件,起因是因为偶然看到二手GBM,顿时抑制不住买了一台,可惜买得晚了,完美运行游戏又带金手指功能的烧录卡买不到了。SUPERCARD...
  • l198738655
  • l198738655
  • 2017年03月21日 12:06
  • 3202

CE游戏修改器制作游戏修改器教程

一、先下载CE。 二、打开CE目录下的2个文件:     三、附加进程(图示):     操作到此就结束了。这个教程就是如此简单,下一关同样如此。   (就像玩游戏一样,完全是...
  • qing666888
  • qing666888
  • 2014年12月28日 23:19
  • 983

Unity3d DLL脚本通用解密方法

网上已经有很多文章讲解过Unity3d脚本DLL 解密,基本方法原理都差不多,就是通过HOOK或者调试下断mono_image_open_from_data_with_name这个函数拿到解密后的DL...
  • justFWD
  • justFWD
  • 2017年02月26日 21:05
  • 4694

【术】游戏内存修改器原理及游戏敏感数值加密建议

介绍市面上主流游戏内存修改器的原理,对症下药,让游戏从数据加密层面上更好的抵御这类内存修改器。 主流游戏内存修改器有三大内存搜索功能: 1. 基础数值搜索 2. 模糊搜索 3. 反加密搜索基础数...
  • zhou8jie
  • zhou8jie
  • 2016年02月16日 17:44
  • 3200

Java外挂开发之内存修改器(类似CE)

最近闲着蛋疼,无聊之中用CE耍了一哈游戏,发现挺好用的,于是就想,我自己能不能写个内存修改器呢?于是乎,这个软件就诞生了! 当然我只会Java,C++嘛,了解了解,嘿嘿,所以这个工具也是用Java写的...
  • qq969422014
  • qq969422014
  • 2016年12月09日 21:44
  • 6192

c++实现植物大战僵尸修改器

参考C++项目开发实战入门的第四章内容,书里面写的太简略了,自己实现的时候整理了一下。建立对话框建立一个基于对话框的MFC程序MemoryCheatDlg,绘制主界面,主对话框ID:IDD_MEMOR...
  • u013948010
  • u013948010
  • 2017年12月16日 15:23
  • 82

游戏修改器制作教程四:用API读写内存

上一章讲了用CE读写内存,本章讲如何自己编程实现 本文以制作东方辉针城修改器的实战讲解读写内存...
  • xfgryujk
  • xfgryujk
  • 2017年04月01日 19:52
  • 2150
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UNIX上的“游戏修改器”
举报原因:
原因补充:

(最多只允许输入30个字)