诺基亚手机论坛's Archiver

a363389589 发表于 2008-8-4 21:22

【教程】SMS(短信)破解的方法!

【无关的废话】
才来论坛几天,发现这里真的是个好地方!!

恩,版主大大跟我说了下,发个教程上来吧!

【关于开始】

首先,我们得有那么个软件对吧 ···恩,这个软件问题还是大家自己解决比较好,用百度啊谷歌啊什么搜一搜。
版本得是2.06以前的。

【为什么是2.06以前的?】
因为这款软件以前的时候是专门为破解游戏而生的,附带了汉化等功能。

最开始的1.0可以已经绝版了..不过可以这么说,1.0版是最稳定最好用的,当然,1.0也有不少的缺陷....

【开始破解】
说了那么多废话,不说你们,我自己也觉得有点JJYY了...

下载了HALO以后,是不可以直接打开的哦~还需要一个JDK(最低版本1.5),
JDK是SUN公司的作品,网络上有很多很多,随便找找就是一大堆的。这里就不多嘴了。

下载了JDK以后安装,安装完成以后可能需要你重启电脑,不去管它,我们这个只是需要JDK而已
又不需要它运行。

打开 HALO.exe
如下图:
我这个是HALO1.0的,其他的版本不影响,步骤是一样的。
[attach]1364507[/attach]

按照顺序点击:“工具→配置”,你会看到下面这样的情形。
[attach]1364508[/attach]

其他的就没什么需要改动的了,本来就很不错。如果你是老手了,可以考虑改动改动。
这里只是针对破截进行传教,故此不说了。
然后应用、确定。

让我们来看看下一张图。
[attach]1364509[/attach]

这里是破解最关键的一步,一旦出错可就麻大烦了!
先点 1 编译 ,它会出现如下提示。
[attach]1364510[/attach]
等待一会儿,这个等待时间是看配置来的,配置高的电脑速度就快。
配置低的嘛....去弄杯咖啡什么的慢慢等吧..

接着就是 2 打包
按下第二个图标
如上一步一样,也会出现类似的提示。依旧需要慢慢的等待.....

全部完成以后,游戏的破解就完成一半了···

为什么是一半呢?

因为,大部分的人都是在这个地方出西西··游戏打包了以后就以为我那个游戏就可以了,其实是错误的。
要在HALO的目录下有一个"game"的文件夹,选择你刚破解的游戏名称相同的文件夹,打开以后才是
我们辛辛苦苦破解出来的游戏~

说到这里基本上就可以往上发啦 ···不过在发之前,最好是拿相应机型,或者模拟器进行一点点的测试,
以确保游戏是真正的破解。
【有的游戏有反盗版,有的时候破解了的也不可以用,还有的是WAP收费,
这个就不属于这个帖子破解的范围了】

【实战部分】
先从网上随便弄一个下来,进行范例测试。
我们选用的是     无人岛-孽欲狂魔

打开
[attach]1364511[/attach]

然后,编译、打包
再运行一下··[attach]1364512[/attach]

搞定!

这个游戏是在开始的时候收费,我之前已经玩过了,所以没有出现扣费点。

第一次玩的时候是会出现的·~~

[[i] 本帖最后由 wangyizell323 于 2008-8-5 22:46 编辑 [/i]]

a363389589 发表于 2008-8-4 21:32

天地游系列游戏的简单破解

天地游公司有的时候会出那么个反盗版的东西来。对我们的破解造成了巨大的阻挠。

这里如果你看不懂上面的那个教程的话,或者不好用。

可以参照这个。

要求:
1.有WINRAR解压缩程序
2.一点点电脑的操作技术(电脑白痴就不要找我抬杠了)
3.我是移动用户。

以 仙剑传奇-神雕侠女 举例

用WINRAR打开JAR包,出现如下情况
[attach]1364536[/attach]

找到chid.txt,并打开它!

出现了一个笔记本对么?里面的内容是113吧!把它改成0000或00000

移动用户都知道发0000是什么意思吧!这个短信无论如何都是免费的!
正好成了我们可以利用的漏洞。

然后保存!

RAR会问你,是不是在压缩包里更新。点 是 就好了

然后再安装。

遇到需要发短信的地方就点是好了,虽然会出0.1元的短信费,但是在没有破解版的情况下,就这样啦 ··

a363389589 发表于 2008-8-4 21:35

『破解』取消短信收费简易教程

方法很…说难就难,说简单就超简单。

