广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 4473 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
eric10104
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[求助] (自行解决了) 已得知游戏内暂存记忆体 该如何制作程式?
各位前辈们好 小弟没有实际经验 不懂之处请多包涵

小弟在修改某一款游戏的数值 已得知游戏内暂存记忆体位置

而这项记忆体位置是共用的

碍于游戏本身的bug只能借助修改程式 想写出一款直接修改内定记忆体的程式

请问该如何着手? 请前辈们赐教 谢谢 !

=============================================

目前修改的方式:

必须先到球员编辑区 再回到桌面修改内定记忆体位置 , 修改每位球员都必须要到球员个人编辑区 , 才能找到球种记忆体位置.

每位球员的预设球路记忆体位置都是同一个 , 游戏内定每位球员只有五种球路 , 但有十一种球路可以选.

修改完毕必须在游戏内储存

预设伸卡球(第1种球路位址)
0374027F--->球种编号  
0374027A--->movement  
037402 ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



[ 此文章被eric10104在2009-04-08 15:11重新编辑 ]



献花 x0 回到顶端 [楼 主] From:台湾 | Posted:2009-03-29 10:08 |
eric10104
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

想请教必须用到哪些指令? 不是要前辈们帮忙写程式 请别误会 ~


献花 x0 回到顶端 [1 楼] From:台湾 | Posted:2009-03-29 13:25 |
eric10104
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

我在别的地方也有提问 , 因为没有实际经验 , 真的搞不太懂以下连结中的解说 ...

请前辈们帮帮忙 谢谢 !


在 win api 里有两个可用指令
ReadProcessMemory 与 WriteProcessMemory

VB范例:
如何扫描外部程式的记忆体
http://sunh.hosp.ncku.edu.t...q00534.html

如何读写外部程式的记忆体
http://sunh.hosp.ncku.edu.t...q00486.html


献花 x0 回到顶端 [2 楼] From:台湾 | Posted:2009-03-29 16:36 |
eric10104
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

其他前辈给了我一些消息 , 他的意思是要我使用 gamemaster , Cheat Engine下去修改

long time ago there is a program called gamemaster. Latest is 8 which release long time ago And there is a program call cheatEngine.

另外一位前辈给了我点代码 ,他说使用C++ , 可以用writeProcessMemory写 Value做Address

(广东话 字面翻过来 有几个字不知道有没有翻错)

他给我的代码

#include <windows.h> // add the windows.h

HANDLE g_hProcess;
DWORD g_arList; // Fill the address you want
int iVal; // Fill the value you want

BOOL WriteMemory(DWORD dwAddr, DWORD dwValue)
{
  return ::WriteProcessMemory(g_hProcess, (LPVOID)dwAddr, &dwValue, sizeof(DWORD), NULL);
}

int main()
{
  char szFileName[] = "target.exe";
  STARTUPINFO si = {sizeof(si)};
  PROCESS_INFORMATION pi;
  ::CreateProcess(NULL, szFileName, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, π);
  ::CloseHandle(pi.Thread);
  g_hProcess = pi.Process;
  if(WriteMemory(g_arList, iVal))
    printf("Write data Sucess!\n");
  ::CloseHandle(g_hProcess);
  return 0;
}


献花 x0 回到顶端 [3 楼] From:台湾中华HiNet | Posted:2009-03-30 11:10 |
eric10104
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

我已经大概知道编程 , 但是却无法修改游戏中的数值 , 请高手指正我哪边错误了 ? 谢谢 !

程式可以运行 , 我在输入 address 有加上16进位的 0x , value 这是修改直接要得值 ?

开启时会叫出client.exe , client.exe会显示 0x440004= 7474

代码是外国高手帮忙的 , 我不知到哪边错误 , 请版上高手帮帮忙 谢谢 ~

====================================

首先 run MemoryEdit.exe
佢会 CreateProcess and run Client.exe
Client.exe 会 不断 咁 print 会 int 既 address and value

之后 MemoryEdit.exe 会要你 input 个 address 你要 edit 既
个 address 可以 抄返 Client.exe Show 出 o黎 既
e.g. 010E9008 就 input 0x010E9008 <= 0x 开头 hex
之后 要你 input 个 value e.g. input 8888

之后 等 5 秒

check 返 Client.exe
佢个 value 会 唔同左

=====================================


Client.exe

复制程式
#include <windows.h>
#include <iostream>

int addr = 7474;

int main()
{
    int i=0;

    while(++i < 1000)
    {
        std::cout << &addr << " = " << addr << std::endl;
        Sleep(1000);
    }
    return 0;
}

MemoryEdit.exe

复制程式
#include <windows.h>
#include <iostream>
#include <string>

using namespace std;

HANDLE g_hProcess;
DWORD g_arList;
int iVal;

BOOL WriteMemory(DWORD dwAddr, DWORD dwValue)
{
    return ::WriteProcessMemory(g_hProcess, (LPVOID)dwAddr, &dwValue, sizeof(DWORD), NULL);
}

int main()
{   
    char szFileName[] = "Client.exe";   

    STARTUPINFO si = {sizeof(si)};
    PROCESS_INFORMATION pi;
    ::CreateProcess(NULL, szFileName, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
    cout << "Please enter the addr [0x1234567...]: ";
    cin >> hex >> g_arList;
    cout << "Please enter the value: ";
    cin.clear();
    cin >> dec >> iVal;
    Sleep(5000);

    CloseHandle(pi.hThread);
    g_hProcess = pi.hProcess;
   
    if(WriteMemory(g_arList, iVal))
        cout << "Memory: " << g_arList << " [Written]\n";
   
    CloseHandle(g_hProcess);
    return 0;
}

::CreateProcess(NULL, szFileName, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

                                                              程式码尾 π   这边是 & pi


献花 x0 回到顶端 [4 楼] From:台湾 | Posted:2009-04-01 11:29 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.058894 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言