c#中用windows api函數修改內存數據
系統
2507 0
這個問題來自伴水的
《劃拳機器人》
,對本文用途感興趣的朋友請大致閱讀伴水的帖子,在帖子中我用這個方法寫了
剪刀五號
,戰績不錯,當然屬于的方法了。
剪刀五號的思路就是每次出拳,盡量讓對方能贏,然后根據一個地址段來掃描內存中對方所贏的局數的保存地址,找到后在得到比賽結果時把內存數據改掉。這個類似以前打單機游戲時用的fpe之類的修改工具。當然,如果對方故意犯規,一局也不贏,你是找不到他的地址的,這樣可以通過正常途徑來獲取勝利。
把剪刀五號核心代碼簡化后,主要為三個api函數
OpenProcess,ReadProcessMemory,WriteProcessMemory
代碼大致如下:
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Runtime.InteropServices;
namespace
ConsoleApplication4
...
{
//
打開不安全代碼開關:項目-右鍵-屬性-生成-允許不安全代碼
class
Program
...
{
[DllImport(
"
kernel32.dll
"
)]
public
static
extern
IntPtrOpenProcess(UInt32dwDesiredAccess,Int32bInheritHandle,UInt32dwProcessId);
[DllImport(
"
kernel32.dll
"
)]
public
static
extern
Int32WriteProcessMemory(IntPtrhProcess,IntPtrlpBaseAddress,
uint
[]lpBuffer,UInt32nSize,IntPtrlpNumberOfBytesWritten);
[DllImport(
"
kernel32.dll
"
)]
public
static
extern
Int32ReadProcessMemory(IntPtrhProcess,IntPtrlpBaseAddress,
uint
[]lpBuffer,UInt32nSize,IntPtrlpNumberOfBytesRead);
static
IntPtrpAddress
=
(IntPtr)
0x12bdad8
;
static
uint
[]Read
=
new
uint
[
1
];
static
uint
[]Write
=
new
uint
[]
...
{
0x64
}
;
static
private
int
mm
=
999
;
static
void
Main(
string
[]args)
...
{
unsafe
...
{
fixed
(
int
*
i
=
&
mm)
...
{pAddress
=
(IntPtr)i;}
}
IntPtrh
=
OpenProcess(
0x1F0FFF
,
0
,(UInt32)System.Diagnostics.Process.GetCurrentProcess().Id);
ReadProcessMemory(h,pAddress,Read,
4
,(IntPtr)
0
);
//
獲取內存數據
Console.WriteLine(Read[
0
]);
//
輸出999
WriteProcessMemory(h,pAddress,Write,
4
,(IntPtr)
0
);
//
修改內存數據
Console.WriteLine(mm);
//
輸出100
Console.Read();
}
}
}
c#中用windows api函數修改內存數據
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元