C# 实现鬼泣4修改器,玩的朋友进来看看。我贴点源码 ,散分吧~

sweet_ 2011-11-06 09:27:30
在网上看到好多外挂,大部分都是用VC VB 等其他语言做的,唉!做了C#的粉丝,这能忍.....最近研究了一下,用了近3

天的时间找相关基址,编码测试,大功告成了,现在来分享一下,那个代码比较多,我就贴一部分吧..呵呵

运行界面:



部分代码


/// <summary>
/// 从指定地址读取数据
/// </summary>
/// <param name="address">读取数据的地址</param>
/// <returns>返回读取的数值</returns>
public int ReadValueFromAddress(int pid, int address)
{
IntPtr handle = CheatAPI.OpenProcess(CheatAPI.PROCESS_ALL_ACCESS, false, pid);
byte[] buffer = new byte[4];
IntPtr byteAddress = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0); //获取缓冲区地址
bool read = CheatAPI.ReadProcessMemory(handle, (IntPtr)address, byteAddress, 4, IntPtr.Zero);
CheatAPI.CloseHandle(handle);
return Marshal.ReadInt32(byteAddress);
}
/// <summary>
/// 向指定地址写数据
/// </summary>
/// <param name="address">写数据的地址</param>
/// <param name="name">是修改的名称</param>
/// <param name="StartOrNo">修改还是还原 true修改 false 还原 </param>
/// <returns>写入成功返回true</returns>
public bool WriteValueToAddress(int pid, string name, bool StartOrNo)
{
//无限 修改 开启
try
{
IntPtr handle = CheatAPI.OpenProcess(CheatAPI.PROCESS_ALL_ACCESS, false, pid);
if (StartOrNo)
{
foreach (DevilClass item in ChangeList)
{
string ne = item.CheatName.Substring(0, item.CheatName.IndexOf('_'));
if (ne == name)
{
CheatAPI.WriteProcessMemory(handle, (IntPtr)item.Address, item.Data, item.Data.Length, IntPtr.Zero);
}
}
if (name == "无限魔人")
{
int ad1 = ReadValueFromAddress(pid, ReadValueFromAddress(pid, 0x00e558b8) + 0x24);
CheatAPI.WriteProcessMemory(handle, (IntPtr)(ad1 + 0x1f24), new byte[] { 0x00, 0x40, 0x1c, 0x46 }, 4, IntPtr.Zero); //魔法量
CheatAPI.WriteProcessMemory(handle, (IntPtr)(ad1 + 0x1f28), new byte[] { 0x00, 0x40, 0x1c, 0x46 }, 4, IntPtr.Zero);//格子数
}
if (name == "无限灾厄")
{
int ad2 = ReadValueFromAddress(pid, ReadValueFromAddress(pid, 0x00e558b8) + 0x24);
CheatAPI.WriteProcessMemory(handle, (IntPtr)(ad2 + 0x151f4), new byte[] { 0x00, 0x34, 0x1c, 0x46 }, 4, IntPtr.Zero);
}
if (name == "瞬间加速")
{
int ad3 = ReadValueFromAddress(pid, ReadValueFromAddress(pid, 0x00e558b8) + 0x24);
CheatAPI.WriteProcessMemory(handle, (IntPtr)(ad3 + 0x2834), new byte[] { 0x23, 0xFF, 0x61, 0x43 }, 4, IntPtr.Zero);
}
if (name == "无限RG")
{
int ad4 = ReadValueFromAddress(pid, ReadValueFromAddress(pid, 0x00E558B8) + 0x24);
CheatAPI.WriteProcessMemory(handle, (IntPtr)(ad4 + 0x14dac), new byte[] { 0x46, 0x65 }, 4, IntPtr.Zero);
}
}
else
{
foreach (DevilClass item in RecoverList)
{
string na=item.CheatName.Substring(3, item.CheatName.IndexOf('_') - 3);
if (na == name)
{
CheatAPI.WriteProcessMemory(handle, (IntPtr)item.Address, item.Data, item.Data.Length, IntPtr.Zero);
}
}
}
CheatAPI.CloseHandle(handle);
return true;
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
return false;
}

}



...全文
2942 103 打赏 收藏 转发到动态 举报
写回复
用AI写文章
103 条回复
切换为时间正序
请发表友善的回复…
发表回复
sweet_ 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 102 楼 的回复:]

