本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识
代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它...
写这个教程只是为了让玩家更好地体验所爱的单机游戏,顺便学到些逆向知识,我不会用网络游戏做示范,请自重

CE也不是专门用来调试的,本章将介绍几款调试工具,并且完善上一章的东方辉针城修改器

本章提到的工具都可以在看雪学院或我的网盘下载

OllyDbg

OllyDbg简称OD,现在一般用它的修改版OllyICE,其实是一样的
OD是最常用的Windows程序反汇编调试器,可惜不能调试64位程序(目前64位版开发中),不能调试Ring0层(内核态)
OD官方网站
我更习惯1.x版本,但是64位系统只能用2.x版本...

看看这界面,这语法高亮,比WinDbg不知道高到哪里去了

需要记住几个常用快捷键:
F2下断点,F7单步步入,F8单步步过,F9运行,Alt+C查看反汇编,Alt+K查看堆栈,Alt+B查看断点

写个小程序CrackMe示范一下如何用OD破解

int _tmain(int argc, _TCHAR* argv[])
{printf("请输入密码或注册码或序列号什么的:");TCHAR password[100];_getts_s(password);// 只是为了做个例子,现在不会有这么简单验证密码的程序了吧if (_tcscmp(password, _T("PASSWORD")) == 0)MessageBox(NULL, _T("注册成功!"), _T("CrackMe"), MB_OK);elseMessageBox(NULL, _T("注册失败!YOU LOSER!"), _T("CrackMe"), MB_OK);return 0;
}

运行CrackMe,用OD附加(在菜单-文件-附加),按F9运行

因为输入错误密码会弹出对话框提示,我们就在MessageBoxW下个断点(注意MessageBox是个宏,根据程序是ANSI还是UNICODE字符集决定是MessageBoxA还是MessageBoxW,要是不知道到底调用了哪个那就两个都下断吧,不过它们最后都会调用MessageBoxTimeoutW)
在下面的命令栏里输入bp MessageBoxW,回车

按F9运行,随便输入个密码后断下,按Alt+K查看堆栈

看到那个调用从CrackMe.011F1084了吧,双击它来到调用MessageBoxW的地方

看011F1074   /75 07           jne     short 011F107D
这条跳转指令实现了就是注册失败,没实现就是注册成功,双击把它改成nop就永远不实现了

点右键,在菜单里选编辑-复制所有修改到可执行文件

在弹出的窗口里再点右键选保存文件

然后运行保存好的程序,随便输入个密码都能注册成功了

IDA Pro

IDA是一个世界顶级的交互式反汇编工具,它的使用者囊括了软件安全专家,军事工业,国家安全信息部门,逆向工程学者,黑客
IDA专门用来静态调试,就是不运行程序只看代码,缺点是程序加了壳就看不出什么了

它还有一个强大的插件,按F5把当前函数翻译成C语言(不过只在32位版有)

如果用OD看不出什么就用IDA看吧

WinDbg

WinDbg是微软发布的调试工具,支持32位和64位程序,可以调试Ring0层(内核态)
要记很多命令,用着很不爽,除了调试内核我都不用

东方辉针城修改器V3

这次我要给这个修改器加上更强大的功能:无敌和秒杀

无敌功能

用OD附加游戏,在下面的内存窗口按Ctrl+G转到上一章搜索到的残机地址

然后下个硬件断点或内存断点(内存断点会比较卡,硬件断点会断在操作这个内存的指令的下一条指令,内存断点会断在操作这个内存的指令,我优先使用硬件断点)

然后在游戏中故意撞个敌机或弹幕,断在44F61D,上面那条就是给残机赋值的指令
(这时可以把硬件断点删除了,在查看-硬件断点里)

看堆栈是哪里调用了这个函数,来到上一层

上面有个跳转跳过了这个函数,把它改成jmp试试,按F9运行,回到游戏再撞弹幕
发出了"biu"的声音,然后就动不了了...
回到OD把刚才的修改撤销(选中修改后的jmp指令,按Alt+backspace),又复活了
看看这条跳转的条件,我怀疑[edi+0x690]是玩家状态的flag(死亡flag(笑))

在44DD8B这里按F2下断,再撞弹幕断下
在下面的内存窗口按Ctrl+G转到edi+0x690

