多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Hook框架xposed的簡單demo

Hook框架xposed的簡單demo

來源:程序員人生   發布時間:2016-09-30 11:01:55 閱讀次數:6161次

簡介:Xposed框架是1款可以在不修改APK的情況下影響程序運行的框架服務,通過替換/system/bin/app_process程序控制zygote進程,使得app_process在啟動進程中會加載XposedBridge.jar這個jar包,從而完成對Zygote進程及其創建的虛擬機的劫持。
Github地址:https://github.com/rovo89/Xposed

首先我們Hook無參數的函數


1.建立1個空工程,編寫獲得序列號的簡單例子

1.獲得手機狀態需要設置權限

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

2.編寫布局文件

<TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <TextView android:id="@+id/tv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" />

3. 編寫主 Activity 類中的 onCreate 函數

package com.cockroach.hook_object; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.telephony.TelephonyManager; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv1 = (TextView) findViewById(R.id.tv1); TextView tv2 = (TextView) findViewById(R.id.tv2); TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); tv1.setText("imei:" + tm.getDeviceId()); tv2.setText("imsi:" + tm.getSubscriberId()); } }

4. 完成安裝,運行效果以下:

這里寫圖片描述

這就是我們的等會要hook的apk程序,下面編寫xposed插件

2.建立1個無 activity 的工程, 編寫 Xposed 插件

1. 設置清單文件

在 application 標簽中增加模塊說明信息

<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <!-- 使 xposed 模塊有效 --> <meta-data android:name="xposedmodule" android:value="true"></meta-data> <!-- xposed 模塊名稱,我們可以隨意起1個和模塊功能類似的便可 --> <meta-data android:name="xposeddescription" android:value="qq迅雷提速神器"></meta-data> <!-- xposed 模塊最低版本 --> <meta-data android:name="xposedminversion" android:value="54"></meta-data> </application>

2. 導入 xposed 庫文件

將 xposed 庫文件 XposedBridgeApi-XX.jar, 放入 app/lib 文件夾下
這里寫圖片描述

這里寫圖片描述

需要注意的是: 修改 Scope 為 Provided

這里寫圖片描述

這里寫圖片描述

3. 創建1個類, Main, 實現 xposed 中的接口 IXposedHookLoadPackage 并重寫方法handleLoadPackage