问一下lz那个一击必杀的地址?不要敌我通用的那种。
[/Quote]

这个内存还真是没找到.不好意思..不过你可以注入一个call..我记得当是只要掉血执行的貌似是同一段代码,不是好像有个什么id是不一样的..可经根据这个你一步一步跟,看到那里不一样..要么你就跟据这个id执行一段跳转(代码要自己注入)
lixinhan920301 2012-10-25
  • 打赏
  • 举报
回复
问一下lz那个一击必杀的地址?不要敌我通用的那种。
冰的学习时光 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 sweet_ 的回复:]

引用 14 楼 loserenew 的回复:
请问网游从理论上讲,可以破解吗,。。。。。。。。。。。。。。。

这个嘛, 我觉得,理论上程序都是可以破解的,只是难度..跟某些方法,不是一般人能弄的通的,网游有好多检测,要想办法能骗过服务器,这也是挺难的,我没弄过网游辅助..毕竟咱是业余的..有时间可又研究一下了..人家有专业的嘛 呵呵
[/Quote]
一般在游戏发布的初期比较容易些,因为游戏保护还不完善,慢慢的跟新再做就难了
ai1012896471 2012-01-19
  • 打赏
  • 举报
回复
英语没学好真后悔啊
飞天凤凰601 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 sweet_ 的回复:]
引用 14 楼 loserenew 的回复:
请问网游从理论上讲,可以破解吗,。。。。。。。。。。。。。。。

这个嘛, 我觉得,理论上程序都是可以破解的,只是难度..跟某些方法,不是一般人能弄的通的,网游有好多检测,要想办法能骗过服务器,这也是挺难的,我没弄过网游辅助..毕竟咱是业余的..有时间可又研究一下了..人家有专业的嘛 呵呵
[/Quote]
现在都用输入法注入方式
sweet_ 2011-11-11
  • 打赏
  • 举报
回复
[Quote=引用 95 楼 zeromac 的回复:]
提个小意见 最好内存搜索也实现一下,因为你用的这种方法在NT6.0以上的内核(支持动态基址)的系统上是行不通的
[/Quote]
呵呵没太理解你的意思..我的地址都是基址+偏移寻过去的...
ZeroMac 2011-11-10
  • 打赏
  • 举报
回复
提个小意见 最好内存搜索也实现一下,因为你用的这种方法在NT6.0以上的内核(支持动态基址)的系统上是行不通的
sweet_ 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 84 楼 wjfwd2009 的回复:]
引用 83 楼 sweet_ 的回复:
wjfwd2009
真的请你尊重别人,别把别人想的跟你一样神奇,也别把别人想的永远都是初学者..要是什么都会,还来CSDN干什么..至少你也是初学者,不然还来这里...呵呵

他上来先骂我没JJ的,他不尊重我,我还要尊重他?你放心我一直很尊重别人,当然不尊重我的例外
//打开线程 返回线程ID
[DllImport("kernel32.dll")……
[/Quote]
那不对了??求指教
wjfwd2009 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 83 楼 sweet_ 的回复:]
wjfwd2009
真的请你尊重别人,别把别人想的跟你一样神奇,也别把别人想的永远都是初学者..要是什么都会,还来CSDN干什么..至少你也是初学者,不然还来这里...呵呵
[/Quote]
他上来先骂我没JJ的,他不尊重我,我还要尊重他?你放心我一直很尊重别人,当然不尊重我的例外
//打开线程 返回线程ID
[DllImport("kernel32.dll")]
public static extern int OpenProcess(int dwDesiredAccess, int bInheritHandle, int dwProcessId);

//向内存写入数据
[DllImport("kernel32.dll")]
public static extern int WriteProcessMemory(int hProcess, IntPtr lpBaseAddress, [In, Out] byte[] lpBuffer, int nSize, ref int lpNumberOfBytesWritten);

//关闭线程

[DllImport("kernel32.dll")]
public static extern void CloseHandle( IntPtr hObject );

就看了一眼注释写的都不对还做教程,是不是我影响的您啊?还是赶紧改改吧行么?
sweet_ 2011-11-09
  • 打赏
  • 举报
回复
wjfwd2009
真的请你尊重别人,别把别人想的跟你一样神奇,也别把别人想的永远都是初学者..要是什么都会,还来CSDN干什么..至少你也是初学者,不然还来这里...呵呵
sirzxj 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 81 楼 wjfwd2009 的回复:]

