日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用Cydia Substrate Hook移动MM支付

發布時間:2023/12/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用Cydia Substrate Hook移动MM支付 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

全程都是搬來的磚 感謝網上技術的無私分享:
鬼哥 Hook的兩個小插曲:http://blog.csdn.net/guiguzi1110/article/details/39023349
還有:
利用Cydia Substrate進行Android HOOK:http://www.cnblogs.com/goodhacker/p/4014617.html

關于Cydia Substrate

Cydia Substrate是一個代碼修改平臺。它可以修改任何主進程的代碼,不管是用Java還是C/C++(native代碼)編寫的。而Xposed只支持HOOK app_process中的java函數,因此Cydia Substrate是一款強大而實用的HOOK工具。

官網地址:http://www.cydiasubstrate.com/
Demo地址:https://github.com/zencodex/cydia-android-hook
官方教程:http://www.cydiasubstrate.com/id/20cf4700-6379-4a14-9bc2-853fde8cc9d1
SDK下載地址:http://asdk.cydiasubstrate.com/zips/cydia_substrate-r2.zip

Substrate幾個重要API介紹
MS.hookClassLoad

函數原型:void hookClassLoad(String name, MS.ClassLoadHook hook);
該方法實現在指定的類被加載的時候發出通知。因為一個類可以在任何時候被加載,所以Substrate提供了一個方法用來檢測用戶感興趣的類何時被加載。

?

參數

??
??

描述

??

name

包名+類名,使用java的.符號

hook

MS.ClassLoadHook的一個實例,當這個類被加載的時候,它的?classLoaded 方法會被執行。

該API允許開發者提供一個回調函數替換原來的方法,這個回調函數是一個實現了MS.MethodHook接口的對象,是一個典型的匿名內部類。它包含一個invoked函數。
(一)函數原型:
void hookMethod(Class _class, Member member, MS.MethodHook hook, MS.MethodPointer old);參數描述:

參數

描述

_class

加載的目標類,為classLoaded傳下來的類參數

member

通過反射得到的需要hook的方法(或構造函數). 注意:不能HOOK字段?(在編譯的時候會進行檢測).

hook

MS.MethodHook的一個實例,其包含的invoked方法會被調用,用以代替member中的代碼

(二)函數原型:

void hookMethod(Class _class, Member member, MS.MethodAlteration alteration);參數描述:

??

參數

??
??

描述

??

_class

加載的目標類,為classLoaded傳下來的類參數

member

通過反射得到的需要hook的方法(或構造函數). 注意:不能HOOK字段?(在編譯的時候會進行檢測).

alteration

An instance of?MS.MethodAlteration?whose boxedinvoked?method will be called instead of?member. This instance will also be filled in using information from ? the original implementation, allowing you to use?invoke?to call the original method implementation.

關于移動MM短代關鍵點

在類Lmm/sms/purchasesdk/PurchaseCode中,以下兩種方法是確定支付結果回調碼的關鍵:

.method public static getStatusCode()I.locals 1//獲取支付狀態碼sget v0, Lmm/sms/purchasesdk/PurchaseCode;->statusCode:Ireturn v0 .end method.method public static setStatusCode(I)V.locals 0//保存支付狀態碼sput p0, Lmm/sms/purchasesdk/PurchaseCode;->statusCode:Ireturn-void .end methodJava的代碼為:
public static int getStatusCode(){return statusCode;}public static void setStatusCode(int paramInt){statusCode = paramInt;}從Java代碼可以看出,getStatusCode()直接返回狀態值,沒有類型,比較簡單,我們就hook這種方法。

開始Hook

libs文件夾下引入substrate-api.jar包。

AndroidManifest.xml文件的配置:

<?xml version="1.0" encoding="utf-8"?> <manifest android:versionCode="1" android:versionName="1.0" package="com.example.cydiaexample"xmlns:android="http://schemas.android.com/apk/res/android"><application android:label="@string/app_name"><meta-data android:name="com.saurik.substrate.main" android:value=".Main" /></application><span><span class="comments"><!--添加Cydia Substrate權限--></span><span></span></span><uses-permission android:name="cydia.permission.SUBSTRATE" /> </manifest>Main.java的關鍵代碼:

package com.example.cydiaexample;import java.lang.reflect.Method; import com.saurik.substrate.MS;public class Main {//初始化操作static void initialize() { ?//設置需要hook的類,以便檢測其是否啟動MS.hookClassLoad("mm.sms.purchasesdk.PurchaseCode", new MS.ClassLoadHook() {@Overridepublic void classLoaded(Class<?> arg0) {// TODO Auto-generated method stub//定義方法Method hookpay = null ;try {hookpay=arg0.getMethod("getStatusCode", null);} catch (SecurityException e) {?? ??? ??? ?// TODO Auto-generated catch blockhookpay=null;System.out.println("沒有找到需要hook的方法");?? ?} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} //如果找到就進行hookif(hookpay!=null){? ?final MS.MethodPointer old1 = new MS.MethodPointer();MS.hookMethod(arg0, hookpay, new MS.MethodHook() {@Overridepublic Object invoked(Object arg0, Object... arg1)throws Throwable {// TODO Auto-generated method stub//設置返回碼為成功的返回碼:1001int code00=(Integer) old1.invoke(arg0, arg1);code00=1001; //hook方法返回return code00;? ?}}, old1);}}});} }如果要使支付模式支持非移動的運營商,我們也可以hook手機系統的IMSI:

//hook手機通訊相關的類:android.telephony.TelephonyManager MS.hookClassLoad("android.telephony.TelephonyManager", new MS.ClassLoadHook() {@Overridepublic void classLoaded(Class<?> arg0) {// TODO Auto-generated method stubMethod hookimsi = null ;try { //獲取IMSI的方法:getSubscriberIdhookimsi=arg0.getMethod("getSubscriberId", null);} catch (SecurityException e) {// TODO Auto-generated catch blockhookimsi=null; e.printStackTrace();} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} if(hookimsi!=null){ final MS.MethodPointer old1 = new MS.MethodPointer();MS.hookMethod(arg0, hookimsi, new MS.MethodHook() {@Overridepublic Object invoked(Object arg0, Object... arg1)throws Throwable {// TODO Auto-generated method stubString imsi=(String) old1.invoke(arg0, arg1); imsi="460001234567890";return imsi; }}, old1); } } }); 以上代碼都完美通過測試,小米2S..

相關下載

鏈接: http://pan.baidu.com/s/1bneYV99 密碼: ntkv


總結

以上是生活随笔為你收集整理的利用Cydia Substrate Hook移动MM支付的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。