|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2009-03-29, 10:25 AM | #1 |
註冊會員
|
疑問 - 請益 已找出遊戲內暫存記憶體位置該如何製作程式?
-------------------- 閱讀本主題的最佳解答 -------------------- 各位前輩們好 小弟沒有實際經驗 不懂之處請多包涵 小弟在修改某一款遊戲的數值 已得知遊戲內暫存記憶體位置 而這項記憶體位置是共用的 礙於遊戲本身的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-->沒球種 ============================================= 想修改程式為可在程式上直接調整各種球路 控球 ,速度 , 軌跡 以及修改每位投手的球種 , 並且可以修改完就自動存入記憶體. |
送花文章: 2,
|
向 eric10104 送花的會員:
|
Living (2009-04-04)
感謝您發表一篇好文章 |
2009-03-29, 02:58 PM | #3 (permalink) |
管理版主
|
在 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 |
送花文章: 2013,
|
2009-03-30, 08:03 PM | #5 (permalink) | |
管理版主
|
引用:
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 |
|
送花文章: 2013,
|
向 mini 送花的會員:
|
Living (2009-04-04)
感謝您發表一篇好文章 |
2009-03-31, 04:19 PM | #6 (permalink) |
註冊會員
|
貌似這種? 原始碼是在外國論壇詢問的 , 他向我說明用 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; } |
送花文章: 2,
|
向 eric10104 送花的會員:
|
Living (2009-04-04)
感謝您發表一篇好文章 |
2009-04-01, 11:34 AM | #7 (permalink) | ||
註冊會員
|
我已經大概知道編程 , 但是卻無法修改遊戲中的數值 , 請高手指正我哪邊錯誤了 ? 謝謝 !
程式可以運行 , 我在輸入 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 引用:
MemoryEdit.exe 引用:
此帖於 2009-04-01 01:28 PM 被 eric10104 編輯. |
||
送花文章: 2,
|
向 eric10104 送花的會員:
|
Living (2009-04-04)
感謝您發表一篇好文章 |
2009-04-01, 02:54 PM | #8 (permalink) |
管理版主
|
我想你可能有點誤解 這兩個程式是這樣的 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範例 "如何讀寫外部程式的記憶體" 就是一個藉由 視窗標題來獲得相關程序位址等資訊 較正統的範例 也就是 先執行遊戲 再執行遊戲修改軟體 |
送花文章: 2013,
|