用HALO2进行手机游戏短信破解的心得

上传人:平*** 文档编号:16348795 上传时间:2017-11-07 格式:DOC 页数:7 大小:158.49KB
返回 下载 相关 举报
用HALO2进行手机游戏短信破解的心得_第1页
第1页 / 共7页
用HALO2进行手机游戏短信破解的心得_第2页
第2页 / 共7页
用HALO2进行手机游戏短信破解的心得_第3页
第3页 / 共7页
用HALO2进行手机游戏短信破解的心得_第4页
第4页 / 共7页
用HALO2进行手机游戏短信破解的心得_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《用HALO2进行手机游戏短信破解的心得》由会员分享,可在线阅读,更多相关《用HALO2进行手机游戏短信破解的心得(7页珍藏版)》请在金锄头文库上搜索。

1、转至手游坛里关于手机短信游戏破解的文章有很多,而且很有水平,令人高山仰止!实不想班门弄斧,恐招千夫所指!但HALO2 的推出给破解工作带来了许多便利,有必要向新手们介绍下,本人水平有限,文中不足之处请多多包涵!郑重声明:文中所引用的例子谨作为学习交流,并无它意!用 HALO2 打开底下城与勇士.jar,点击类编辑器, 在编辑 选项中选全文查找,在搜索栏中填入MessageConnection,搜索方式选By total class,开始搜索!(图 1)搜索结果如下:(图 2)其中类名 j 是指该方法在 JAR 包根目录下的 j.class.方法名 f 就是指该方法名为f .签名是对该方法的描述

2、,是区别于同一个 class 文件里同名方法唯一表述 .我们反编译 j.class,找到这个f方法,它的起首行private void f(int i1)表明它的使用权限为 私有的(private),而 public 指公共的,friendly 指友好的,protected 指受保护的!具体的说明请参考专业的教材.void 是指该方法的返回类型,也就是别的方法调用该方法所得到的东西,void 意味着“什么也不返回,但也可返回一些变量值或其它结果.具体的要结合程序分析.比如boolean 就表示它返回的就是布尔值 ,即真(true)和假(false).具体的说明也请参考专业的教材.括号里的(in

3、t i1)是该方法的自变量列表.自变量列表规定了我们在调用这个方法时传递给它的东西.对于本方法 int i1 是指 :给该方法传递一个整型变量 (int),变量名是 i1.让我们双击这个搜索结果来到 j.class 下的 private void f(int i1)方法.点击这个f方法(不是它的下层目录0code! )上面所说的东西如图 3.以下是反编译后程序:private void f(int i1)b = i1;a = false;MessageConnection messageconnection = null;Object obj = null;if(l = 0) h = sms:

4、/ + d0;i = JG + e + + f + # + g;l = 1; elseif(l = 1)h = sms:/ + d1;i = 62 + e + + f + # + g;l = 0;tryTextMessage textmessage;(textmessage = (TextMessage)(messageconnection = (MessageConnection)Connector.open(h).newMessage(text).setPayloadText(i);messageconnection.send(textmessage);catch(Exception _e

