首页 [剖析]高手破解手机java游戏

[剖析]高手破解手机java游戏

举报
开通vip

[剖析]高手破解手机java游戏[剖析]高手破解手机java游戏 破解wap收费或者gprs收费教程 教程选用游戏《鬼面劫》 步骤: 用halo打开鬼面劫的jar。废话。。。。附件有该原始jar~ 接下来在class editor窗口~一定要在这个窗口搜索。不然搜索会根据当前界面来搜索。通过工具->全文搜索。首先我们先搜索 "HttpConnection", 不包含双引号. 记得选择搜索模式是"total class", 为什么要搜索这个关键字呢,因为目前的wap或者grps收费都是通过http连接来进行收费的,通俗的来讲,也就是手机通...

[剖析]高手破解手机java游戏
[剖析]高手破解手机java游戏 破解wap收费或者gprs收费教程 教程选用游戏《鬼面劫》 步骤: 用halo打开鬼面劫的jar。废话。。。。附件有该原始jar~ 接下来在class editor窗口~一定要在这个窗口搜索。不然搜索会根据当前界面来搜索。通过工具->全文搜索。首先我们先搜索 "HttpConnection", 不包含双引号. 记得选择搜索模式是"total class", 为什么要搜索这个关键字呢,因为目前的wap或者grps收费都是通过http连接来进行收费的,通俗的来讲,也就是手机通过登陆移动梦网访问页面进行业务的订购。如图所示: 由于对所有的class文件进行搜索的数据量较大,可能需要消耗几秒中:),在几秒的YY后,搜索结果如下图所示: 我们发现在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方法。而且我们也发现了一些很有趣的东西。我们是不是看到了smsmoney, 还有什么+ 200 , + 100,联系之前游戏所看,是不是有影响,也就是花2元可以得到200增值币,如果一下子花6元,除了得到600增值币以外,还会得到100的增值币。有些编程经验的朋友可以看到,这个run方法实际上是个循环,初步猜想每次扣费2元,通过选择的方式是否一次扣费,还是多次扣费。而我们刚才知道,o这个文件是用来联网收费的,那么我们的修改 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 就是把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了。 第二步,我们放到手机上去试验一下。呵呵,的确是破解成功的。 PS:教程用到的DJ Java Decompiler 3.10.10.93(破解版) Quote: 介绍:DJ Java Decompiler是个反编译的工具,可以将编译过的CLASS文件编译还原成为Java原始文件,并且不需要额外安装JVM(Java Virtual Machine)或是Java SDK的工具模组即可使用。不单如此,DJJava Decompiler也兼具有Java程序编辑工具的角色,提供一些辅助功能便于程序撰写与修改。 也已在附件提供大家下载~ 解压后安装,用iNViSiBLE文件夹下的DJ.exe覆盖安装文件夹中的DJ.exe 短信修改 短信修改:选用游戏:神魔幻世 注:此修改仅用于学习用。 首先用halo打开jar。然后在类编辑器窗口进行搜索“setAddress”,为什么要搜索这个呢,因为发短信的地方都用到了这个代码,如图所示: 很快就找到了结果,是在c.class文件中。我们现在用,,反编译这个类,找到出现setAddress的方法。如图所示: 大概 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 一下,发现方法的返回类型是boolean,也就是返回要么是真,要么是假。而短信发送一般来说没有返回值,所以发送成功会返回真,要么返回假,收费就是认为真就是成功。那么我们的修改很简单了,选择除了最后两行的代码以外的其它代码,然后删除其他。如图所示: 然后双击第一行,进行编辑,类型选择boolean, 值写true,如图所示: 确定保存方法。,,。修改完毕。然后我们,,反编译修改后的;,,,,检查 下,如图所示: 恩,没有问题。测试~ PS:有时候我们需要进行关键词 “messageconnection” 的搜索~ 关于游戏收费屏蔽修改的新思路 纯技术研究讨 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 章,仅供学习参考,请勿将以下内容用于违法用途,否则所造成的一切后果与MINISOYO、深度以及本人无关,一切后果自行负责。 以下截图以及内容来自Halo2.0以及sjboy。请自行研究。 以往修改或屏蔽收费过程都是将收费代码删除或者将判断语句的真假值互换,其实还有一个比较简单的方法。 既然判断出收费语句很困难,为何不回避这个问题呢。我们来看这个例子: 0 2B aload_1 1 B6 00 3A invokevirtual a/j/d()Ljava/lang/String; 4 4D astore_2 5 2B aload_1 6 B6 00 39 invokevirtual a/j/b()V 9 2C aload_2 10 10 2E bipush 46 12 B8 00 3C invokestatic c/a/j(I)Ljava/lang/String; 15 B6 00 42 invokevirtual java/lang/String/equals(Ljava/la ng/Object;)Z 18 99 01 42 ifeq 141 21 03 iconst_0 22 3C istore_1 23 03 iconst_0 24 3D istore_2 25 2A aload_0 26 B4 00 24 getfield a/f/d I 29 AA 00 00 00 00 00 00 84 00 00 00 00 00 00 00 03 00 00 00 1F 00 00 00 28 00 00 00 51 00 00 00 7B tableswitch 0: 18, 1: 23, 2: 43, 3: 63, default: 68 60 06 iconst_3 61 3D istore_2 62 11 00 C8 sipush 200 65 3C istore_1 66 A7 00 60 goto 69 69 B8 00 3D invokestatic c/a/m()Z 72 99 00 1D ifeq 38 75 12 0A ldc "你已经购买过两倍金钱了!" 77 14 00 01 ldc2_w 3000 80 01 aconst_null 81 B8 00 31 invokestatic a/c/a(Ljava/lang/String;JLmain/ d;)La/c; 84 59 dup 85 4E astore_3 86 2A aload_0 87 B6 00 38 invokevirtual a/j/a(Lmain/a;)V 90 B2 00 2F getstatic main/b/a Lmain/b; 93 B4 00 30 getfield main/b/i Lmain/c; 96 2D aload_3 97 B6 00 48 invokevirtual main/c/e(La/j;)V 100 B1 return 101 04 iconst_1 102 3D istore_2 103 11 00 C8 sipush 200 106 3C istore_1 107 A7 00 37 goto 69 110 B8 00 3E invokestatic c/a/n()Z 113 99 00 1D ifeq 58 116 12 09 ldc "你已经购买过三倍经验了!" 118 14 00 01 ldc2_w 3000 121 01 aconst_null 122 B8 00 31 invokestatic a/c/a(Ljava/lang/String;JLmain/ d;)La/c; 125 59 dup 126 4E astore_3 127 2A aload_0 128 B6 00 38 invokevirtual a/j/a(Lmain/a;)V 131 B2 00 2F getstatic main/b/a Lmain/b; 134 B4 00 30 getfield main/b/i Lmain/c; 137 2D aload_3 138 B6 00 48 invokevirtual main/c/e(La/j;)V 141 B1 return 142 10 07 bipush 7 144 3D istore_2 145 11 00 C8 sipush 200 148 3C istore_1 149 A7 00 0D goto 69 152 05 iconst_2 153 3D istore_2 154 11 03 E7 sipush 999 157 3C istore_1 158 A7 00 04 goto 69 161 B1 return 162 03 iconst_0 163 3E istore_3 164 B2 00 2B getstatic c/a/a Z 167 99 00 08 ifeq 76 170 04 iconst_1 171 3E istore_3 172 A7 00 1E goto 89 175 B2 00 2E getstatic main/MainMIDlet/a Lmain/MainMI Dlet; 178 B2 00 2F getstatic main/b/a Lmain/b; 181 B2 00 27 getstatic a/i/h [Ljava/lang/String; 184 2A aload_0 185 B4 00 24 getfield a/f/d I 188 32 aaload 189 12 04 ldc "0A12" 191 1C iload_2 192 B8 00 43 invokestatic java/lang/String/valueOf(I)Ljav a/lang/String; 195 12 03 ldc "0" 197 1B iload_1 198 B8 00 41 invokestatic e/a/a(Ljavax/microedition/midle t/MIDlet;Ljavax/microedition/lcdui/Displayable;Ljava/lang/String;Ljava/lang/Stri ng;Ljava/lang/String;Ljava/lang/String;I)Z 201 3E istore_3 202 01 aconst_null 203 4C astore_1 204 1D iload_3 205 99 00 6E ifeq 129 208 12 11 ldc "购买成功!" 210 14 00 01 ldc2_w 3000 213 01 aconst_null 214 B8 00 31 invokestatic a/c/a(Ljava/lang/String;JLmain/ d;)La/c; 217 4C astore_1 218 11 03 E9 sipush 1001 221 05 iconst_2 222 B8 00 3B invokestatic c/a/a(II)I 225 57 pop 226 2A aload_0 227 B4 00 24 getfield a/f/d I 230 AA 00 00 00 00 00 00 46 00 00 00 00 00 00 00 03 00 00 0 0 1E 00 00 00 2B 00 00 00 32 00 00 00 39 tableswitch 0: 105, 1: 110, 2: 113, 3: 116, default: 122 260 B2 00 2A getstatic c/a/E I 263 11 0B B8 sipush 3000 266 60 iadd 267 B3 00 2A putstatic c/a/E I 270 A7 00 1E goto 122 273 05 iconst_2 274 B3 00 2C putstatic c/a/b I 277 A7 00 17 goto 122 280 06 iconst_3 281 B3 00 2D putstatic c/a/c I 284 A7 00 10 goto 122 287 04 iconst_1 288 B3 00 2B putstatic c/a/a Z 291 11 03 E9 sipush 1001 294 10 12 bipush 18 296 B8 00 3B invokestatic c/a/a(II)I 299 57 pop 300 B8 00 3F invokestatic c/a/p()Z 303 57 pop 304 1C iload_2 305 B8 00 43 invokestatic java/lang/String/valueOf(I)Ljav a/lang/String; 308 03 iconst_0 309 B8 00 40 invokestatic e/a/a(Ljava/lang/String;I)V 312 A7 00 0D goto 134 315 12 10 ldc "购买失败!" 317 14 00 01 ldc2_w 3000 320 01 aconst_null 321 B8 00 31 invokestatic a/c/a(Ljava/lang/String;JLmain/ d;)La/c; 324 4C astore_1 325 2B aload_1 326 2A aload_0 327 B6 00 38 invokevirtual a/j/a(Lmain/a;)V 330 B2 00 2F getstatic main/b/a Lmain/b; 333 B4 00 30 getfield main/b/i Lmain/c; 336 2B aload_1 337 B6 00 48 invokevirtual main/c/e(La/j;)V 340 B1 return 首先你手上没有反编译工具,无法分析这段机器码到底说了些什么,但是凭某些 经验能一眼看出这是对于购买成功失败的一段判断程序。 如果,我们使用“GOTO ”语句将收费失败(购买失败)的内容连接到收费成功的判断之后是不是就能实现对收费的屏蔽了呢。 下面进行试验, 将 修改为 93行内容为 之后保存方法,编译,打包 我们可以看一下效果。 并且其他官方功能一切正常,最后通关后可以上传积分。 这种修改方法的好处在于:很容易判断需要修改的地方;修改方便;官方的后续功能(比如上传积分等)可以正常使用,不会因为评比了联网功能而导致一些功能的无法使用。 缺点在于:并非所有的跳转都是最终的结果,很可能某个收费项目分成很多部分,有很多判断跳转,所以使用这种方法屏蔽收费需要一定的尝试和验证。 就写到这里,欢迎大家提出更好的见解,一起进步。 PS:其实这个游戏是拉阔公司的《轩辕剑--天之痕壹》,相信有很多机友玩过~这里给出的方法就是搜索关键字“购买失败”,然后定位到具体的一行,将其转接到“购买成功”的那一行语句继续执行~ 屏蔽收费教程 废话不多说~ 1。模拟器测试游戏~观察收费段 点后进入~ 2。打开HALO 类编辑器 全文搜索 搜索关键字:可在战斗中获得双倍经验 ~ 3。如图: 目标出现在i.class 的 r方法名中~ 我们双击进去~ 4。可以说这里怎么分析我不懂~ 那么我就尝试~只留下 iconst_1 ireturn 5.保存方法--编译--打包--测试~ 模拟器与真机均通过~ 游戏过程中直接跳过~收费连接返回true PS:方法是很简单的~都是经过尝试 所以具体原因我也说不清,忘见谅~ 此方法可以X掉你们看到过的类似的几乎所有~但不完全~ Quote: 关于屏蔽收费疑问的解答~ 疑问1:发送几次短信出现手机短信发送过多,请换神州行方式付费, 解答:用我的方法根本不存在这种问题~原因:点双倍经验后,直接跳出恭喜你~ 已开启双倍经验~如图~ 可见这就像我们平时在储存游戏时一样~点后直接跳转到储存~ 而此方法就是如此,点后直接调用了开启双倍经验~ 我们在教程中删去的那一段,就是删掉了未破解前点双倍经验会调出的那段~从而直接调出了双倍经验~ iconst_1是布尔类型里的返回true的指令符~iconst_0就是返回false 因此我们留下他就是要他有返回值~如果不留的话,那么模拟器不能运行~ 此方法可以X掉的有~火蚊系列三 的 1 2 3 烈炎1 2 庄稼兵~ 当然游戏是新版本的~ 疑问2: 火蚊系列还有两章 1 和 3 的蚊帐之迷~ 当然理论还是同那个教程~不过有点变化~ 破解方法: 1。HALO类编辑搜索 可在战斗中获得双倍经验 如图: 观察发现和 之前的教程里不一样~ 这里明显少了很多~只有文字~所以 这也就是为什么,删了这里会模拟器无法运行的原因~ 2。既然有文字就有调用的方法~这些文字在a.class 下的s方法名里~ 3。HALO类编辑搜索 invokestatic a/s 发现调用这段文字的在a.class的u方法名下~双击进入~ 看起来是不是很熟悉~, 观察发现没有iconst , 那么尝试了下留下最后一行 结果不能运行 继续尝试留下aload_1 结果还是不能运行 那么就留最后一行~再点高级编辑 把iconst_1加进去~结果~~~~~~~~~ 模拟器能运行~测试同原方法一样了~ 真机测试也通过 手机游戏键值与分辨率的修改 一、javamagic修改图文教程 Quote: 引用软件作者的话 JavaMagic是一款为解决手机Java游戏某些兼容性问题而设计的软件。 本文以JavaMagic 0.60为例,介绍如何用JavaMagic对不兼容的Java游戏进行处理,使之能较好地运行在您的手机上。 目前一般手机(我是指非Nokia手机)与Java游戏的"主要矛盾"有一下几点: 一,游戏不能全屏运行。例如,很多游戏是以128x128的分辨率为标准设计的。而有的手机,其屏幕分辨率虽然也为128x128,但在运行游戏时,由于游戏没有以全屏方式运行,画面一部分会被按键提示栏之类的物体遮挡,十分影响心情。当然,如果您的手机分辨率大于128x128,比如128x160,就不会存在 这样的烦恼。但有的游戏被设计成能够自动适应屏幕分辩率,让这些游戏在128x160的手机上以非全屏的128x128尺寸运行,岂不是很委屈它们,所以,如果可以的话,全屏运行总是好的…… 二,游戏是Nokia专用的。目前很多游戏都是只有Nokia的版本,懒惰的厂商偶尔才会大发慈悲,发行对应其它手机的版本。由于Nokia的游戏一般都使用了Nokia专用的API,不能直接放在非Nokia手机上运行,直接导致我们对Nokia这厮又爱又恨。幸好劳动人民的智慧是无限的,某位我不知名的神仙写了一个Nokia API的模拟包,解决了这一难题。这就是在网上广为流传的那个俗称"com文件夹","com包"的物体。但是这个模拟包只是实现了一些最主要的基本功能,还不够完善,仍然存在一定兼容性问题。我知道除了我,还有人正在尝试去完善它。希望以后我们能看到更优秀的模拟包出现在网上。 三,游戏按键不兼容。虽然只要游戏厂商愿意,他们可以做出在几乎任何一部手机上都不出现按键不兼容问题的游戏,但在残酷的现实中大量的游戏都是根据KeyCode(键值、键码)这种跟设备有关的东西来识别按键的。而不同品牌的手机,甚至相同品牌的不同系列的手机,除了数字键(包括和[#]键)的KeyCode是一样的,其它按键比如左右软键、方向键,其对应的KeyCode几乎都是不同的。因此,在玩游戏时按了“右”,可能游戏会认为你按的是“下”;或者游戏需要你按“右软键”,可是你把所有键都按遍了游戏都不鸟你。已经有一些先进分子们(这些“手机游戏修改群”里的大大们十分活跃,相信不少人都见过)觉得这种情况难以忍受,于是研究出了解决方法——改游戏代码,把游戏里面使用到键值的地方通通改成我们自己手机的键值。无奈这种修改方法本质上是一种繁重的体力劳动,容易导致头晕眼花和一定程度的神经衰弱,所以我尝试了不到24小时就彻底地溃败了,转而研究其它的修改方法,并开始写JavaMagic这个软件。而且这种方式还有一定的局限性,更重要的是它不适合一般玩家。 四,字体问题。这点国产游戏尤为突出。很多游戏大量使用小字体,十分抠门。然而我们的手机厂商更加抠门,直接把小字体的支持阉割掉了。阉割得比较有人性的,会统一用一种字体来代替大、小字体,这样至少在游戏里还能看到字。而阉割得比较彻底的,就干脆就什么都不显示了。这个问题也可以通过修改游戏代码解决,但同样比较麻烦。 五,语言问题。呃……这个是游戏与游戏玩者的矛盾,不在本软件的讨论范围…… 开始教程 首先安装完javamagic后 双击打开 接着就进入到了主界面......... 当你第一次使用的时候,你需要打开设置,来针对你自己的手机来设置 点下设置后,看到 下面不改变OK键定义等是个性化功能 让我们先来设置键值吧~ 每一台手机都有自己的键值,但都不一定相同 输入自己手机的键值就可以了,正确输入左边手机的键值就可以了 右边没必要去管它 然后点screen 修改游戏的屏幕大小为自己手机的屏幕大小,为此软件作者设置了强制 全屏..下面还有几个是主流屏幕,在欲存框中输入自己的屏幕大小就可 以了. 全屏下面是“字体替换”的设置。开启此功能后~无论大中小字体~一律用手机默认的字体代替。如果您受到无法显示小字体这一问题的困扰~不妨试试开启字体替换功能~也许会有所帮助哦~~~但这个功能只是对字体进行替换~在有的游戏中使用系统默认字体后还需要对文本的位置进行修正~这样画面看起来才比较美观。对于这一点~JavaMagic就无能为力了。 点击进入misc1 引用软件作者Returner的话“过滤Manifest中的属性”就是用来对manifest.mf文件中的属性项进行过滤的。它有三种设置状态,不选~选择和半选择,:不选表示不进行任何过滤,选择表示仅保留最基本的几个属性~并将多余的属性过滤掉~同时替换掉某些属性,"MicroEdition-Configuration", "MIDlet-Version", "MicroEdition-Profile"及"Manifest-Version",的值~以避免这些值写得不标准造成jar无法载入的错误,半选择状态则表示仅对那些属性的值进行替换~不过滤任何属性。一般建议置于半选择状态~因为那些“多余”的属性~往往会在游戏中使用到~有的游戏运行时需要manifest.mf中特定的属性~过滤后可能会造成部分游戏无法运行。,如一款叫wax的游戏。, 。只有jar无法识别或载入时才应尝试进行完全过滤。 “对Manifest中的属性值进行字符过滤”则是针对属性的具体值 进行过滤。某些属性的值如果含有特殊的符号,如"*", "\"等,或中文符号,有的手机和软件不支持含有中文字符的manifest文件,~同样会造成jar无法识别或者别的兼容性问题。这个选项也有三种设置状态:不选表示不进行任何过滤,选择表示对所有属性的值都进行字符过滤,半选择表示仅对基本的几个属性,"MIDlet-1", "MIDlet-Name", "MIDlet-Vendor",的值进行字符过滤。如果您的手机很健壮~对于那些特殊字符和中文字符不会有不良反应~就不必选择此项,如果您的手机只对于某些属性的值比较敏感~就请将其设置为半选择状态,如果您的手机对中文支持较差~请设置为选择状态。至于怎么设置比较适合您~就要靠经验了。 剩下的比较简单 一部分是为MIDP1.0而设置的 不多说了 最后退回到主界面点击处理JAR 找到自己需要修改的JAR游戏 恭喜你,你成功了.但是不能保证每一个游戏都能玩!看你的手机性能了...会加上COM包 减掉一些速度! 二、超简单改变java游戏的分辨率,Change.Resolution.S60v3.v0.5 超简单改变java游戏的分辨率 176x208 to 208x208 and 240x320 and 352x416 208x208 to 176x208 and 240x320 and 352x416 240x320 to 176x208 and 208x208 and 352x416 352x416 to 176x208 208x208 and and 240x320 三、如何在进行移植时候进行改键值。 选用游戏:《7th_Space_SE_K700_176x220.jar》 在这个教程里~我们将看看如何进行键值的修改~这种修改是最省内存~而且也很简单~基本不会出错。我们做一个SE176X220的机型移植到m oto 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,~如图所示: 通过代码表编辑来编辑keyPressed方法~选中第一行~然后点击 “新建,高级 ,”。如图: 记住了~在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 复制粘贴后如图所示: 按确定完成~是不是看到在halo里面已经插入了以上的代码呢~ok~那么我们保存方法。 现在我们去验证以下~我们是否插入代码成功~用DJ 来反编译该类~发现在keyPressed这个方法中加入了如图的代码: 看起来是不是很熟悉~-21~-22等等~这不就是键值吗,上面的代码很容易看明白~就是当键值等于-21的时候我们就让它等于-6~这就是拦截思想的实现了。 有些朋友会问~为什么在halo里面怎么没有看到-6~-7等等的键值呢~实际上不要着急~因为-6实际上是等于250的。 我们在 lookupswitch -22: 6, -21: 3, -20: 21, -6: 12, -5: 18, -2: 15, default: 23 这行上~点击编辑~如图所示: 左边的值是不是很熟悉~如果我们要移植到别的机型~我们可以修改这 些值~当然我们也可以高级编辑它。 接下来我们在 bipush 250 这行点击编辑~如图所示: 是不是-6出来了。我们可以修改成任意的值。例如我们修改为-7~那么就左右软键颠倒了。 而接下来的keyRelease~也是同样复制代码就可以了。是不是很简单: 四、halo2另类改键法 最近碰到一个游戏,它是诺基亚的软件<王国之心>,我就想改到MOTO机上用.但用了JavaMagic,fulljava,MotoMidMan来改键,发现还是不行,最后使用BB大大的HALO2的改键教程也无能为力!我就估计可能程序中对键值另有映射,打开游戏GAME下的MultiOutPut.class发现方法keyPressed和keyReleased它和数组codes的值与键值 i 有关. public void keyPressed(int i) { if(i == codes[0] || i == codes[1]) up = true; if(i == codes[2] || i == codes[3]) down = true; if(i == codes[4] || i == codes[5]) left = true; if(i == codes[6] || i == codes[7]) right = true; if(i == codes[8] || i == codes[9]) menu_left = true; if(i == codes[10] || i == codes[11]) menu_right = true; if(i >= 48 && i <= 57) key_num[i - 48] = true; } 例如:当codes[0]或codes[1]的值与按键"上"的键值(-1)相同时就执行方向键"上"的动作.就是说它是以数组codes的值为标准的!而数组codes的值如下:int codes[] = { -1, 1, -6, 6, -2, 2, -5, 5, -21, -6, -22, -8}.结合方法keyPressed和keyReleased分析,这数组的值两个为一组.例如:-1, 1对应的就是方向键"上";-6, 6对应的就是方向键 "下".这两个数前一个是诺基亚对应键值,后一个是GAME ACTION值,GAME ACTION值是通用的不用改.既把codes[2]改为-6,codes[4]改为-2,codes[6]改为-5,codes[8]改为-21,codes[10]改为-22,需要注意:MOTO机的方向键"下"与诺基亚左软键键值相同,都是-6.应把方法keyPressed和keyReleased的这句: if(i == codes[8] || i == codes[9]) 改为: if(i == codes[8] || i == codes[8]). 分析完毕,用HALO2打开游戏,在MultiOutPut.class搜索codes. [ 图1 ] 有3个对象,我们要改的是第一个. [ 图2 ] 具体改法看图吧! [ 图3 ] 最后再把keyPressed和keyReleased方法中的if(i == codes[8] || i == codes[9])改为: if(i == codes[8] || i == codes[8]). [ 图4 ] 图一 图二 图三 图四 五、用halo改键值的方法,大众化教程 大家在合成数字键版的软件时,会碰到了这样一个问题:就是JM、手游伴侣等改出来的数字键版的软件,用来合成后,最小化按键都无法使用了,也就是无法长按*号键最小化,设置为其它按键也不行的. 有没有解决的办法呢? 当我看了halo的教程后,觉得很有可能会解决这一问题,但我没学过专业知识,那个教程看得一知半解的,所以到处求助,结果还是一无所获 汗,算了,求人不如求已,自己研究研究吧…… 今天刚好有空,就开始了艰辛的旅程…… 废话这么多,教程开始: 以qq08b2b063电脑音显时间显自定义头像非数字.jar为例 首先,把Halo系列教程的“改键值补充”这个课程看懂,只要懂方法就行了,至于是什么原理不用理它,理了也不懂 .顺便把“教程四~如何在进行移植时候进行改键值”看看。东西都在附件里。 然后~用halo打开这个QQ,找出含有那三个函数的class文件,在这个QQ中,我们要改的是dp.class,鼠标对者它右击,点Edit Class,打开方法,打开那三个函数中的一个,点Code,点代码编辑表,选第一行,新建(高级),如下图: 接着把“改键值补充”教程中添加的那段代码改为如下这个代码: iload_1 bipush 50 if_icmpne 6 bipush 255 istore_1 iload_1 bipush 56 if_icmpne 11 bipush 254 istore_1 iload_1 bipush 52 if_icmpne 16 bipush 253 istore_1 iload_1 bipush 54 if_icmpne 21 bipush 252 istore_1 iload_1 bipush 53 if_icmpne 26 bipush 251 istore_1 iload_1 bipush 55 if_icmpne 31 bipush 52 istore_1 iload_1 bipush 57 if_icmpne 36 bipush 54 istore_1 iload_1 bipush 48 if_icmpne 41 bipush 53 istore_1 iload_1 bipush 248 if_icmpne 46 bipush 48 istore_1 记得要在keyPressed,keyReleased和keyRepeated这三个函数都添加 上代码~第三个不用也行。还要记得每个函数都要点“保存方法”: 最后~工程--编译~工程--打包。 好了~这样就把QQ改为:28465为方向~79为原来46的功能~0读取 消息~C键换肤 这样的数字键QQ用来合成~就能够设置最小化按键了 下面说明一下: 在“改键值补充”中~那5行代码的意思我就再啰嗦一遍: iload_1 把本函数第一个变量读进来,也就是那个参数inKeyValue,i开头代表读的是int型 bipush 27 放个27准备比较 if_icmpne 6 如果不相等就跳到第6句,我们添的只有5句,所以就是跳过我们的代码,执行原有的 bipush 249 能走这里就是说上面没跳转,那就改键值,这个249呢就是-7啦,你瞧256-7=249嘛 istore_1 把上面的-7存到本地变量1中,就是参数 也可以这么说:如果你按下的是27这个键,就改为249键,-7,,如果不是~就跳到第6句。 如法炮制~每5行可改一个键。第二个“5行”中~记得要把“if_icmpne 6”改为“if_icmpne 11”,依此类推。 然后点确定~再点保存方法。另两个函数也是如法炮制。
本文档为【[剖析]高手破解手机java游戏】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_496339
暂无简介~
格式:doc
大小:882KB
软件:Word
页数:38
分类:生活休闲
上传时间:2017-09-01
浏览量:49