• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            tqsheng

            go.....
            隨筆 - 366, 文章 - 18, 評論 - 101, 引用 - 0
            數據加載中……

            JAR破解原理

            JAR破解原理

            首先來了解下利用java實現短信發送的原理,這個使用的是j2me的可選包Wireless Messaging API(WMA,JSR120)來進行操作的,這是個敏感API,在未取得授權或認證,使用之前必須提示使用者是否要進行操作。對于有的型號的手機可以直接設置程序是否可以進行短信操作。所以一般來說,不會出現無緣無故發出短信而扣費的情況,除非你設置了總是允許操作這項(相信沒幾個人會這么做)。當然很多免費短信軟件如悠信,XROSE什么的都是利用的這個API啦。
            由于設置了短信的游戲中目的只是為了收費,而且一般一條短信的價格都不菲,但是很多地方不發短信又無法繼續進行游戲,那么,如果想繼續免費玩下去,就得對短信操作進行處理。(一般來說發短信和連網不一樣,不是必須發才可以實現結果的,同樣是進下一關,網絡下載就是必須進行的操作,而短信買關就不一樣,那關其實是存在的,但是必須進行這一操作才可繼續玩)
            首先是工具,必備的工具就是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 <java/lang/StringBuffer>
            5 dup
            6 ldc #33 <sms://>
            8 invokespecial #36 <java/lang/StringBuffer.<init>>
            11 aload_0
            12 getfield #18 <SMSXX.phoneNum>
            15 invokevirtual #40 <java/lang/StringBuffer.append>
            18 invokevirtual #44 <java/lang/StringBuffer.toString>
            21 astore_2
            22 aload_2
            23 invokestatic #50 <javax/microedition/io/Connector.open>
            26 checkcast #52 <javax/wireless/messaging/MessageConnection>
            29 dup
            30 astore_1
            31 ldc #54 <text>
            33 invokeinterface #58 <javax/wireless/messaging/MessageConnection.newMessage> count 2
            38 checkcast #60 <javax/wireless/messaging/TextMessage>
            41 dup
            42 astore_3
            43 aload_2
            44 invokeinterface #65 <javax/wireless/messaging/Message.setAddress> count 2
            49 aload_3
            50 aload_0
            51 getfield #22 <SMSXX.s>
            54 invokeinterface #68 <javax/wireless/messaging/TextMessage.setPayloadText> count 2
            59 aload_1
            60 aload_3
            61 invokeinterface #72 <javax/wireless/messaging/MessageConnection.send> count 2
            66 aload_0
            67 invokevirtual #75 <SMSXX.doSendOk>
            70 goto 78 (+8)
            73 astore_2
            74 aload_0
            75 invokevirtual #78 <SMSXX.doSendFalse>
            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改成其他東西。(具體過程略,大家自己想想吧)。

            posted on 2011-02-22 10:47 tqsheng 閱讀(309) 評論(0)  編輯 收藏 引用

            久久精品国产亚洲5555| 国内精品伊人久久久久| 亚洲AⅤ优女AV综合久久久| 久久综合亚洲鲁鲁五月天| 久久人人爽人人爽人人AV东京热 | 久久狠狠爱亚洲综合影院| 日韩精品久久久肉伦网站| 国产激情久久久久影院| 久久夜色精品国产亚洲| 久久精品国产只有精品2020| 久久精品成人欧美大片| .精品久久久麻豆国产精品| 狠狠色丁香婷婷久久综合五月| 99精品久久精品一区二区| 亚洲国产成人久久精品99 | 久久综合久久综合亚洲| 精品久久久久久亚洲| 18禁黄久久久AAA片| 久久精品国产精品亚洲下载| 九九久久自然熟的香蕉图片| 一级做a爰片久久毛片毛片| 国产精品久久久久一区二区三区| 亚洲AV无码久久精品蜜桃| 伊人热热久久原色播放www| 久久精品国产亚洲7777| 91超碰碰碰碰久久久久久综合 | 99久久国产综合精品五月天喷水| 亚洲精品蜜桃久久久久久| 亚洲精品无码久久毛片| 精品无码久久久久久久动漫| 久久精品国产99国产精偷| 国内精品久久久久影院一蜜桃| 亚洲精品美女久久久久99| 国产69精品久久久久观看软件| 色诱久久av| 国产69精品久久久久观看软件| 亚洲国产天堂久久综合| 亚洲а∨天堂久久精品9966| 伊人久久一区二区三区无码| 国产精品99久久久精品无码| 久久无码中文字幕东京热|