Halo2.0系列教程[目前更新wap修改,图片字修改,键值修改,bt属性修改]
一,破解wap收费或者gprs收费教程。教程选用游戏《鬼面劫》。类型:wap收费。难度:中等。步骤:
用halo打开鬼面劫的jar。废话。。。。附件有该原始jar!
接下来在class editor窗口!一定要在这个窗口搜索。不然搜索会根据当前界面来搜索。通过工具->全文搜索。首先我们先搜索 "HttpConnection", 不包含双引号. 记得选择搜索模式是"total class", 为什么要搜索这个关键字呢,因为目前的wap或者grps收费都是通过http连接来进行收费的,通俗的来讲,也就是手机通过登陆移动梦网访问页面进行业务的订购。如图所示:
[attach]340615[/attach]
由于对所有的class文件进行搜索的数据量较大,可能需要消耗几秒中:),在几秒的YY后,搜索结果如下图所示:
[attach]340616[/attach]
我们发现在h.class和o.class里面都含有HttpConncetion这个字段,那也就是说在这两个类里面都出现了要进行http的联网。这个游戏有些特殊,实际上h这个文件是一个所谓游戏用来下载关卡的,实际上实际上是用来给他们的论坛发送消息用的,不是真的下载关卡,具体怎么知道,这里我就不细说了。所以o.class这个文件才是真正要想网络收费的实现。搜索一共有四个结果。那么现在我们来缩小搜索的范围,这次我们搜索选择“current class”,记得这时候已经在搜索结果中双击o.class来打开o这个文件。我们这时候输入搜索条件"Connector/open", 这时候是不是只有了一个结果,如下图所示:
[attach]340617[/attach]
搜索结果如下:
[attach]340618[/attach]
也就是在o文件中的for方法中进行网络的连接,那是不是代表就是要修改这里了呢,先别着急。根据经验,我们要找到是谁调用了o文件的这个for方法。接下来我们搜索“invokestatic o/for”,发现一共有三个结果,我们继续往下搜索,第一个方法调用的地方,也就是"invokestatic o/try",这次采用total class搜索。一个有两个结果 ,我们搜索第二个“invokestatic o/do”,如下图所示:
[attach]340619[/attach]
出现了一个结果,双击打开n文件,发现出现的地方是run方法,这里说明一个小技巧,wap收费的方法一般都是run。根据经验判断,wap收费的一系列动作应该都在这个方法里了,也就是n文件的run方法中了。之前的一系列搜索,需要用户自己根据经验一步步来摸索-_-。
我们用DJ Java Compiler来反编译n文件,发现这个文件很简单,基本上就一个run方法。而且我们也发现了一些很有趣的东西。我们是不是看到了smsmoney, 还有什么+ 200 , + 100,联系之前游戏所看,是不是有影响,也就是花2元可以得到200增值币,如果一下子花6元,除了得到600增值币以外,还会得到100的增值币。有些编程经验的朋友可以看到,这个run方法实际上是个循环,初步猜想每次扣费2元,通过选择的方式是否一次扣费,还是多次扣费。而我们刚才知道,o这个文件是用来联网收费的,那么我们的修改方案就是把o文件所有相关的地方去掉,直接让其默认收费成功。所以以下的代码段我们应该都要删除:
[attach]340620[/attach]
[attach]340621[/attach]
我们知道要删除哪些代码呢,那么我们在halo里面怎么做到呢。这时候我们在DJ里面中的setting选项,设置Decompile Setting,把Generate JVM instructions as comments打勾。如图:
[attach]340622[/attach]
这时候我们发现:
[attach]340623[/attach]
这段是从12行开始的,在DJ里面行数是0开始的,而在Halo里面是从1开始的,那么这行对应在halo应该是从13开始的,如图所示:
[attach]340625[/attach]
恩,都是aload_0这个指令。那么就没错了。接下来我们找结束的地方。
[attach]340624[/attach]
107!!!那么对应halo就是108,我们去验证看看。呵呵,halo的108和109行跟DJ的107和108的代码都是一样的,都是一样的:
[attach]340626[/attach]
那么最后,我们知道了,我们只需要删除从halo的13行到109行的代码段就可以了。打开代码标编辑。选择,然后删除。
[attach]340627[/attach]
ok,就是这样,最后别忘记点击上方的保存方法。
[attach]340628[/attach]
然后通过halo的编译打包出jar,那么就是破解的了。我们怎么去验证时破解的呢。第一步,我们还是用DJ打开已经处理过的n文件,打开来看看run方法,是不是少了很多东西。就剩下直接+200和+100了。 第二步,我们放到手机上去试验一下。呵呵,的确是破解成功的。
[attach]340629[/attach] 这次教程将告诉怎么消除图片字,选用的是DC的《Christmas_Toy_Land》。难度:[color=red]容易[/color]。
为什么要选用DC的游戏,因为DC的来修改图片字是最简单的,其在绘制文字的时候还保留着系统字绘制的方式,而采用图片字还是系统字进行显示是通过开关来控制的。也就是找到这个开关,就相当于可以让游戏绘制系统字。而目前我了解得DC的游戏基本上的开关都是在某个类里面,而这个类一般来说都是一开始的构造方法中(只有一两个特殊,在方法中)。而这个开关的代码描述就是如下:
[color=red]if(image != null)[/color]
[attach]341652[/attach]
对,就是以上这段简单的代码。翻译成大家了解的语言就是,如果图片字所有的图片存在的话,那么就用图片字进行文字绘制,反过来说,如果这个图片字初始化不存在的话,那么就会用系统字体来进行绘制。所以我们修改的思想就是让在进行图片字所需要的图片初始化存在判断之前让其这个条件不成立。也就是如下的代码段:
[color=red]image = null; [/color]// 这是在其之前添加的。
if(image != null)
那么(image != null) 这个条件肯定不成立。在这里说明给不会编程的朋友以下 "!=" 的意思就是不等于。
那么记下来我们就要去找在jar里面那个类有这个特征,DC的游戏很有规律,几乎所有的游戏都这个规律。了解一个,以后的修改就很简单了。而且对应的文本插件HaloV1.0就开放出来了。也就是黑帮3的插件。
那么我们采用笨方法,用DJ一个个的反编译所有的类,幸运的是类不多,一会就能反编译完了。我们上面说了规律都出现在构造方法中,不会编程的朋友可能会问,什么是构造方法,这里就说一个规律把。大家记得就好了。不过还是希望有心搞修改的朋友学点专业知识。
如何识别构造方法:
假设反编译的文件名字是a.class,那么构造方法就是以一般都是以如下的方式开始的:
[color=red]public a([/color]或者
private a(
或者
protected a(
这里的a就是文件的名字。
一般我们在DJ里面搜索public a(,这个用的较多。
在经过几分钟的依次反编译后,我们发现了Christmas_Toy_Land的这个jar的b.class含有这个规律。
实际上在这个图上我们也看到有一个单词是font,这个中文就是字体的意思,也就是系统字绘制的意思。如果我们看完这个函数,我们会发现如果image != null这个条件不成立的话,那么就会使用到font.
好了,我们现在知道这个开关在那里了,我们怎么去修改了。也就是如何在之前添加代码段,也就是:
image = null;
下面我们就打开halo,打开这个jar。在b.class这个文件中,右键->edit class. 如图所示:
[attach]341653[/attach]
打开以后会转到"class editor"窗口。在这个窗口会分析这个类结构,并且显示出来。我们在左边的属性结构图中找到b。class这个文件的构造方法。其在方法这个节点上,而构造方法的名字是"<init>", init是初始化的缩写。也就是初始构造的意思 。如图所示:
[attach]341654[/attach]
双击"<init>"这个节点来打开它。然后会弹出“code”,点击其,会出现左边相关的代码段。如图所示:
[attach]341655[/attach]
下面我们来确定if(image != null) 在halo中所在的位置,用DJ打开b.class文件,记得设置里面打开genernate jvm instructions.
如果所示:
[attach]341656[/attach]
对应的halo所在代码如下所示:
[attach]341657[/attach]
现在我们已经找到了其位置,那么我们开始添加修改代码段,也就是
image = null;
其对应的halo中的代码如下:
[color=red]aconst_null
astore_1[/color]
这个代码段比较机械,大家可以记住。如果要了解原理的话,可以看虚拟机指令。需要注意的是astore_1中的这个“1”是根据之前的if(image != null)而定的。我们看第三行是aload_1,这里是1,那么astore_1,也就是要是1。依次,如果是aload_2,那么就应该是astore_2.依次类推.
选中第三行,点击“新建”按钮,初学者建议使用新建按钮,而不用采用“新建(高级)”。点击“新建”按钮后出现如下窗口:
[attach]341658[/attach]
选择aconst_null,这个意思是说添加常量,因为我们现在要添加第一个代码段.也就是aconst_null.确定后我们会发现在halo里面第三行变为了aconst_null. 那么我们成功了第一步了.接下来我们添加astore_1这个代码段.还是点击"新建"按钮,还是弹出刚才的窗口,这次我们选择,如图所示:
[attach]341659[/attach]
这个指令在LocalVariableInstructions的节点下.选择后出现如下窗口:
[attach]341660[/attach]
在上面我们说了索引为1 ,那么在右边的输入框输入1,确定.这时候再halo的第四行就会出现astore_1
ok,我们就完成了所有的添加,不要忘记保存方法.编译打包.然后我们去汉化,怎么样,是不是之前出现乱码的地方都能正常显示中文了.
也可以用DJ打开修改后的b.class进行验证.如图所示:
[attach]341661[/attach] 教程三:BT属性修改。选用游戏:《英雄传说》。难度:容易
这个教程将告诉大家如何修改游戏中的属性,当然只限制于属性都写在class里面的。至于写在资源里面的,那就要具体分析了。我们选用《英雄传说》这个游戏来作为例子,主要是因为最近很火。那我们开始我们的旅程吧。
还记得游戏一开始各个任务的属性吗?如图:
[attach]343916[/attach]
看到了吗,一开始的钱是300,然后各个属性下来时什么8,5,3,4
那么我们开始在搜索300这个关键字吧。(有人问为什么不搜索8,5,3,4。。。我不想回答了),如图
[attach]343917[/attach]
非常的lucky,就得到一个唯一的结果。如图:
[attach]343918[/attach]
赶紧双击带来它。high啊high。在代码表编辑里面找到了那个性感红色的300,极度高潮中,请勿打扰。。。。如图:
[attach]343919[/attach]
那么我们接下来就要去修改它了。选择300那行,然后编辑它。如图:
[attach]343920[/attach]
在弹出的框框里面选择为int(整形),输入我们想要暗爽的数字。。。如图:
[attach]343921[/attach]
改完了!,就改完了。。。这么简单,不是吧。。。。那8,5,3,4这些值呢,别着急我们,在代码上上下找找看,果不然,发现了性感的小内衣居然在这里,如图:
[attach]343922[/attach]
既然发现了,我们还不SM它。那开工吧,在连续四次SM后,小内衣被撑暴了。如图:
[attach]343923[/attach]
保存方法,测试。完美! 系列教程四,如何在进行移植时候进行改键值。选用游戏:《7th_Space_SE_K700_176x220.jar》。难度:容易。
在这个教程里,我们将看看如何进行键值的修改,这种修改是最省内存,而且也很简单,基本不会出错。我们做一个SE176X220的机型移植到moto E398的一个过程。
用halo打开7th_Space_SE_K700_176x220.jar。。。又是废话。
因为halo2.0没有提供对方法名字的搜索,所以我们需要挨个打开每个class,以便找到方法名字为keyPressed, keyReleased, keyRepeated这三个关键方法的名字 ,从英文的字面上来看,我们可以知道这三个方法实际上是代表的意思是:有按键按下,有按键松开,有按键重复。是的,这就是我们这个教程要做文章的地方,也是按键修改的思想所在:
我们可以这样去理解一件事情,当se的游戏要跑在moto的机型上,我们去按键的时候,这时候的键值是moto的,而游戏里面处理的却是se的键值,所以我们需要在这个过程中去拦截键值,也就是如下的流程:
我们在moto手机上按键
把moto的键值改成SE的键值 --> 这里就是我们需要拦截和处理的地方。
游戏处理SE的按键
----------------
在挨个打开class后,我们发现在GEngine.class里面有keyPressed, keyReleased,,如图所示:
[attach]344965[/attach]
通过代码表编辑来编辑keyPressed方法,选中第一行,然后点击 “新建(高级 )”。如图:
[attach]344966[/attach]
记住了,在halo里面插入代码段,都是在当前选中行的上一行插入的。在弹出的窗口中,我们复制粘贴以下代码:
iload_1
lookupswitch -22: 6, -21: 3, -20: 21, -6: 12, -5: 18, -2: 15, -1: 9, default: 23
bipush 250
istore_1
goto 23
bipush 249
istore_1
goto 23
iconst_m1
istore_1
goto 23
bipush 254
istore_1
goto 23
bipush 253
istore_1
goto 23
bipush 252
istore_1
goto 23
bipush 251
istore_1
复制粘贴后如图所示:
[attach]344967[/attach]
按确定完成,是不是看到在halo里面已经插入了以上的代码呢,ok,那么我们保存方法。
现在我们去验证以下,我们是否插入代码成功,用DJ 来反编译该类,发现在keyPressed这个方法中加入了如图的代码:
[attach]344968[/attach]
看起来是不是很熟悉,-21,-22等等,这不就是键值吗?上面的代码很容易看明白,就是当键值等于-21的时候我们就让它等于-6,这就是拦截思想的实现了。
有些朋友会问,为什么在halo里面怎么没有看到-6,-7等等的键值呢,实际上不要着急,因为-6实际上是等于250的。
我们在
lookupswitch -22: 6, -21: 3, -20: 21, -6: 12, -5: 18, -2: 15, default: 23
这行上,点击编辑,如图所示:
[attach]344969[/attach]
左边的值是不是很熟悉,如果我们要移植到别的机型,我们可以修改这些值,当然我们也可以高级编辑它。
接下来我们在
bipush 250
这行点击编辑,如图所示:
[attach]344970[/attach]
是不是-6出来了。我们可以修改成任意的值。例如我们修改为-7,那么就左右软键颠倒了。
而接下来的keyRelease,也是同样复制代码就可以了。是不是很简单! :004 我要抢沙发 发布了吗BB:疑问 这么有难度的啊 前排支持:幸福 强烈支持了。 前排看热闹 强烈支持 支持bb~~:015
圖片我看不到呀:哭泣
[[i] 本帖最后由 俠客 于 2007-12-22 16:14 编辑 [/i]] 很相学一下。。 好复杂 支持bb! 来晚了:哭泣 不知道哪里能下载 不过支持啦! 支持BB`` 太强大了,我得好好学学 支持支持