刚撞弹幕就断下,这里的值是0,说明0就是死亡flag了

现在要找是哪个代码给状态flag赋值了0,不过OD要做这件事很难(因为总是有写入这个地址的指令!),还是交给CE做吧

(因为重启了游戏,地址变了)

第一条就是一直在写入的那条,我猜这个flag其实是玩家在当前状态经过的帧数?
第二条是撞弹幕时出现的,赋值为0,就是它了
后面的是复活后出现的,不用管

在OD代码窗口按Ctrl+G跳转到0x44F853

我看了一下这个函数没有能跳过赋值[edi+0x690]=0的代码,大概这个函数是死亡函数

下个断点,撞弹幕,看堆栈,往上一层看看有没有跳过调用这个函数的

这条指令刚好跳过了这个调用,把它改成jmp再撞弹幕试试

成功了,怎么撞弹幕和敌机都没事
赶紧记下地址0x0044F094,原机器码7F,修改后EB


(⑨又被骑脸了)

然后我发现死亡函数的上一层是碰撞检测函数,普通弹幕和激光用的是不同的碰撞检测,所以只改这一处对激光没用
可以像上面那样在死亡函数下断点然后撞激光,不过既然知道了44F7A0是死亡函数可以用神器IDA查看哪里调用了这个函数

总共有4个引用,全部修改岂不是很麻烦,所以我打算把死亡函数修改成什么也不做直接返回

地址0x0044F7A0,原机器码55,修改后C3

测试一下,完美

秒杀功能

首先随便找个BOSS(⑨)虐一虐,用CE搜减少的数值搜出三个HP地址

那就修改试试吧,修改第一个和第三个都没用,被同步成第二个,那么第二个就是真HP(我猜是敌机数组中的HP,而第一个是BOSS HP,每帧会和第二个同步)

找出修改HP的代码(不装逼用OD了,还是用CE干这个好)

这是赋值HP的指令,赋值0就可以实现秒杀了
给寄存器赋值0最好的办法是用异或(xor)指令,只占2字节而且速度比mov快

地址0x004214C6,原机器码2B C1,修改成31 C0

玩一会,连小怪都可以秒杀了,看来这个函数是敌机类的减HP函数,对敌机通用的

等等,怎么下一个BOSS开符卡后没有秒杀,再找找哪个代码修改了HP

原来上面还有一个修改HP的代码,用于开了符卡的BOSS
为了不破坏栈我们不能修改pop指令,修改上面那个add吧
地址0x004214BA,原机器码03 C6,修改成31 C0

好了,这下对所有的敌机都能秒杀了

实现代码(完整源码见GitHub):

// 修改关于无敌的代码
void CTH14CheatDlg::modifyInvincibleCode()
{static const BYTE originalCode[] = { 0x55 };static const BYTE modifiedCode[] = { 0xC3 };if (m_process != NULL){WriteProcessMemory(m_process, (LPVOID)0x0044F7A0, m_invincible ? modifiedCode : originalCode, sizeof(originalCode), NULL);}
}// 修改关于秒杀的代码
void CTH14CheatDlg::modifyMortalBlowCode()
{static const BYTE originalCode1[] = { 0x2B, 0xC1 };static const BYTE modifiedCode1[] = { 0x31, 0xC0 };static const BYTE originalCode2[] = { 0x03, 0xC6 };static const BYTE modifiedCode2[] = { 0x31, 0xC0 };if (m_process != NULL){WriteProcessMemory(m_process, (LPVOID)0x004214C6, m_mortalBlow ? modifiedCode1 : originalCode1, sizeof(originalCode1), NULL);WriteProcessMemory(m_process, (LPVOID)0x004214BA, m_mortalBlow ? modifiedCode2 : originalCode2, sizeof(originalCode2), NULL);}
}

不过做到这种程度了还能好好玩游戏吗,所以作弊还是适可而止吧

