史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2009-03-29, 10:25 AM   #1
eric10104
註冊會員
榮譽勳章

勳章總數
UID - 320197
在線等級: 級別:1 | 在線時長:6小時 | 升級還需:6小時
註冊日期: 2009-03-14
文章: 7
精華: 0
現金: 13 金幣
資產: 13 金幣
預設 疑問 - 請益 已找出遊戲內暫存記憶體位置該如何製作程式?



--------------------
閱讀本主題的最佳解答
--------------------


各位前輩們好 小弟沒有實際經驗 不懂之處請多包涵

小弟在修改某一款遊戲的數值 已得知遊戲內暫存記憶體位置

而這項記憶體位置是共用的

礙於遊戲本身的bug只能借助修改程式 想寫出一款直接修改內定記憶體的程式

請問該如何著手? 請前輩們賜教 謝謝 !

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

目前修改的方式:

必須先到球員編輯區 再回到桌面修改內定記憶體位置 , 修改每位球員都必須要到球員個人編輯區 , 才能找到球種記憶體位置.

每位球員的預設球路記憶體位置都是同一個 , 遊戲內定每位球員只有五種球路 , 但有十一種球路可以選.

修改完畢必須在遊戲內儲存


預設伸卡球(第1種球路位址)
0374027F--->球種編號
0374027A--->movement
03740280--->speed
03740281--->control

預設滑球(第2種球路位址)
0374027C--->球種編號
0374027D--->speed
03740276--->control
03740277--->movement

預設圈指變速球(第3種球路位址)
03740279--->球種編號
03740272--->speed
03740273--->control
03740274--->movement

快速球(第4種球路位址)
0374026e--->球種編號
0374026f--->speed
03740270--->control
03740271--->movement


二縫線球(第5種球路位址)
03740269--->movement
0374026b--->球種編號
0374026c--->speed
0374026d--->control

球種編號+中英文名稱
00-->Fastbal 四縫線速球
01-->Slider 滑球
02-->Curve ball 曲球
03-->Changeup 變速球
04-->Screwbal 螺旋球
05-->Kunckle ball 蝴蝶球
06-->Sinker 伸卡球
07-->Splitter 叉指速球
08-->Cut Fastball 卡特球
09-->2-seam FB 二縫線速球
0a-->Fork ball 指叉球
0b-->Power Curve 大曲球
0c-->12-6 Curve 12-6 曲球
0d-->Circle Change 圈指變速球
0e-->Palm ball 掌心球
0f-->knuckle Curve 彈指曲球
10-->Slurve 滑曲球
11-->Eephus 小便球
12-->沒球種

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

想修改程式為可在程式上直接調整各種球路 控球 ,速度 , 軌跡 以及修改每位投手的球種 , 並且可以修改完就自動存入記憶體.
eric10104 目前離線  
送花文章: 2, 收花文章: 6 篇, 收花: 6 次
回覆時引用此帖
向 eric10104 送花的會員:
Living (2009-04-04)
感謝您發表一篇好文章
舊 2009-03-29, 01:25 PM   #2 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 320197
在線等級: 級別:1 | 在線時長:6小時 | 升級還需:6小時
註冊日期: 2009-03-14
文章: 7
精華: 0
現金: 13 金幣
資產: 13 金幣
預設

想請教必須用到哪些指令? 不是要前輩們幫忙寫程式 請別誤會 ~
eric10104 目前離線  
送花文章: 2, 收花文章: 6 篇, 收花: 6 次
回覆時引用此帖
向 eric10104 送花的會員:
Living (2009-04-04)
感謝您發表一篇好文章
舊 2009-03-29, 02:58 PM   #3 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時
註冊日期: 2002-12-07
文章: 13348
精華: 0
現金: 26462 金幣
資產: 3024322 金幣
預設

在 win api 裡有兩個可用指令
ReadProcessMemory 與 WriteProcessMemory

VB範例:
如何掃描外部程式的記憶體
http://sunh.hosp.ncku.edu.tw/~cww/html/q00534.html

如何讀寫外部程式的記憶體
http://sunh.hosp.ncku.edu.tw/~cww/html/q00486.html
mini 目前線上  
送花文章: 2013, 收花文章: 8003 篇, 收花: 26807 次
回覆時引用此帖
有 2 位會員向 mini 送花:
eric10104 (2009-04-02),Living (2009-04-04)
感謝您發表一篇好文章
舊 2009-03-29, 09:38 PM   #4 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 320197
在線等級: 級別:1 | 在線時長:6小時 | 升級還需:6小時
註冊日期: 2009-03-14
文章: 7
精華: 0
現金: 13 金幣
資產: 13 金幣
預設

謝謝mini 板大回覆

小弟對win api 不是很熟悉 , 試問板大幾個簡易問題 , 幾個簡單問題 , 請別介意 ,

直接使用VB , 參照網址內的語法下去撰寫?

有些記憶體位置我不明白該如何加入 , 小弟不是本科系 , 對C語言認知只有一些 ,

不太明白有些動作該如何去執行 , 有勞 mini 板大幫忙 , 謝謝.
eric10104 目前離線  
送花文章: 2, 收花文章: 6 篇, 收花: 6 次
回覆時引用此帖
向 eric10104 送花的會員:
Living (2009-04-04)
感謝您發表一篇好文章
舊 2009-03-30, 08:03 PM   #5 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時
註冊日期: 2002-12-07
文章: 13348
精華: 0
現金: 26462 金幣
資產: 3024322 金幣
預設

引用:
作者: eric10104 查看文章
謝謝mini 板大回覆

