廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 4491 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.070992 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言