正文部分:
首先来了解一下利用java实现收费的原理,这个使用的是j2me的可选包WirelessagingAPI(WMA,JSR120)来进行有操作的。这是一个敏感API,在未取得授权或认证之前使用时会提示使用者是否要进行操作(就是在进行第一次短信支付时所问的“是否允许发送短信”,提示仅一次,若同意则以后跳过,直接询问是否发送至sms://******;若不同意则永远禁发送,支付功能失效,除非重新安装。)

由于设置了短信的游戏中目的只是为了收费,而且一般一条短信的价格都不菲,但是很多地方不发短信又无法继续进行游戏,那么,如果想继续免费玩下去,就得对短信操作进行处理。(一般来说发短信和连网不一样,不是必须发才可以实现结果的,同样是进下一关,网络下载就是必须进行的操作,而短信买关就不一样,那关其实是存在的,但是必须进行这一操作才可继续玩)
首先是工具,必备的工具就是java反编译软件,UE或HEX等16进制编辑器,另外为了方便查看字节码还需要jclasslib。
首先我们来看一段代码,一般的短信发送都是类似的,当然,你也可以利用这个自己写个免费发短信的东西:)
import java.io.IOException;
import java.io.PrintStream;
import javax.microedition.io.Connection;
import javax.microedition.io.Connector;
import javax.wireless.messaging.*;
class SMSXX
{
               String ph;
               String s = 发送的内容;
               boolean isSend = false;
               void sendSms()
               {
                       MessageConnection messageconnection = null;
                       try
                       {
                           String s1 = sms://  phoneNum;
                           TextMessage textmessage;
                           (textmessage = (TextMessage)(messageconnection = (MessageConnection)Connector.open(s1)).newMessage(text)).setAddress(s1);
                           textmessage.setPayloadText(s);
                           messageconnection.send(textmessage);
                           doSendOk();
                       }
                       catch(IOException _ex)
                       {
                           doSendFalse();        }
               }
               void doSendOk()
               {
                       System.out.println(Send Ok);
                       isSend = true;
               }
               void doSendFalse()
               {
                       System.out.println(Send False);
                       isSend = false;
               }
}
通常,发送成功之后会有个判断或者是进行接着的方法,有的发送的方法本身就返回boolean变量,如果发送成功就返回true,反之就返回false。上面的例子属于一般情况,我们可以用以下几个思路来考虑。
1.发送成功后会运行doSendOk()方法,而发送失败就会运行doSendFalse(),那么我们只要把这两个方法的位置换一下,那么即使发送失败,那么程序仍然会运行doSendOk()方法。我们用jclasslib打开该class,然后查看sendSms()方法,看字节码:
0 aconst_null
1 astore_1
2 new #31  
5 dup
6 ldc #33  
8 invokespecial #36 java/lang/StringBuffer.
11 aload_0
12 getfield #18  
15 invokevirtual #40  
18 invokevirtual #44  
21 astore_2
22 aload_2
23 invokestatic #50  
26 checkcast #52  
29 dup
30 astore_1
31 ldc #54  
33 invokeinterface #58   count 2
38 checkcast #60  
41 dup
42 astore_3
43 aload_2
44 invokeinterface #65   count 2
49 aload_3
50 aload_0
51 getfield #22  
54 invokeinterface #68   count 2
59 aload_1
60 aload_3
61 invokeinterface #72   count 2
66 aload_0
67 invokevirtual #75  
70 goto 78 (8)
73 astore_2
74 aload_0
75 invokevirtual #78  
78 return

我们需要利用的就是67行和75行这两段,我们只要把这两段的位置换一下就OK。用HEX打开,定位(怎么定位请看我的另一篇文章,快速定位需要修改的16进制位置),
67行为:B6004B
75行为:B6004E
我们把004B和004E两个位置换下,保存,然后反编译看看,是不是OK了,接下来我们要做的是为了确保不发出短信出去(当然在有提示的时候按否也是一样的,但是为防止按错还是保险起见)把sms://这个改成其他字符吧,比如kim:// :),这样一运行到发短信的地方就发生异常,程序就运行catch中的doSendOk()了。
另外一种思路要你对流程很了解,不直接修改发送的代码,而是看doSendOk()和doSendFalse()这两个方法,既然发不出去会运行doSendFalse(),而doSendFalse()和doSendOk()二者只是一个变量的区别,那么我们把doSendFalse()中的        isSend = false改成        isSend = true,不就是和doSendOk()只是方法名之间的区别了吗,同样道理,改完后再把sms改成其他东西。(具体过程略,大家自己想想吧)。
介绍俩个软件:1 UltraEdit(16进制编辑器,汉化必备基本工具)下载地址:
[attach]1364563[/attach]
[attach]1364568[/attach]
[attach]1364569[/attach]
[attach]1364570[/attach]
[attach]1364571[/attach]
[attach]1364576[/attach]
                    2 小颖JAVA源代码反编译超级引擎(强有力的汉化助手)下载地址:
[attach]1364577[/attach]

