站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题手机游戏修改(2)工具

手机游戏修改(2)工具

摘要: 手机游戏修改(2)工具
<tr><td>
http:///tech/article2120.html
[转载于纸墨聊斋]
[]原文:http://blog.xdnice.com/user1/151/index.shtml
作者:紫陌

工欲善其事,必先利其器。我们这次介绍一下手游修改中需要使用的工具软件。
[]
[]1.十六进制编辑器
[]
我使用的是UltraEdit,这个软件的功能还是比较强大的。当然,十六进制的编辑器还是很多的,您也可以采用WinHex等。

2.JAVA反编译器

这里我使用的是小颖JAVA源程序反编译专家和DJ JAVA Decompiler。一般情况下,用一个反编译器就可以了。但这两个反编译器各有特点,所以我是有选择地使用。DJ相对于小颖来说,反编译的效果更好一些,而且可以显示源程序中的函数,另外还可以用不同的颜色来表示源程序中的各种元素。但DJ有一个缺点,那就是不显示中文字符,而是显示的是汉字字符UNICODE码。所以如果想要修改汉字的话,还是需要用到小颖反编译器的。

3.反汇编器

反编译器的作用是将十六进制的类文件(.class)反编译成源代码(.java)文件。我们可以通过阅读分析得到的源代码文件来分析程序的结构,进而得出需要修改的内容。但.java源代码文件与.class类文件并不是一一对应的,所以我们不能通过修改.java 文件的方式来修改.class文件。所以我们需要一个反汇编器。我使用的是IDA Pro这个软件,当然这也是从网上一些手游修改高手哪里学来的,您也许会有更好的反汇编器,看各人的爱好吧。

反汇编器的原理:反汇编器用来打开十六进制的类文件,在打开的同时,反汇编器就将该文件反编成一种界于源代码和十六进制之间的中间代码,“中间代码”这个概念是网上别人提出的。实际上,它是一种类似于汇编语言的代码,该代码的特点是:基本上每一句指令都对应着十六进制文件里的一段代码。而“中间代码”的指令与汇编一样,与二进制相比,是较接近自然语言的,比较容易理解。当然我们不需要完全去理解所有的这些汇编指令,只要找到我们需要的东西就可以了。同时呢,中间代码的这些汇编指令与JAVA源代码又基本上相互对应。所以我们通过“中间代码”这个桥梁,就可以实现源代码到十六进制类文件的修改。

具体的实现过程,我们举个小例子来说明:

在JAVA源代码中这样一条指令 : a = -6

[]在中间代码中对应着两条汇编指令:putfield a xxxxxxxxxxx ; bipush -6(其中XXXXXXX代码其它的一些字符,对我们来讲,没什么用)

在十六进制文件(也就类文件)中,bipush -6对应着 10 FA (而这种对应关系在IDA 软件中,我们就可以找到,很方便的)

4.十-十六进制转换器

有时候,我们需要将10 进制转换成16进制,或者反之,在我们口算不能实现的情况下,我们就需要用到这个转换器。其实最简单的就是WINDOWS自带的计算器。这个不用多说。

5.JAVA 2 SDK

这是SUN公司开发的JAVA套件,里面包含着JAVA的编译器和各种工具,我们主要用它来实现文字修改。这一点会在后面介绍。

你可以到SUN公司的网站上面下载该软件,免费的。java.sun.com

6.手机模拟器

我们要修改一个游戏,有时候要经过许多次的调试,尤其是刚开始学习修改的时候。我们不可能每修改一次都传入手机,那样太麻烦。这个时候我们就需要用到模拟器。这里我们安装MOTORALA SDK 的模拟器,具体的使用方法这里就不多说了。

下面我们来说一下修改的大致流程:

1.得到JAR文件,用WINRAR解压到一个文件夹。打开该文件夹,我们会看到一些以.class结尾的文件,这就是我们前面说的二进制或十六进制文件,也是我们修改的对象。此外,还可能有一些MIDI文件,或者图片文件。

2.用小颖反编译器或DJ打开这些.class文件,我们得到源程序代码,分析这些代码,寻找我们需要修改的内容。比如:a=-6

3.用IDA找开对应的.class文件,IDA的界面上会出现很多的窗口,第一个一般是IDA VIEW窗口,这里显示的是“中间代码”,也就是汇编指令。第二个一般就是HEX 窗口,显示的是十六进制代码。我们在IDA VIEW窗口中选中一条指令,或者一个数值,切换到HEX窗口,就可以看到对应的十六进制代码已经被反色显示。另外,还有FUNCTIONS窗口,显示的是程序中出现的函数,我们可以通过这个窗口,快速定位我们寻找的目标。

[]比如:上面我们找到a=-6,我们接下来就到IDA VIEW窗口中寻找-6这个数值,当然,有时候,一个程序中会出现不止一个-6,这个时候我们就需要根据上下文的特征和分析哪一个才是我们要的-6了。比如我们最后在IDA VIEW窗口中确定了我们要修改的-6的位置:

putfield a xxxxxxxxxxx ;

[]bipush -6

我们选中-6,切换到HEX窗口,看到一个“10 FA”被反色选中。这个就是我们需要修改的内容了。其中,10 是bipush的意思,FA则对应着 -6这个值。

4.用十六进制编辑器UltraEdit打开对应的.class文件,寻找 “10 FA”,这个时候,会得到一些结果,我们就通过对比 IDA PRO中HEX窗口中的代码和UltraEdit中的代码,来确定需要修改的那个值。比如我们要将-6改成-22,那么-22对应着EB,我们只需要将10 FA修改成10 EB就可以了。

5.将修改后的.class文件拖进JAR文件里面(实际上JAR文件就是一个压缩包)覆盖原来的文件。
[]
6.用模拟器加载该游戏,看是否修改成功。
http:///tech/article2120.html
</td></tr></table></td> </tr> <tr> <td background="/pic/split.gif" height=1></td> </tr> <tr> <td class="tdMargin1">
↑返回目录
前一篇: 使用JavaMagic进行游戏修改
后一篇: J2ME游戏开发笔记(整编版)