Halo2.0教你如何破解WAP收费方式的手机游戏

1、打开Halo,然后打开JAR游戏,点击class Editor,然后点“编辑”菜单下的“全文查找”在对话

框中输入“Httpconnection”点确定。(注意:下面的search Mode:选择by total classes)结果如下:

2、从上面第二张图上我们看到三项都是在S里面,因此可以确定收费文件是在S.class中。我

们现在就把S.class文件解出来。然后打开DJ Java Decompiler,在DJ里面再打开S.class文件,如下:

3、然后在里面进行分析,通过分析我们发现有三程序中需要修改三个地方。我们找到几段收费

的代码如下(具体如何分析的,我觉得很难写得出,需要有一定的JAV A知识,不同的游戏class文件具体分析的方法也是不一样的,大家可以自己研究):

也就是说下图的三个项目都需要修改。

4、具体要修改什么地方呢?我们在DJ中打开“settings"菜单,选择“Decompiler Settings",然后

钩选:Generate JVM instructions as comments(annotate),点击OK,那么程序如下显示出来:

找出相应需要破解的地方,然后在Halo里面依次双击三个需要修改的地方分别来修改。双击下图下面第一项,然后点“代码编辑表”,图如下:

5、通过分析,我们只要留下代码表里最后二行,其余删除。点右边的删除。并且把aload_1改

为aload_0就可以了。(直接双击把数值1改为0就可以了)

6、双击下图第二项

通过分析,只要留最后一行,不修改。那么删除其余的行。结果如下:

7、双击下图第三项

通过分析,只要留最后一行,不修改。那么删除其余的行。结果如下:

8、最后点击“保存方法”

然后再点击“工程”菜单中的“编译”,然后再点击“工程”菜单中“打包”最后就完成了破解。

9、然后可以将破解JA R中的s.class用DJ进行反编译,看看是否已经破解,或者用模拟器来运

气一下看看是否破解了。

自从halo2.0发布以来,很多迷友都体验到其功能的强大和操作的便捷。许多人对照着BB的教程亲手实践了一把。BB共出了四个方面的教程,分别是破解,汉化,bt修改以及键位移植。为此,空余时间,我也好好

学习了一下。

特别是汉化以及bt修改是我比较关心的两个方面。本着BB一向贯彻的分享原则,今天,我来向大家分享使用halo2.0来修改系统文字的颜色的方法。这只是我个人的一些心得体会。并不一定完全准确,希大家见谅。借此也感谢BB和H大两位,正是他们所开发的halo2.0,才有了简便的汉化工具,也就有了这篇教程。

难度等级——中等

首先还是以BB教程中的DC游戏(Christmas_Toy_Land)为例,大家应该已经学会了简单的图片文字汉化。但是如果改成调用系统描绘后,颜色不尽如人意怎么办?halo2.0完全可以做到这点。

一、基础知识的预备。很多迷友没有java基础,没有关系,只要知道其中的一个命令就是setColor,懂得英语的朋友应该知道,这是设置颜色的意思。没错,java中经常出现setColor函数,后面一般紧跟的是drawString(描绘字符串)。也就是说setColor是设置画笔的颜色。

二、学会基本看懂简单的DJ反编译后文件,查找setColor,好,在b.class中找到2处setColor,分别是g.setColor(e)和g.setColor(d)。e和d是两个变量,而且是int类型(很多人不懂数据类型,可以参阅相关资料)。那我们怎么来修改呢?当然可以在setColor语句前给变量赋值。(当然还有其他更简便的方法,这需要迷友们自己去摸索,我只是提供一种思路和方法。)

==============================

===========

setColor一般都是在方法中,用halo2.0打开jar后,选中b.class,右键edit class。会出现下图:

那我们怎么来确定到底是哪个方法才是我们需要修改的呢?上面用dJ 反编译查找现在派上用处了。大家可以看setcolor函数出现在哪个方法中,经查找发现在public final void a(Graphics g, String s, int i, int j, int k)。也就是在a 方法中,那到底是哪个a呢?单击方法:找到如下图所示

大家可以对照访问控制,类型及变量等,发现两者完全吻合。

那么点击+,打开文件夹,选中code,

根据BB的方法找到g.setColor(e)的位置,就在22-25行,那么我们在22行,47 aload_1前添加e=32命令(为何是32,这个我后面再解释数字的意思)

需要3行,

1.新建(高级)(我习惯使用这个),输入aload_0,把数据压入index为0的堆栈中

2.新建(高级)输入ldc 32(ldc是为int数据类型赋值)

3. 新建(高级)putfield b/e I(把32赋值给e类型为Int,b是指类名,

b.class)

当然这样还没结束,需要修改跳转的是两个值为25的地方。