[[i] 本帖最后由 a363389589 于 2008-8-4 21:53 编辑 [/i]]

a363389589 发表于 2008-8-4 21:36

[教程]快速定位需要修改的class文件中的16进制位置

首先讲下软件,需要下载一个名为:jclasslib的软件,并且需要安装JDK,下载下来的jclasslib一般是个压缩包,解压后目录下会有个名为bin的文件夹,里面的jclasslib.exe就是可执行文件。打开该文件,界面很清楚,选择打开我们需要修改的class文件。
比如我们需要修改的文件有这样一段代码:
public boolean a(String s1, String s2)
    {
        MessageConnection messageconnection = null;
        boolean flag = true;
        try
        {
            String s3 = "sms://" + s1;
            messageconnection = (MessageConnection)Connector.open(s3);
            TextMessage textmessage = (TextMessage)messageconnection.newMessage("text");
            textmessage.setAddress(s3);
            textmessage.setPayloadText("LS " + s2);
            messageconnection.send(textmessage);
        }
        catch(Throwable throwable)
        {
            flag = true;
        }
        if(messageconnection != null)
        {
            try
            {
                messageconnection.close();
            }
            catch(Exception exception)
            {
                return true;
            }
            return flag;
        } else
        {
            return true;
        }
    }
如果我们想把所有的true改成false。
在打开的class文件中左边会看到一系列菜单:

分别表示常量池,接口,域,方法,我们需要修改的是方法a(String s1, String s2),所以我们双击Methods,可以看见该class中的所有方法,我们找到我们需要修改的方法a,如果有很多a方法,可以对比反编译软件反编译的方法顺序来定位。我们找到a方法:

双击code,查看虚拟机指令:
  0 aconst_null
  1 astore_3
  2 iconst_1
  3 istore 4
  5 new #105 <java/lang/StringBuffer>
  8 dup
  9 invokespecial #106 <java/lang/StringBuffer.<init>>
12 ldc_w #676 <file://>
15 invokevirtual #107 <java/lang/StringBuffer.append>
18 aload_1
19 invokevirtual #107 <java/lang/StringBuffer.append>
22 invokevirtual #112 <java/lang/StringBuffer.toString>
25 astore 5
27 aload 5
29 invokestatic #677 <javax/microedition/io/Connector.open>
32 checkcast #678 <javax/wireless/messaging/MessageConnection>
35 astore_3
36 aload_3
37 ldc_w #679 <text>
40 invokeinterface #680 <javax/wireless/messaging/MessageConnection.newMessage> count 2
45 checkcast #681 <javax/wireless/messaging/TextMessage>
48 astore 6
50 aload 6
52 aload 5
54 invokeinterface #682 <javax/wireless/messaging/Message.setAddress> count 2
59 aload 6
61 new #105 <java/lang/StringBuffer>
64 dup
65 invokespecial #106 <java/lang/StringBuffer.<init>>
68 ldc_w #683 <LS >
71 invokevirtual #107 <java/lang/StringBuffer.append>
74 aload_2
75 invokevirtual #107 <java/lang/StringBuffer.append>
78 invokevirtual #112 <java/lang/StringBuffer.toString>
81 invokeinterface #684 <javax/wireless/messaging/TextMessage.setPayloadText> count 2
86 aload_3
87 aload 6
89 invokeinterface #685 <javax/wireless/messaging/MessageConnection.send> count 2
94 goto 102 (+8)
97 astore 5
99 iconst_1
100 istore 4
102 aload_3
103 ifnull 122 (+19)
106 aload_3
107 invokeinterface #687 <javax/microedition/io/Connection.close> count 1
112 goto 119 (+7)
115 astore 5
117 iconst_1
118 ireturn
119 iload 4
121 ireturn
122 iconst_1
123 ireturn
接下来我们对照虚拟机指令表:
(0x01)对应aconst_null
(0x4e)对应astore_3
(0x04)对应iconst_1
(0x36)对应istore
那么我们用Hex Workshops打开该class文件,搜索16进制关键字:014E0436,很快我们就定位到需要修改的地方了。
我们把该位置附近的0336和03AC修改成0436和04AC,保存,然后再看看:
public boolean a(String s1, String s2)
    {
        MessageConnection messageconnection = null;
        boolean flag = false;
        try
        {
            String s3 = "file://" + s1;
            messageconnection = (MessageConnection)Connector.open(s3);
            TextMessage textmessage = (TextMessage)messageconnection.newMessage("text");
            textmessage.setAddress(s3);
            textmessage.setPayloadText("LS " + s2);
            messageconnection.send(textmessage);
        }
        catch(Throwable throwable)
        {
            flag = false;
        }
        if(messageconnection != null)
        {
            try
            {
                messageconnection.close();
            }
            catch(Exception exception)
            {
                return false;
            }
            return flag;
        } else
        {
            return false;
        }
}
已经完成了修改了!