http://topic.csdn.net/u/20111020/11/bea6c52c-dc72-490b-bb2d-2eca13b9b105.html
就问这种问题还跑到CSDN来问,可见你的智商已经高的不行了,大家都来看看,他问的这个是神马?
[/Quote]

肿么了,你是大神,大神还跑来csdn上鬼混什么啊
wjfwd2009 2011-11-09
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20111020/11/bea6c52c-dc72-490b-bb2d-2eca13b9b105.html
就问这种问题还跑到CSDN来问,可见你的智商已经高的不行了,大家都来看看,他问的这个是神马?
sweet_ 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 78 楼 wjfwd2009 的回复:]
引用 73 楼 sweet_ 的回复:
引用 71 楼 wjfwd2009 的回复:
就JB一炫耀帖

真的烂的理你...最烦你这种人了..自己会,就别来了..我这是给那些想学这方面的说的.对你这等高手,,用不上的..说真的,我感觉你真不乍的..就说话就能看出来...要什么指教的加我QQ..407239898.,,要么就来技术战,别就玩嘴巴牛,等你!

大家都想学,你故意试探你,骂了你……
[/Quote]
http://blog.csdn.net/sweet_/article/details/6951347,自己去看呀,你这么说我,我那有心情!,那会我就是才正在做呀,算了吧迪估计你用不上,还是留给其他人去看吧
wjfwd2009 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 76 楼 sirzxj 的回复:]
引用 72 楼 wjfwd2009 的回复:

还有找到内存的地址,可以通过修改内存里的值的方式筛选,那样的方式比较快,你个菜鸟,用了3天找到这点破地址还在那里笑这个笑那个,要脸么?


你个没JJ的,自己水,还在这里瞎说
[/Quote]
我要没JJ怎么让你妈生下你的?
wjfwd2009 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 73 楼 sweet_ 的回复:]
引用 71 楼 wjfwd2009 的回复:
就JB一炫耀帖

真的烂的理你...最烦你这种人了..自己会,就别来了..我这是给那些想学这方面的说的.对你这等高手,,用不上的..说真的,我感觉你真不乍的..就说话就能看出来...要什么指教的加我QQ..407239898.,,要么就来技术战,别就玩嘴巴牛,等你!
[/Quote]
大家都想学,你故意试探你,骂了你两句,看你回帖不断,我就猜测你比较闲,这么闲为什么不能个资料给大家看看呢,还要跟我对喷,于是我想到了你肯定是炫耀贴了,签订完毕
wjfwd2009 2011-11-09
  • 打赏
  • 举报
回复
我只是心疼我的资源分,别的真没什么,浪费是可耻的你懂么?
不会喷人怎么混论坛?
sirzxj 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 72 楼 wjfwd2009 的回复:]

还有找到内存的地址,可以通过修改内存里的值的方式筛选,那样的方式比较快,你个菜鸟,用了3天找到这点破地址还在那里笑这个笑那个,要脸么?
[/Quote]

你个没JJ的,自己水,还在这里瞎说
sweet_ 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 72 楼 wjfwd2009 的回复:]
还有找到内存的地址,可以通过修改内存里的值的方式筛选,那样的方式比较快,你个菜鸟,用了3天找到这点破地址还在那里笑这个笑那个,要脸么?
[/Quote]

看把你急的...不就是没给你源码嘛..至于这样...我从来没跟别人要过源码..从开始研究到做也也就用了3 ,4天时间吧,谈不上高,希望彼此尊重..喷人,这个我还真不会,这方面你比较牛呀..小弟佩服了
sweet_ 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 72 楼 wjfwd2009 的回复:]
还有找到内存的地址,可以通过修改内存里的值的方式筛选,那样的方式比较快,你个菜鸟,用了3天找到这点破地址还在那里笑这个笑那个,要脸么?
[/Quote]
第一次做ok,我没说我犀利呀,本人就菜鸟一个 呵呵
sweet_ 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 71 楼 wjfwd2009 的回复:]
就JB一炫耀帖
[/Quote]
真的烂的理你...最烦你这种人了..自己会,就别来了..我这是给那些想学这方面的说的.对你这等高手,,用不上的..说真的,我感觉你真不乍的..就说话就能看出来...要什么指教的加我QQ..407239898.,,要么就来技术战,别就玩嘴巴牛,等你!
加载更多回复(75)

110,544

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