为何修改?因为插入3行后跳转还是指向原来的g.setColor(e),

如不修改,那么e=32将纳入上一判断if语句中

双击goto和ifeq,把目标改为22

然后保存方法,编译后(可用DJ打开build文件夹中的b.class文件检查是否修改成功)打包运行。Ok!

同样步骤修改g.setColor(d)

注意:d的跳转应该修改的是

第10行19 ifeq 64改为61

经试验发现,e是用来控制菜单界面外部轮廓的颜色。d是用来控制主体字的颜色。

那我们怎么来确定颜色呢?

现将颜色的值向大家讲解一下。g.setColor()变量可以是0x000000-0xffffff,表示16进制。一共6位,其中前面两位控制红色(R),中间两位表示绿色(G),最后两位表示蓝色(B),数值由00向ff递增,颜色逐渐变深。000000为黑色,ffffff为白色。

好,那么我们来试一下,字体颜色为深红,边框为白色。

双击23行ldc,选择hex(16进制),输入ffffff。

e=ffffff,d=ff00000,.

效果图见:

首先用halo打开jar。然后在类编辑器窗口进行搜索“setAddress”,为什么要搜索这个呢,因为发短信的地方都用到了这个代码,如图所示:

很快就找到了结果,是在 c.class文件中。我们现在用DJ反编译这个类,找到出现setAddress 的方法。如图所示:

大概分析一下,发现方法的返回类型是boolean,也就是返回要么是真,要么是假。而短信发送一般来说没有返回值,所以发送成功会返回真,要么返回假,收费就是认为真就是成功。那么我们的修改很简单了,选择除了最后两行的代码以外的其它代码,然后删除其他。如图所示:

大概分析一下,发现方法的返回类型是boolean,也就是返回要么是真,要么是假。而短信发送一般来说没有返回值,所以发送成功会返回真,要么返回假,收费就是认为真就是成功。那么我们的修改很简单了,选择除了最后两行的代码以外的其它代码,然后删除其他。如图所示:

然后双击第一行,进行编辑,类型选择boolean,值写true,如图所示:

确定保存方法。ok。修改完毕。然后我们DJ反编译修改后的class检查下,如图所示:

破解完毕!!!

一,破解wap收费或者gprs收费教程。教程选用游戏《鬼面劫》。类型:wap收费。难度:中等。

步骤:

用halo打开鬼面劫的jar。废话。。。。附件有该原始jar!

接下来在class editor窗口!一定要在这个窗口搜索。不然搜索会根据当前界面来搜索。通过工具->全文搜索。首先我们先搜索"HttpConnection", 不包含双引号. 记得选择搜索模式是"total class", 为什么要搜索这个关键字呢,因为目前的wap或者grps收费都是通过http连接来进行收费的,通俗的来讲,也就是手机通过登陆移动梦网访问页面进行业务的订购。如图所示:

我们发现在h.class和o.class里面都含有HttpConncetion这个字段,那也就是说在这两个类里面都出现了要进行http的联网。这个游戏有些特殊,实际上h这个文件是一个所谓游戏用来下载关卡的,实际上实际上是用来给他们的论坛发送消息用的,不是真的下载关卡,具体怎么知道,这里我就不细说了。所以o.class这个文件才是真正要想网络收费的实现。搜索一共有四个结果。那么现在我们来缩小搜索的范围,这次我们搜索选择“current class”,记得这时候已经在搜索结果中双击o.class来打开o这个文件。我们这时候输入搜索条件"Connector/open", 这时候是不是只有了一个结果,如下图所示:

搜索结果如下:

也就是在o文件中的for方法中进行网络的连接,那是不是代表就是要修改这里了呢,先别着急。根据经验,我们要找到是谁调用了o文件的这个for方法。接下来我们搜索“invokestatic o/for”,发现一共有三个结果,我们继续往下搜索,第一个方法调用的地方,也就是"invokestatic o/try",

这次采用total class搜索。一个有两个结果,我们搜索第二个“invokestatic o/do”,如下图所示:

出现了一个结果,双击打开n文件,发现出现的地方是run方法,这里说明一个小技巧,wap收费的方法一般都是run。根据经验判断,wap收费的一系列动作应该都在这个方法里了,也就是n文件的run方法中了。之前的一系列搜索,需要用户自己根据经验一步步来摸索-_-。

我们用DJ Java Compiler来反编译n文件,发现这个文件很简单,基本上就一个run方法。而且我们也发现了一些很有趣的东西。我们是不是看到了s msmoney, 还有什么+ 200 , + 100,联系之前游戏所看,是不是有影响,也就是花2元可以得到200增值币,如果一下子花6元,除了得到600增值币以外,还会得到100的增值币。有些编程经验的朋友可以看到,这个run方法实际上是个循环,初步猜想每次扣费2元,通过选择的方式是否一次扣费,还是多次扣费。而我们刚才知道,o这个文件是用来联网收费的,那么我们的修改方案就是把o文件所有相关的地方去掉,