wangyizell323 发表于 2008-8-4 22:25

学习下,楼主辛苦了

psw1cxl 发表于 2008-8-8 13:29

感谢楼主分享,期待你更多更好的作品。

flyboy123 发表于 2008-8-8 13:37

兩個字,強悍:yc (3)yc

JAS0N 发表于 2008-8-8 14:41

楼主很强啊!!强烈支持!!

找个人来爱 发表于 2008-8-9 00:58

太辛苦LZ了~~~~
支持~~~~

a363389589 发表于 2008-8-9 13:44

【HALO2.0 另一种破解的方法】

不知道大家有没有注意到HALO 2.07以后的版本以为拉阔的那封警告信,
SMS破解功能被取消了。
MS方面也不再专项破解手机游戏。

而HALO2.0拥有class edit的功能。
这里就根据最新版的HALO写一个破解游戏的教程。以下是我的一点使用经验。

首先去下一个HALO 2来  版本是什么无所谓。现在是2.12??

打开HALO
[attach]1372535[/attach]

这里我以 封神榜-紫虚天玄录 为例。

[attach]1372536[/attach]

打开  [b][color=red]编辑→全文查找[/color][/b]
[b][color=#ff0000][/color][/b]
[color=black]记住,一定要在打开了CLASS编辑模式的时候才可以这样。不然下面的教程无法继续。[/color]

打开后如下图
[attach]1372537[/attach]

在以前的教程里写得相当复杂,还要查找这个class是谁调用的,然后调用方式等等,
让人觉得眼花。我在这里做一点点精简工作。
在By total classes模式下输入 setaddress或message

现在比较流行message和setaddress

以前大部分是http,不过现在HTTP代表的却是WAP收费。。

点find

会出现以下情况:
[attach]1372538[/attach]

双击打开,选择[b][color=red]代码编辑表[/color][/b]。

[attach]1372539[/attach]

将除了倒数两行的代码外的全部代码都删除。

在按下删除的时候,HALO可能会问你
[attach]1372540[/attach]

点“是”就好啦 ·~~
删除以后还有两行怎么办呢?

双击倒数第二行的iconst_0
[attach]1372541[/attach]
选择 boolean 即 布尔值  改为 true

然后点 [b][color=red]保存方法[/color][/b] 就可以啦!

不要着急哦~万一你这个时候就把HALO关掉了,那你就亏大了。
因为你的游戏还没有生成。
点击 [b][color=red]编译  打包[/color][/b]
在/game/****(你的游戏名称)寻找你的游戏文件。

这个时候破解就算是完成了~

[[i] 本帖最后由 a363389589 于 2008-8-14 04:32 编辑 [/i]]

a363389589 发表于 2008-8-10 13:58

没人看 ?:yc (4)yc

wangyizell323 发表于 2008-8-10 16:36

支持啦,哈哈,辛苦

q626349123 发表于 2008-8-10 18:28

哇,好厉害000

a363389589 发表于 2008-8-11 04:00

还有一些跟破解无关的教程。
我自己用有的时候还出问题。
就不在这里误导各位了。
待把它们各个击破,再发上来。

lfr0100573 发表于 2008-8-13 22:45

太暴力了  额佩服丫···

Amnesiac 发表于 2008-8-15 21:56

破解完了.
但是拿模拟机运行显示文件是错误的

wangyizell323 发表于 2008-8-15 22:48

[quote]原帖由 [i]Amnesiac[/i] 于 2008-8-15 21:56 发表 [url=http://www.nokiabbs.com/redirect.php?goto=findpost&pid=9056601&ptid=489753][img]http://www.nokiabbs.com/images/common/back.gif[/img][/url]
破解完了.
但是拿模拟机运行显示文件是错误的 [/quote]

用的哪种方法破解的?破解的什么游戏?

Amnesiac 发表于 2008-8-15 23:55

这个方法很新鲜啊.
我之前看的不是这样

Amnesiac 发表于 2008-8-15 23:55

[quote]原帖由 [i]wangyizell323[/i] 于 2008-8-15 22:48 发表 [url=http://www.nokiabbs.com/redirect.php?goto=findpost&pid=9056980&ptid=489753][img]http://www.nokiabbs.com/images/common/back.gif[/img][/url]


用的哪种方法破解的?破解的什么游戏? [/quote]

就是那个  新绝代双骄

很失败啊.

a363389589 发表于 2008-8-18 07:42

新绝代双娇?是不是那种收费代码分N节的那种?那种的这里的教程貌似不可破解。
不过现在市面上90%的游戏都可以破解。你说的那游戏我过几天去看看,可能会出破解的。

页: [1] 2 3

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.