5、x)b = 0;trymessageconnection.close();catch(Exception _ex) a = true;其中:tryTextMessage textmessage;(textmessage = (TextMessage)(messageconnection = (MessageConnection)Connector.open(h).newMessage(text).setPayloadText(i);messageconnection.send(textmessage);catch(Exception _ex)b = 0;是检查是否进行了发送短信动作,如果没发送

6、就抛出异常并将变量 b 赋值为 0(b = 0).而下一段: try messageconnection.close();catch(Exception _ex) a = true是检查是否发送短信完毕,如果没完毕就抛出异常,如果完毕了就将变量 a 赋值为 true( a = true).就是说只有 a = true 才可以享受到发送短信后的服务!该方法的任务就是返回 a 和 b 两个变量,其他的都是多余的,都可以删除!用 HALO2 的代码编辑修改后,该方法变成了:aload_0iload_1putfield j/b Iaload_0iconst_1putfield j/a Zreturn反

7、编译后程序:private void f(int i1)b = i1;a = true;我们在模拟器上试验下,发现还是没破解成功!而且屏幕显示正在购买. 请稍等片刻.,和原来的一样!即是说游戏另有陷阱,所以这就是用 HALO 自动破解失败的原因!好的那我们换个角度来思考!请看以下这段文字:public static String c = 购买成功,您的游戏币已增加 5000!, 购买成功,欢迎进入赌场体验!, 购买成功,杀伤力已经加倍!, 购买成功,升级后能获得加倍的技能点!, 购买成功,接下来打怪获得的经验值比之前增加一倍!, 购买成功,接下来的强化装备属性 100%成功!, 隐藏职业已开启

8、 ,请返回选择职业! 这就是发送短信成功后所显示的信息!我就想找到调用这段文字的方法,看看判断短信发送成功的条件是怎样的.这个方法是静态(static)类型的,在 HALO2 里就是 这段:anewarray java/lang/Stringdupiconst_0ldc 购买成功,您的游戏币已增加 5000!aastoredupiconst_1ldc 购买成功,欢迎进入赌场体验!aastoredupiconst_2ldc 购买成功,杀伤力已经加倍!aastoredupiconst_3ldc 购买成功,升级后能获得加倍的技能点!aastoredupiconst_4ldc 购买成功,接下来打怪获得

9、的经验值比之前增加一倍!aastoredupiconst_5ldc 购买成功,接下来的强化装备属性 100%成功!aastoredupbipush 6ldc 隐藏职业已开启,请返回选择职业!aastoreputstatic j/c Ljava/lang/String;最后这句:putstatic j/c Ljava/lang/String的putstatic我把它理解为把数据放入寄存器 (堆栈?),(我没专门学过任何高级语言,只是小时候玩学习机时,接触了些 FBASIC 语言 .不知这样解释对否? 请高手不要见笑!)那 getstatic 就应该是把数据从寄存器里取出,而 j/c Ljava/

10、lang/String 就是存放以上数据的地址的标签.我们在 HALO2 里的类编辑器搜索 j/c Ljava/lang/String;会有两个结果,其中一个就是上面那段,不用理会.还有个 d 方法在 j.class,即是这段:private void d()switch(d)case 2: / 002default:break;case 0: / 0String s = ;switch(e)case 2: / 002s = s + 购买后伤害倍数为: + 2 * a.cF + 倍;break;case 4: / 004s = s + 购买后经验值倍数为: + 2 * a.cE + 倍;bre

11、ak;case 3: / 003s = s + 购买后技能点倍数为: + 2 * a.cG + 倍;break; a.a(ce + s, b1, b2, b3, b4);a(-2, 4);d = 1;return;其中a.a(ce + s, b1, b2, b3, b4);调用了 j/c Ljava/lang/String;具体代码为getstatic j/c Ljava/lang/String;意思是取出这段文字!这个 private void d()方法又被谁调用的? 我们再往上找,而 private void d()的标签是j/d()V. j表示该方法位于 JAR 包根目录下的 j.cl

12、ass./d表示它的方法名.()表示调用该方法时没有东西传递给它,所以括号里是空的.V 表示该方法返回类型是 void,V 就是 void 的缩写.或者点击图 3 标签前面进入常量池,用ctrl+c复制标签(需自己添加路径和方法名),再用ctrl+v粘贴到搜索栏里!经过搜索发现 public final void a(Graphics g1)调用了 private void d()方法.如下:public final void a(Graphics g1)f+;j+;k+;g1.setFont(k.a);switch(c)case 0: / 0b();b(g1);break;case 2: /

13、 002c();c(g1);break;case 10: / nd();d(g1);break;case 11: / 013e();e(g1);break;i = 0;分析后得知:只有变量 c = 10 时,程序才能执行 private void d()方法 ,即:case 10: / n d();d(g1);break;就是说只有 c = 10,程序才会认为短信发送成功!变量 c 的标签是 j/c I,后面的I 表示该变量的数据类型.现在我们回到那个发送短信的方法 private void f(int i1),看看变量 c 是如何变化的!经过搜索发现方法 private void f(int

14、 i1)被 public final void a()调用,而 public final void a()又被 r.class 的 public final void run()调用了,run()方法是 Thread(线程)类下的,可以使用 thread 的 start 方法来调用它.那我们搜索谁调用 run()方法时在搜索栏里输入invokevirtual java/lang/Thread/start()V经过搜索发现有 4 个结果,分析后只有 j.class 下的private void e(int i1)方法调用了 r.class 的 public final void run().那我

15、们看下 private void e(int i1)方法:private void e(int i1)if(i1 = 0)c(2);Thread thread;(thread = new r(this).start();f = 0;return;它在(thread = new r(this).start()前先调用了 c 方法(c(2);),并且给 c 方法传递了一个整数2,而 c 方法的标签是 j/c(I)V ,就是如下的方法:private void c(int i1)c = i1;d = 0;j = -1;k = -1;里面的变量 c 就是我们上面提到的,c = i1;就是变量 c 的值等于给 c 方法传递的那个整数2.我们只要把private void e(int i1)方法里的 c(2)改为 c(10)就完成破解了!可能有人问 private void e(int i1)方法和 public final void a(Graphics g1)方法没关联啊!你只要继续搜索 priv

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号