游戏修改器制作教程五:OllyDBG和其他调试工具相关推荐

  1. 游戏修改器制作教程四:用API读写内存

    本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它... 写这个教程只是为了让玩家更好地体验所爱的 ...

  2. 游戏修改器制作教程⑨:修改D3D渲染

    教程面向有C\C++基础的人,最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它... 写这个教程只是为了让玩家更好地体验所爱的单 ...

  3. 游戏修改器制作教程二:键盘鼠标钩子

    本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它... 写这个教程只是为了让玩家更好地体验所爱的 ...

  4. CE游戏修改器制作详解

    傻瓜教程目标是:注重操作,不求深入,主要是为了培养各位的兴趣和带你迅速入门. 先简单介绍下什么叫CE,CE的全称是Cheat Engine. CE是目前最优秀的游戏修改器,不是之一,这个工具绝对值得你 ...

  5. 游戏修改器制作-黑客入门

    工具:SoftICE.金山游侠2002.VC++7.0.PE查看器.SPY++ 测试平台:Window2000 Professional SP2 首先我介绍一下将会用到的工具: 1. SoftICE( ...

  6. 游戏修改器制作教程一:键盘鼠标模拟

    本教程面向有C\C++基础的人,最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译,如果你还在用VC6请趁早丢掉它... 写这个教程只是为了让玩家更好地体验所爱的 ...

  7. 发布新版本,以后专用游戏修改器通用框架不做了。

    现在发布的是:专用游戏修改器制作工具.NET版 V1.0.0.0 该制作工具下载地址:http://download.csdn.net/source/195988 专用游戏修改器制作工具完整说明文件: ...

  8. root的游戏修改器,手游root修改器

    有什么好用的游戏修改器? 有<金山游侠>.<梦幻魔盒修改器>.<星云修改器>.<CE游戏修改器>. <金山游侠> 名称:金山游侠修改器下载v ...

  9. python怎么制作游戏修改器_如何使用CE来修改游戏并制作一个修改器

    1 首先下载CE,地址在参考资料里面.http://pan.baidu.com/s/1hqkrPcC打开后启动Cheat Engine.exe和练习软件Tutorial.exe 打开之前最好关闭杀毒软 ...

  10. 【新手教程】如何用C语言写游戏修改器!

    本节教大家如何用基础编程语言C语言写简单的游戏修改器. 用到的工具: 1.VC++6.0(上机通常都会用的) 2.CE 5.4(任何版本都行) 3.当然要一款游戏这里我就用我临时写的C语言小游戏来作为 ...

最新文章

  1. ca证书 linux 导入_CA搭建与证书申请
  2. Python使用PDFMiner解析PDF
  3. 按照 排序 oracle,oracle 按照中文排序
  4. boost::pointer_traits用法实例
  5. 使用COSBench工具对ceph s3接口进行压力测试--续
  6. 【LOJ166】拉格朗日插值2【拉格朗日插值】【NTT卷积】
  7. 利用spring注解创建bean
  8. 金钱能让人更快乐吗?手把手教你用机器学习找到答案
  9. UNIX/Linux系统管理技术手册(1)----脚本和shell
  10. SSH命令行连接oracle,命令行操作windows远程登录账户
  11. 导航卫星系统行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  12. 随机生成大小为100的范围是100-1000的不重复的数组
  13. 重置 Winsock:初始化计算机网络环境
  14. NACOS 2.0.3 集群客户端连接出现503 500异常处理 踩坑记录
  15. 安装MySQL说cab文件损坏_安装Office出现的CAB文件受损解决方法
  16. 常用的办公软件有哪些?
  17. 《西瓜书》学习笔记-目录
  18. 1tb等于多少g 1TB和500G有什么区别
  19. Android EditText限制输入表情和特殊符号的处理
  20. 云宏Ceph分布式存储高性能设计

热门文章

  1. 普渡斩获双奖——“2020年度科创人物”、“2020杰出科技抗疫奖”!
  2. 山东大学高频电子线路实验二 高频功率放大实验详解
  3. 在没有QQ、微信时局域网共享文件方法
  4. PyMuPDF 拼版(一)
  5. python画航线图_pyecharts绘制geo地图
  6. 《无线电》杂志1955年到2000年高清扫描版,果断下载一份保存!
  7. oracle修复工具下载,Oracle数据库修复工具Stellar Phoenix Database Repair for Oracle
  8. 黑客使用浏览器中的浏览器技术窃取Steam凭证
  9. 新浪xweibo代码架构分析
  10. 计算机学课毕业论文,计算机专业毕业论文(精选5篇)