? ? 看完了前面三篇文章后,這里我們來一個小插曲~~~~
????
? ? 第一個小插曲。是前面文章一個CM精靈的分析。我們這里使用hook代碼來搞定。
第二個小插曲,是如今一些游戲,都有了支付上限,比如每天僅僅能花20塊錢來購買。
好了。以下我們分開敘述~~~~
0x1:第一個小插曲
CM精靈分析的時候,打開軟件能得到的最初始的信息,是軟件的使用時間有限制,為30分鐘,我們能夠找到其上下文來繼續查看一下。
軟件分析方面,懶得再次打字敘述了,看以下的連接就可以:
http://www.52pojie.cn/thread-285325-1-1.html
?
我們通過分析以后,能夠得到:
通過查看a()Z方法。發現是一個返回值為boolean類型的方法,所以。也能看到確定的類和方法,那么我們就開始寫hook代碼,hook代碼簡單來說,使用框架的話是非常easy的:
1.確定hook類
2.確定hook類中的關鍵call方法
3.hook方法來怎么做
那好。有這三條流程以后,我們繼續下去。
這里是確定須要hook方法所在的類:
MS.hookClassLoad("net.aisence.Touchelper.TouchelperLicense", new MS.ClassLoadHook()
這里是確定須要hook的方法名和方法的傳入參數
hookvalid=arg0.getMethod("a", null);
然后就是hook那個方法,我們這里僅僅須要它的返回值為true就可以:
final MS.MethodPointer old = new MS.MethodPointer();MS.hookMethod(arg0, hookvalid, new MS.MethodHook() {@Overridepublic Object invoked(Object arg0, Object... arg1)throws Throwable {// TODO Auto-generated method stubSystem.out.println("是否注冊 hook --->");boolean aa=(Boolean) old.invoke(arg0,arg1);aa=true;System.out.println("是否注冊了呢?-->"+aa);return aa; }}, old);
好了,我們執行安裝插件,然后重新啟動手機打開軟件:
在點擊播放一個腳本的時候,會有例如以下信息:
剛好是我們hook中的信息打印,說明一切正常。
測試方面,我僅僅是簡單測了幾個插件而已。沒有連續搞1個多小時那么長時間。假設測試出現其它問題,那么繼續依據問題尋找原因就可以。
?
0x2:第二個小插曲
游戲中想花錢也不行,人家限定了每天僅僅能花多少,所以,我們能夠猜測。游戲獲取手機的信息,然后推斷你是不是支付了太多,那么一般常見的信息就是imei和imsi了。
這兩個單詞的概念。不懂的同學搜索一下,一個是手機imei,一個是sim卡的imsi,相當于人的身份證。
好了。那么我們先從imei入手:
先寫下我們開發中正常獲取imei的代碼:
TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(this.TELEPHONY_SERVICE);String imei=mTelephonyMgr.getDeviceId();System.out.println("如今的Imei為-->"+imei);
好了,正常軟件開發來獲取手機的imei是這樣寫的,使用系統的API就可以。
然后我們須要分析下TelephonyManager?所在的類,由上面的引用import為:
import android.telephony.TelephonyManager;
所以,我們能夠知道完整的類路徑。同一時候又知道方法,那么我們就開始編寫hook代碼了:
依照前文的三部曲:
1.?MS.hookClassLoad("android.telephony.TelephonyManager",?new?MS.ClassLoadHook()?
?
?
2.?hookimei=arg0.getMethod("getDeviceId",?null);
?
?
3.?System.out.println("hook?imei----------->");
?
????????String?imei=(String)?old1.invoke(arg0,?arg1);?
?
? imei="999996015409081";
?????????????????????????????
return?imei;??
?
好了,然后我們安裝,開始測試吧,剛好在前面我們寫的正常獲取的project里面測試,通過各種信息打印。我們能夠知道結果的。
上面的打印是我們hook代碼中的信息。最后一行的代碼是我們測試獲取imeiproject中的打印。說明一切正常,我們達到了所需目的!
IMEI的獲取沒問題了,那么我們就開始操作IMSI吧,依照上面的思路走起~
1.MS.hookClassLoad("android.telephony.TelephonyManager",?new?MS.ClassLoadHook()
?
2.hookimsi=arg0.getMethod("getSubscriberId",?null);
?
3.?System.out.println("hook?imsi----------->");
String?imsi=(String)?old1.invoke(arg0,?arg1);
imsi="460001200505666";
return?imsi;??
?
測試截圖:
帶入正常游戲的測試,臨時手上沒有合適的包來測試,這里不再敘述。有需求的朋友能夠自行測試就可以。
這個插件,事實上也能夠做成一個界面形式的,將Imei和Imsi能夠做成自己想要改動的數值,有興趣的。自己寫下。
相關附件資料:
http://pan.baidu.com/s/1gd9rV2r
前面三課沒有學習的,自行翻閱。一步一步來。依照文中全部的敘述操作就可以。然后自己再思考擴展一下,這樣才是我們這幾課程的目的。