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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

014 Android之Cydia与Xposed框架入门

發布時間:2025/3/21 Android 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 014 Android之Cydia与Xposed框架入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • Android Hook框架介紹
    • Cydia Substrate
      • 插件編寫步驟
      • 實例:編寫Cydia修改系統字體顏色
    • Xposed
      • 插件編寫步驟
      • 實例:Hook獲取手機序列號
      • 準備工作
      • 獲取hook所需要的數據
      • 編寫hook代碼
      • 效果測試

Android Hook框架介紹

Android中比較經典的Hook框架有兩個

  • Cydia Substrate,閉源,從蘋果開始到Android
  • xposed,開源,從Android開始到蘋果
  • Cydia Substrate

    插件編寫步驟

    Cydia Substrate插件編寫的一般步驟:

  • 導入substrate-api.jar
  • 設置權限和入口
  • 新建一個類實現回調函數
  • 使用MS.hookClassLoad用于HOOK加載類
  • 使用MS.hookMethod用于HOOK方法
  • 實例:編寫Cydia修改系統字體顏色

    首先新建一個空的項目

    將substrate-api.jar復制到libs目錄下,jar下載地址如下:

    http://asdk.cydiasubstrate.com/zips/cydia_substrate-r2.zip

    接著右鍵打開模塊設置

    將jar包導入到模塊依賴庫

    接著在清單文件中添加一個自定義的權限

    <uses-permission android:name="cydia.permission.SUBSTRATE"></uses-permission>

    添加一個meta-data標簽,并指定入口類

    <meta-data name="com.saurik.substrate.main" android:value=".Main"></meta-data>

    然后新建一個入口類,命名為Main

    package com.example.cydiademo;import android.content.res.Resources; import android.util.Log;import com.saurik.substrate.MS;import java.lang.reflect.Method;public class Main {static void initialize() {//1.hook指定的類-->android.content.res.ResourcesMS.hookClassLoad("android.content.res.Resources", new MS.ClassLoadHook() {@Overridepublic void classLoaded(Class<?> aClass) {//2.1 獲取老的方法對象Method method=null;try {method=aClass.getMethod("getColor",int.class);} catch (NoSuchMethodException e) {e.printStackTrace();}if (method==null){Log.d("GuiShou","method==null");return;}//2.hook指定的方法-->getColor//老的方法的指針final MS.MethodPointer methodPointer=new MS.MethodPointer();MS.hookMethod(aClass, method, new MS.MethodHook() {@Overridepublic Object invoked(Object o, Object... objects) throws Throwable {//hook代碼//調用老的方法,獲取colorint color= (int) methodPointer.invoke(o,objects);//修改color并返回return color&~0x0000ff00|0x00ff0000;}},methodPointer);}});} }

    接著實現initialize方法,修改系統字體顏色。到此插件編寫完成,這個hook框架需要運行在真機環境下,所以暫時看不到效果。

    Xposed

    插件編寫步驟

    Xposed是一個開源的Hook框架,可定制性強;其提供了SDK可以寫插件,輕松完成hook。基本步驟如下:

  • 創建一個無Activity的工程
  • 設置清單文件信息
  • 導入Xposed jar包,并設置為privoder(complie only)
  • 創建一個主類并實現Xposed中的接口
  • 重新handleLoadPackage方法
  • 建立xposed_init文件外部聲明主類
  • 在handleLoadPackage中完善Hook代碼
  • 實例:Hook獲取手機序列號

    需要HOOK的目標程序如下:

    app運行之后,會顯示當前的設備ID

    準備工作

    新建一個工程,將XposedBridge-82.jar復制到新建的lib目錄下

    打開模塊設置,將jar包導入到模塊,并設置Configuration為compileOnly

    <meta-data android:name="xposedmodule" android:value="true"></meta-data> <meta-data android:name="xposeddescription" android:value="XX神器"></meta-data> <meta-data android:name="xposedminversion" android:value="54"></meta-data>

    在清單文件中添加上面的字段

    接著新建一個類,命名為Main

    public class Main implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {} }

    并實現IXposedHookLoadPackage接口,然后在handleLoadPackage函數內編寫Hook代碼

    接著指定入口類,新建assets/xposed_init文件,然后將入口類寫到該文件內。準備工作就已經完成,接著開始編寫hook代碼。

    獲取hook所需要的數據

    需要對app進行hook需要知道下面幾個數據

  • 包名
  • 類名
  • 方法原型
  • 首先來查看一下需要HOOK的目標app代碼

    顯示設備ID的代碼在onCreate方法中

    public void onCreate(Bundle savedInstanceState) {IncrementalChange incrementalChange = $change;if (incrementalChange != null) {incrementalChange.access$dispatch("onCreate.(Landroid/os/Bundle;)V", this, savedInstanceState);return;}super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);((TextView) findViewById(R.id.textinfo)).setText("設備ID: " + ((TelephonyManager) getSystemService("phone")).getDeviceId());}

    需要Hook的類名是TelephonyManager,方法名是getDeviceId

    接著Android Studio的自動導入功能可以看到完整的類名是

    android.telephony.TelephonyManager

    然后進入類內搜索方法名,即可獲取到完整的方法原型

    public String getDeviceId()

    然后查看清單文件

    在清單文件中可以查看到包名為com.bluelesson.testphoneinfo

    編寫hook代碼

    接著編寫hook代碼如下:

    public class Main implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam Param) throws Throwable {//包名 com.bluelesson.testphoneinfo//類名 android.telephony.TelephonyManager//方法名 public String getDeviceId()String packageName=Param.packageName;if (!packageName.equals("com.bluelesson.testphoneinfo"))return;XposedHelpers.findAndHookMethod(TelephonyManager.class,//類類型"getDeviceId",//方法名new XC_MethodReplacement() { //回調@Overrideprotected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {return "我就是序列號";}});} }

    替換getDeviceId函數,直接返回序列號

    效果測試

    在模擬器中安卓xposed框架

    第一次進入需要安裝更新以激活框架

    然后直接安卓app到模擬器,提示Xposed模塊未激活

    勾選當前模塊

    返回到Xposed插件主頁,點擊軟重啟

    打開目標app,可以看到當前的設備ID已經被修改了

    總結

    以上是生活随笔為你收集整理的014 Android之Cydia与Xposed框架入门的全部內容,希望文章能夠幫你解決所遇到的問題。

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