C#簡易外掛製作

來源:互聯網
上載者:User

【外掛修改器簡單介紹

遊戲外掛分為很多種類型,例如本地用戶端的記憶體修改、遠程伺服器的封包破解。

一般的網遊由於伺服器的機能限制,並不會將遊戲產生的所有資料、計算都提供給伺服器來承擔。經常的,伺服器只會將玩家人物的屬性、血量、加點、金錢、裝備等重要訊息儲存在伺服器本地,計算結果和資料傳遞則是通過加密封包來和用戶端傳輸。

因此網遊如果封包被破解而被使用者發送偽造的封包資料將造成非常嚴重的後果。

 

【C#本地修改器

 

如上所述,雖然封包的一般無法破解,但是利用伺服器無法儲存所有的資訊這個特點,我們可以通過修改本地用戶端的記憶體資料來製作一些建議的外掛,如修改座標達到穿牆、加速的效果。

修改這類的本機資料,一般我們使用到 Cheatgine 來搜尋記憶體特定數值。關於這個這工具網上已經有很多完善的教程,這邊就不贅述了。

這邊通過QQ連連看的樣本來教程一般的C#的外掛製作。 

 

通過Cheatgine搜尋到時間、羅盤、重列的數量、本機座位的記憶體基址位移量,再繪製出介面就可以開始製作。

(CheatEngine)

 

(簡易的介面UI)

 

 

這邊提供一個C#的記憶體修改讀取抽象類別

  1     public abstract class Helper  //記憶體讀寫核心
2 {
3 [DllImportAttribute("kernel32.dll", EntryPoint = "ReadProcessMemory")]
4 public static extern bool ReadProcessMemory
5 (
6 IntPtr hProcess,
7 IntPtr lpBaseAddress,
8 IntPtr lpBuffer,
9 int nSize,
10 IntPtr lpNumberOfBytesRead
11 );
12
13 [DllImportAttribute("kernel32.dll", EntryPoint = "OpenProcess")]
14 public static extern IntPtr OpenProcess
15 (
16 int dwDesiredAccess,
17 bool bInheritHandle,
18 int dwProcessId
19 );
20
21 [DllImport("kernel32.dll")]
22 private static extern void CloseHandle
23 (
24 IntPtr hObject
25 );
26
27 //寫記憶體
28 [DllImportAttribute("kernel32.dll", EntryPoint = "WriteProcessMemory")]
29 public static extern bool WriteProcessMemory
30 (
31 IntPtr hProcess,
32 IntPtr lpBaseAddress,
33 int[] lpBuffer,
34 int nSize,
35 IntPtr lpNumberOfBytesWritten
36 );
37
38 //擷取表單的進程標識ID
39 public static int GetPid(string windowTitle)
40 {
41 int rs = 0;
42 Process[] arrayProcess = Process.GetProcesses();
43 foreach (Process p in arrayProcess)
44 {
45 if (p.MainWindowTitle.IndexOf(windowTitle) != -1)
46 {
47 rs = p.Id;
48 break;
49 }
50 }
51
52 return rs;
53 }
54
55 //根據進程名擷取PID
56 public static int GetPidByProcessName(string processName)
57 {
58 Process[] arrayProcess = Process.GetProcessesByName(processName);
59
60 foreach (Process p in arrayProcess)
61 {
62 return p.Id;
63 }
64 return 0;
65 }
66
67 //根據表單標題尋找視窗控制代碼(支援模糊比對)
68 public static IntPtr FindWindow(string title)
69 {
70 Process[] ps = Process.GetProcesses();
71 foreach (Process p in ps)
72 {
73 if (p.MainWindowTitle.IndexOf(title) != -1)
74 {
75 return p.MainWindowHandle;
76 }
77 }
78 return IntPtr.Zero;
79 }
80
81 //讀取記憶體中的值
82 public static int ReadMemoryValue(int baseAddress, string processName)
83 {
84 try
85 {
86 byte[] buffer = new byte[4];
87 IntPtr byteAddress = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0); //擷取緩衝區地址
88 IntPtr hProcess = OpenProcess(0x1F0FFF, false, GetPid(processName));
89 ReadProcessMemory(hProcess, (IntPtr)baseAddress, byteAddress, 4, IntPtr.Zero); //將制定記憶體中的值讀入緩衝區
90 CloseHandle(hProcess);
91 return Marshal.ReadInt32(byteAddress);
92 }
93 catch
94 {
95 return 0;
96 }
97 }
98
99 //將值寫入指定記憶體位址中
100 public static void WriteMemoryValue(int baseAddress, string processName, int value)
101 {
102 IntPtr hProcess = OpenProcess(0x1F0FFF, false, GetPid(processName)); //0x1F0FFF 最高許可權
103 WriteProcessMemory(hProcess, (IntPtr)baseAddress, new int[] { value }, 4, IntPtr.Zero);
104 CloseHandle(hProcess);
105 }
106
107 }

 

 將找到的記憶體基址定義好

 1         //將值寫入指定記憶體中
2 public void WriteMemory(int baseAdd, int value)
3 {
4 Helper.WriteMemoryValue(baseAdd, processName, value);
5 }
6
7 private int baseAddress = 0x00111DEC; //遊戲記憶體基址
8 private string processName = "QQ遊戲 - 連連看角色版"; //遊戲進程名字
9
10 int temp = 0; int sit = 0;
11

 

 利用所提供的記憶體讀寫抽象類別寫入記憶體,並利用一個timer持續寫入這個記憶體數值以達到鎖定數值的目的。

 1         private void timer1_Tick(object sender, EventArgs e) //凍結時間
2 {
3 int address = ReadMemoryValue(baseAddress);
4 address += 0x49d8;
5
6 if (checkBox1.Checked == true)
7 {
8 timer1.Enabled = true;
9 WriteMemory(address, 700);
10 label1.Text = "已凍結";
11
12 }
13
14 if (checkBox1.Checked != true) label1.Text = "未凍結";
15 }

 

以上就是一個例子,一般的單機遊戲修改器也可以用這樣的方法製作完成。

當然現在有不少網遊有保護盾,可以防止遊戲用戶端記憶體被修改,這類的技術一般是用驅動、核心、進程掛鈎完成,可以利用XT手動解除這些保護。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.