直接让其默认收费成功。所以以下的代码段我们应该都要删除:

我们知道要删除哪些代码呢,那么我们在halo里面怎么做到呢。这时候我们在DJ里面中的setting 选项,设置Decompile Setting,把Generate JVM instructions as comments打勾。如图:

这时候我们发现:

这段是从12行开始的,在DJ里面行数是0开始的,而在Halo里面是从1开始的,那么这行对应在halo应该是从13开始的,如图所示:

恩,都是aload_0这个指令。那么就没错了。接下来我们找结束的地方。

107!!!那么对应halo就是108,我们去验证看看。呵呵,halo的108和109行跟DJ的107和108的代码都是一样的,都是一样的:

那么最后,我们知道了,我们只需要删除从halo的13行到109行的代码段就可以了。打开代码标编辑。选择,然后删除。

ok,就是这样,最后别忘记点击上方的保存方法。

然后通过halo的编译打包出jar,那么就是破解的了。我们怎么去验证时破解的呢。第一步,我们还是用DJ打开已经处理过的n文件,打开来看看run方法,是不是少了很多东西。就剩下直接+200和+100了。第二步,我们放到手机上去试验一下。呵呵,的确是破解成功的。

这次教程将告诉怎么消除图片字,选用的是DC的《Christmas_Toy_Land》。难度:容易。

为什么要选用DC的游戏,因为DC的来修改图片字是最简单的,其在绘制文字的时候还保留着系统字绘制的方式,而采用图片字还是系统字进行显示是通过开关来控制的。也就是找到这个开关,就相当于可以让游戏绘制系统字。而目前我了解得DC的游戏基本上的开关都是在某个类里面,而这个类一般来说都是一开始的构造方法中(只有一两个特殊,在方法中)。而这个开关的代码描述就是如下:

if(image != null)

对,就是以上这段简单的代码。翻译成大家了解的语言就是,如果图片字所有的图片存在的话,那么就用图片字进行文字绘制,反过来说,如果这个图片字初始化不存在的话,那么就会用系统字体来进行绘制。所以我们修改的思想就是让在进行图片字所需要的图片初始化存在判断之前让其这个条件不成立。也就是如下的代码段:

image = null; // 这是在其之前添加的。

if(image != null)

那么(image != null) 这个条件肯定不成立。在这里说明给不会编程的朋友以下"!=" 的意思就是不等于。

那么记下来我们就要去找在jar里面那个类有这个特征,DC的游戏很有规律,几乎所有的游戏都这个规律。了解一个,以后的修改就很简单了。而且对应的文本插件HaloV1.0就开放出来了。也就是黑帮3的插件。

那么我们采用笨方法,用DJ一个个的反编译所有的类,幸运的是类不多,一会就能反编译完了。我们上面说了规律都出现在构造方法中,不会编程的朋友可能会问,什么是构造方法,这里就说一个规律把。大家记得就好了。不过还是希望有心搞修改的朋友学点专业知识。

如何识别构造方法:

假设反编译的文件名字是a.class,那么构造方法就是以一般都是以如下的方式开始的:

public a(或者

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. 如图所示:

打开以后会转到"class editor"窗口。在这个窗口会分析这个类结构,并且显示出来。我们在左边的属性结构图中找到b。class这个文件的构造方法。其在方法这个节点上,而构造方法的名字是"", init是初始化的缩写。也就是初始构造的意思。如图所示:

双击""这个节点来打开它。然后会弹出“code”,点击其,会出现左边相关的代码段。如图所示:

下面我们来确定if(image != null) 在halo中所在的位置,用DJ打开b.class文件,记得设置里面打开genernate jvm instructions.

如果所示:

对应的halo所在代码如下所示:

现在我们已经找到了其位置,那么我们开始添加修改代码段,也就是

image = null;

其对应的halo中的代码如下:

aconst_null

astore_1

这个代码段比较机械,大家可以记住。如果要了解原理的话,可以看虚拟机指令。需要注意的是astore_1中的这个“1”是根据之前的if(image != null)而定的。我们看第三行是aload_1,这里是1,那么astore_1,也就是要是1。依次,如果是aload_2,那么就应该是astore_2.依次类推.

选中第三行,点击“新建”按钮,初学者建议使用新建按钮,而不用采用“新建(高级)”。点击“新建”按钮后出现如下窗口:

相关文档
最新文档