子弹在内存中存放上,是以4的倍数存的,也就是说,出门是你有,14发子弹,内存中就是56,而且如果你只是这样找,恐怕你也不一定找的到,因为游戏存储内存时,好像并不是正常的双字节格式,这里建议用TS,用他可以很容易找到。找到后就可以下断点,找到代码了,改起来也容易,一个NOP,就搞定。
现在要说最关键的地方了,这个游戏的内存是固定的,但为什么我还是无法做出真正通用的修改呢?因为它的代码居然是动态的,具体我就不说了,我也不明白他怎么实现的,不过怎么回事我是看清了,就是没想明白怎么处理,知道的请跟下贴。
我乱七八糟说了一堆,相信有修改能力的人,在自己的机器上,无限弹是不成问题了,没能力的,等有人找到办法做出修改再说吧,这个我目前还没想到办法。最后提供点有用的数据(生命我还没有找到(没找呢))。
子弹的地址:一般是0x17e52fdd | 0x17e62fdd
子弹代码地址:0x18e61953 | 0x18e71953
子弹内存数值:子弹数*4
子弹处代码:
18E71920 55 push ebp
18E71921 8BEC mov ebp, esp
18E71923 53 push ebx
18E71924 A1 F8782318 mov eax, [182378F8]
18E71929 C1E8 08 shr eax, 8
18E7192C BB D82FE617 mov ebx, 17E62FD8
18E71931 01D8 add eax, ebx
18E71933 8B00 mov eax, [eax]
18E71935 50 push eax
18E71936 B8 00040000 mov eax, 400
18E7193B 5B pop eb
18E7193C 29C3 sub ebx, eax
18E7193E 89D8 mov eax, ebx
18E71940 50 push eax
18E71941 A1 F8782318 mov eax, [182378F8]
18E71946 C1E8 08 shr eax, 8
18E71949 BB D82FE617 mov ebx, 17E62FD8
18E7194E 01D8 add eax, ebx
18E71950 89C3 mov ebx, eax
18E71952 58 pop eax
18E71953 90 nop //这里原来是mov [ebx],eax,NOP掉,就全枪无限了
18E71954 90 nop
18E71955 5B pop ebx
18E71956 5D pop ebp
18E71957 C3 retn
以上的地址,在XPSP2下,你多进几次游戏,不行就重启,100%有相同的时候。
另外我发现这游戏接上手柄和不接手柄还不一样,具体差多少,我还没有细研究。
上面写的比较乱,不过相信在和我水平一样,或比我还高的人眼里,应该能看出些东西,跟踪调试一下,就会知道是怎么回事了,希望有能够解决动态分配空间及代码的,在这里跟贴贴出方法。
说一下,我就是JACK。 JACK==gamehack
在一楼贴上最近更新的V1。10修改器,如果可以使用,可以无限生命,无限武器,效果很不错。(未通关,后期不知,应无问题)。
使用方法: 打开修改器,进游戏后把画面停在开始那里,就是可以选新游戏,读档那里,按修改器里的,读取数值,如果是56,点对应下方的修改代码,就可以无敌了,没有提供代码恢复功能,重开游戏才能恢复。
接手柄和不接手柄时,游戏的内存状态不一样,而且同样是不接手柄,内存状态也并不每次都一样。所以两边的按钮都试试,只要读出来的是56(手枪的子弹数*4,默认为14发),就可以点击下面的修改代码按钮啦。
做的有够累,游戏有够BT,请使用了的玩家,发贴支持一下。
刚刚忘说了,包里我还放了一个网友制做的汉化,我试了,好用,替换文件就可以,是脚本。
注意,全屏游戏时要是不行,请换成窗口化再试试。也许可以。游戏累人,不准备继续研究了。