package com.cockroach.xposedhookdemo; import android.telephony.TelephonyManager; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodReplacement; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; /** * Created by 18459 on 2016/6/27. */ public class Main implements IXposedHookLoadPackage{ @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { if(!loadPackageParam.packageName.equals("com.cockroach.hook_object")) return; XposedBridge.log("Loaded app: " + loadPackageParam.packageName); // 找到對應的方法,進行替換 // 參數 1:類名 // 參數 2: 方法名 // 參數 3:實現監聽,重寫方法 // replaceHookedMethod 替換方法 // beforeHookedMethod 方法前履行 // afterHookedMethod 方法后履行 XposedHelpers.findAndHookMethod(TelephonyManager.class, "getSubscriberId", new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable { return "Hook 成功了 哈哈!!!"; } }); } }

4. 聲明主入口類路徑

需要在 main 文件夾下建立 assets 文件夾中新建1個 xposed_init 的文件,并在其中聲明主入口類
這里寫圖片描述

到這里這個hook無參函數的簡單demo插件就完成了,

然后我們hook有參數的函數


1.建立1個空工程,編寫1個登陸界面,用自定義的1個方法

布局文件中添加

<EditText android:id="@+id/et1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入你的賬號"/> <EditText android:id="@+id/et2" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入你的密碼"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="my_onClick" android:text="登陸" android:textSize="26dp"/>

MainActivity中添加

public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void my_onClick(View view) { EditText editText = (EditText) findViewById(R.id.et1); EditText editText1 = (EditText) findViewById(R.id.et2); String string = editText.getText().toString(); String string1 = editText1.getText().toString(); if(CheckRegister(string,string1)){ Toast.makeText(MainActivity.this,"登陸成功",Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this,"登陸失敗",Toast.LENGTH_SHORT).show(); } } private boolean CheckRegister(String string, String string1) { return string.equals(string1); } }

效果,兩個輸入框輸入相同時 提示登陸成功,不同時 提示登陸失敗

到這里測試app完成

2.接下來我們HOOK CheckRegister方法,到達不管輸入甚么,都提示登陸成功

這里配置和前面無參插件編寫1樣,只需修改MainActivity

package com.cockroach.xposedhookdemo; import android.util.Log; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; /** * Created by 18459 on 2016/6/27. */ public class Main implements IXposedHookLoadPackage{ //被HOOK的程序的包名和類名 String packName = "com.cockroach.myapplication"; String className = "com.cockroach.myapplication.MainActivity"; public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { if(!loadPackageParam.packageName.equals(packName)) return; XposedBridge.log("Loaded app: " + loadPackageParam.packageName); // replaceHookedMethod 替換方法 // beforeHookedMethod 方法前履行 // afterHookedMethod 方法后履行 // 處理是的情況 // 找到對應類的方法,進行hook,hook的方式有兩種 XposedHelpers.findAndHookMethod(className, // 類名 loadPackageParam.classLoader, // 類加載器 "CheckRegister", // 方法名 String.class, // 參數1 String.class, // 參數2 new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); Log.d("xposedplugin", (String) param.args[0]); Log.d("xposedplugin", (String) param.args[1]); //將兩個參數改成相等 param.args[0] = "123"; param.args[1] = "123"; //這樣設置函數的返回值 param.setResult(true); } @Override //這個hook方法以后有啥用還不知道 protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); Log.d("xposedplugin", (String) param.args[0]); Log.d("xposedplugin", (String) param.args[1]); } }); } }

到這里hook有參函數的插件完成了


測試app有了, 插件app有了,我們如何去使用?

上面我們寫了共寫了兩個測試app和兩個插件app,我們用第1對app,來做測試

1.在root后的手機上安裝xposed框架app,然落后入app,選擇 框架->安裝更新,此時會重啟,

2.將測試apk和插件apk都安裝得手機上, 當插件apk安裝得手機上時,框架xposed app會檢測到插件,

3.進入框架app,選擇 模塊,選中我們寫的插件,然后重啟手機

開機后我們運行測試app,看到已hook成功了

hook以后運行測試app
這里寫圖片描述


如果你是新手,沒看明白可以問我,或許可以幫到你。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 免费18岁禁看 | 国产成人91一区二区三区 | 久久国产精品一国产精品 | 男女激情视频网站 | 亚洲经典激情春色另类 | 日本一级高清不卡视频在线 | 高清免费国产在线观看 | 在线播放性xxx欧美 在线播放亚洲美女视频网站 | 日韩精品网站 | 亚洲免费毛片 | 免费区一级欧美毛片 | 成人在线不卡视频 | 多人做人爱视频在线观看 | 日本无卡码免费一区二区三区 | www.日本一区二区 | 欧美日韩加勒比一区二区三区 | 在线亚洲欧国产精品专区 | 99精品视频在线成人精彩视频 | 日本人视频-jlzz jlzz jlzz | 黄色a大片 | 久久精品国产一区二区 | 99久久精品免费看国产漫画 | 色猫咪av在线网址 | 成年ssswww日本 | 一级毛片高清免费播放 | 久久久久国产一级毛片高清版 | 波多野结衣免费线在线 | 欧美另类videosbestsex日本 | 日韩亚洲一区二区三区 | 美女免费视频是免费网站 | 欧美成人毛片一级在线 | 日本免费网站视频www区 | 亚洲精品亚洲人成在线 | 欧美图片小说视频 | 一区在线看 | 五月天综合视频 | 中文字幕精品一区二区三区视频 | 国产精品久久久久久久久免费观看 | 国产精品成人网 | 欧美一区综合 | 国产一级做a爱免费视频 |