Board logo

标题: 我的曹操传mod历程 [打印本页]

作者: coarsemelody    时间: 2010-10-8 17:36     标题: 我的曹操传mod历程

这东西还在做,不知道啥时候能结束。工作忙,养家累,事情多,抽空做,慢慢更新。
至于mod,还是先卖个关子吧,截然不同的玩法哦,据做剧本的人说是这样的,到时候不好玩找他。
写这个帖子的主要原因是,一方面给这段时间修改的东西留个纪念,另一方面是为了方便下后人。

第一回:我他妈没用过ollydbg啊!
以前一直觉得做mod这玩意儿太高深了,没空去琢磨。所以没有兴起过这样的念头,什么你说用新引擎?不能加减自定义功能,做个鸟mod(这是程序猿的癖好,各位请无视)。
直到一天,我一个朋友邀请我合理做一个,在他找到的资料下发现,原来改改exe不过是一些并不很可怕的工作。
于是乎,我下手了……
但是,我发现,作为一个玩了n年代码的人,没有玩过ollydbg,顿时觉得自己很挫。于是各种翻箱倒柜baidu和google,好不容易学了些东西,开始弄这个exe。

第二回:天煞的全零段,就那么点?
作为一个崇尚于磨刀不误砍柴工的人来说,做好一切能想到的准备工作,是我的习惯。于是,我先要琢磨着改exe的基本原理和技术是啥。此时,不得不感谢论坛里众位先人的努力和共享精神,在各种置顶帖的帮助下,我基本上没花太多的时间,就搞清楚汇编、反汇编、二进制代码之间乱七八糟的联系和现实关系了,并且能下手改了。
那一瞬间,感觉那叫一个好啊。
可是,当我发现程序原本的全零空间就那么一点点的时候,我直接哭了。
那么一点点怎么够我挥霍嘛!
接着,四处寻找修改exe长度的软件,终于功夫不负苦心人,给我找到了studpe和lordpe之类的各种辅助工具,解决了这个问题。具体方式,置顶帖子里面也有,这特么是我后来发现的,郁闷……

第三回:外挂dll
上回说到,我是个习惯打好一切铺垫开始做正事的人。所以我必须决定如何处理这个exe。最终我的想法是外挂一个dll,在dll用c或者c++写辅助代码的速度,要比汇编快多了。这时候,因为外挂dll的函数是通过字符串名字寻找的,我再次不得不为了保存这些函数名字的空间犯愁。有一段时间,我一直保存在用studpe开辟出来的新的全零段上(其实就是代码段)。后来,当我各种工具用得熟悉了以后,就把他放到新开辟出来的数据段上去了……
别问我为啥开头没想到多开辟几个段,我也不知道。
保存好函数名,那时候,只需要调用一些loadlibrary,getprocaddress之类的api就能做到外挂dll了。当然,我的心情比较好,专门写了一个系统来方便的调用函数。

第四回:第一个改动目标:取消经验系统
这个我真是改郁闷了。我根据置顶帖子找到了攻击函数切入地址,然后一步步跟踪下去,最后跟踪出来了那个画人物数据条改变的函数,原本以为这里改一下没事了,结果攻击完以后,策略使用以后,的确数据不再跳出来了。但是其实经验值依旧上升了,并且,mp下降的表示也没有了……
发现不对,继续追踪,最后通过内存断点找到了写经验值的函数,直接写0……
并且,在弹出绘制数据显示的地方,留下了两个钩子,说不定以后会用到的……

第五回:第一个被动技能:募兵
所谓募兵,就是每回合自动回复hp上限10%。我左看右看,发现自己的mod里还是这个技能相对简单点。
于是,下手之。
通过中毒时写hp内存来找到每回合扣血的代码地址,然后在某个地方设置一个几关跳到我dll里面,我的dll中检测单位技能,发现募兵,则调用原来exe中的画血条增加函数,并且对hp写内存。
这当中,唯一比较能搞的是画血条函数,但是因为在上一回中的纠结,这一步我几乎不费摧毁之力就摆平了。

未完待续……
作者: xuli3202    时间: 2010-10-8 19:49

谢谢楼主分享!!!
作者: zmhxc    时间: 2010-10-10 22:33






欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) Powered by Discuz! 5.0.0