小弟對win api 不是很熟悉 , 試問板大幾個簡易問題 , 幾個簡單問題 , 請別介意 ,

直接使用VB , 參照網址內的語法下去撰寫?

有些記憶體位置我不明白該如何加入 , 小弟不是本科系 , 對C語言認知只有一些 ,

不太明白有些動作該如何去執行 , 有勞 mini 板大幫忙 , 謝謝.
他都寫得很清楚
Read/WriteProcessMemory(ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
所以 lpBaseAddress: 這是要讀取或是寫入的基底位址
就是 記憶體位置

Win API 不是只有 VB能用
C/C++ 要用的話是以引入 .h檔方式

不熟程式語言的話
基本上還是建議你用工具去改
像個人都用 GameMaster
mini 目前線上  
送花文章: 2013, 收花文章: 8003 篇, 收花: 26807 次
回覆時引用此帖
向 mini 送花的會員:
Living (2009-04-04)
感謝您發表一篇好文章
舊 2009-03-31, 04:19 PM   #6 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 320197
在線等級: 級別:1 | 在線時長:6小時 | 升級還需:6小時
註冊日期: 2009-03-14
文章: 7
精華: 0
現金: 13 金幣
資產: 13 金幣
預設

貌似這種? 原始碼是在外國論壇詢問的 , 他向我說明用 C++ 可以用您講的

WriteProcessMemory 直接 寫 Value 落 "Address"

程式語言這方面不是很懂 , 我也是以 FPE 和 GM8修改 , 因為這款遊戲目前 Bug 還很多
, 想編譯這款修改器 , 幫助更多人







#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;
}
eric10104 目前離線  
送花文章: 2, 收花文章: 6 篇, 收花: 6 次
回覆時引用此帖
向 eric10104 送花的會員:
Living (2009-04-04)
感謝您發表一篇好文章
舊 2009-04-01, 11:34 AM   #7 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 320197
在線等級: 級別:1 | 在線時長:6小時 | 升級還需:6小時
註冊日期: 2009-03-14
文章: 7
精華: 0
現金: 13 金幣
資產: 13 金幣
預設

我已經大概知道編程 , 但是卻無法修改遊戲中的數值 , 請高手指正我哪邊錯誤了 ? 謝謝 !

程式可以運行 , 我在輸入 address 有加上16進位的 0x , value 這是修改直接要得值 ?

開啟時會叫出client.exe , client.exe會顯示 0x440004= 7474

代碼是外國高手幫忙的 , 我不知到哪邊錯誤 , 請版上高手幫幫忙 謝謝 ~

遊戲暫存器: 03740268

必須要先到球員編輯區,輸入暫存器位址,才有辦法更改

此為GM8和FPE修改法

這支程式卻讀不到內部的位址,不知到哪邊有錯誤?
====================================

首先 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;
}

此帖於 2009-04-01 01:28 PM 被 eric10104 編輯.
eric10104 目前離線  
送花文章: 2, 收花文章: 6 篇, 收花: 6 次
回覆時引用此帖
向 eric10104 送花的會員:
Living (2009-04-04)
感謝您發表一篇好文章
舊 2009-04-01, 02:54 PM   #8 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時級別:97 | 在線時長:9872小時 | 升級還需:124小時
註冊日期: 2002-12-07
文章: 13348
精華: 0
現金: 26462 金幣
資產: 3024322 金幣
預設



我想你可能有點誤解

這兩個程式是這樣的
client.exe 相當於你要作手腳的程式 (這裡是用來模擬示範當作 遊戲主執行檔 用的)
而 MemoryEdit.exe 會自動執行client.exe這個程式

client.exe因為只是模擬假設他是個遊戲
而內容
是簡單的把某變數不斷印出
變數的記憶體位址 = 7474

而 MemoryEdit.exe 可輸入上面的 變數的記憶體位址
欲改寫的值
輸入後
client.exe 就會顯示
變數的記憶體位址 = 欲改寫的值

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

所以你必須改寫一下 MemoryEdit 之程式碼
把 char szFileName[] = "Client.exe";
之 Client.exe 改成你遊戲的執行檔名稱

接著你就可以輸入第一樓你提供的
記憶體位址來串改
遊戲數值 了

不過
很顯然的 MemoryEdit的設計是假設你的遊戲是一個單純的
只有一個主程序檔 某某某.exe
如果 你的遊戲 是
a.com 呼叫 b.exe 那 MemoryEdit就要改一下設計方式了

個人前面介紹的VB範例 "如何讀寫外部程式的記憶體"
就是一個藉由
視窗標題來獲得相關程序位址等資訊
較正統的範例
也就是
先執行遊戲 再執行遊戲修改軟體
mini 目前線上  
送花文章: 2013, 收花文章: 8003 篇, 收花: 26807 次
回覆時引用此帖
有 2 位會員向 mini 送花:
eric10104 (2009-04-02),Living (2009-04-04)
感謝您發表一篇好文章
舊 2009-04-02, 11:12 AM   #9 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 320197
在線等級: 級別:1 | 在線時長:6小時 | 升級還需:6小時
註冊日期: 2009-03-14
文章: 7
精華: 0
現金: 13 金幣
資產: 13 金幣
預設

謝謝 , 我明白這程式的用意了 , 撰寫經驗不足對程式語言認知不太夠 , 要寫出程式真難...

我暫時先放棄製作修改器 , 先搞懂一些函數 , 再來摸索
eric10104 目前離線  
送花文章: 2, 收花文章: 6 篇, 收花: 6 次
回覆時引用此帖
向 eric10104 送花的會員:
Living (2009-04-04)
感謝您發表一篇好文章
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 11:37 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1