當前位置:首頁 » 安卓系統 » hookandroid

hookandroid

發布時間: 2022-08-12 23:52:04

㈠ android 怎麼hook主入口

常用hook工具:
Xposed框架;
CydiaSubstrate框架;
ADBI/DDI框架。
這些工具使用流程:配置環境、安裝本地服務、下載使用庫。
Xposed框架:
handleLoadPackage獲取包載入時的回調並拿到其對應的classLoader
findAndLoadHookMethod對指定類的方法進行hook
Cydiasubstrate框架的hook方法:
MS.hookClassLoad 拿到指定class載入時的通知
MS.hookMethod 使用一個java方法去替換另一個Java方法
MS.moveUnderClassLoader 使用不同的ClassLoader重載對象

㈡ 如何hook android framework

1.向目標進程注入代碼(注入so,並調用該so里的一個函數)。首先調用ptrace函數,調試com.android.browser進程,在這里我們需要遍歷該進程載入的libc.so,這里有我們需要的dlopen,dlsym等函數的地址,我們先中斷com.android.phone,修改其寄存器...

㈢ android里怎樣hook socket過程

/***第一種:客戶端Socket通過構造方法連接伺服器***/ //客戶端Socket可以通過指定IP地址或域名兩種方式來連接伺服器端,實際最終都是通過IP地址來連接伺服器 //新建一個Socket,指定其IP地址及埠號 Socket socket = newSocket("192.168.0.7",。可以看看安卓巴士的教程:http://www.apkbus.com/thread-463776-1-1.html

㈣ android sensor信息能不能hook

首先我們可以用Xposed框架來hook計數感測器的隊列函數dispatchSensorEvent(),這個函數在android.hardware.SystemSensorManager$SensorEventQueue這個類中。隨後在微信運動每次詢問行走步數的時候,我們先獲取當前步數,然後在目前的步數的基礎上加1000步,然後將信息返回給微信運動。微信運動就會誤以為我們運動了1000步,從而達到了欺騙的效果。
關鍵代碼如下:
首先hook android.hardware.SystemSensorManager$SensorEventQueue這個類的dispatchSensorEvent()函數:
final Class<?> sensorEL = findClass("android.hardware.SystemSensorManager$SensorEventQueue",lpparam.classLoader);
XposedBridge.hookAllMethods(sensorEL, "dispatchSensorEvent", new XC_MethodHook()

接著我們在記步感測器把步數信息返回給微信運動之前,將返回的步數加上1000步:
protected void beforeHookedMethod(MethodHookParam param) throws
Throwable {
XposedBridge.log(" mzheng Hooked method: " + param.method);
((float[]) param.args[1])[0]=((float[]) param.args[1])[0]+1000*WechatStepCount;
WechatStepCount+=1;


另外我們還可以使用一些感測器的介面獲取一些數據的信息:
Sensor ss = ((SparseArray<Sensor>) field.get(0)).get(handle);
XposedBridge.log(" SensorEvent: sensor=" + ss);

比如說x就代表開機以來行走的步數,timestamp是獲取步數時候的時間戳等。
另外,我們不僅在android上可以hook計步器,在iOS上也是可以通過越獄後hook iHealth的API介面達到同樣的作弊效果,有興趣的同學可以繼續研究。

㈤ 如何用hook抓取android手機的URL

你這個用正則工具可以提取,具體參考下面截圖,如果你想要採集鏈接的地址,其實根本不用這么復雜的來看網頁源代碼,就用我截圖中用到的八爪魚採集器,可視化的,要提取鏈接的話,直接點擊網頁上的鏈接,會彈出一個選項問你是否要採集鏈接

㈥ 如何hook android sdk

1.1 概述
Xposed 是 GitHUB 上 rovo89 大大設計的一個針對 Android 平台的動態劫持項目,通過替換 /system/bin/app_process 程序控制 zygote 進程,使得 app_process 在啟動過程中會載入 XposedBridge.jar 這個 jar 包,從而完成對系統應用的劫持。
Xposed 框架的基本運行環境如下:

因為 Xposed 工作原理是在 /system/bin 目錄下替換文件,在 install 的時候需要root 許可權,但是運行時不需要 root 許可權。

需要在 Android 4.0 以上版本的機器中

2. GitHub 上的 Xposed 資源梳理一下,可以這么分類:
XposedBridge.jar : XposedBridge.jar 是 Xposed 提供的 jar 文件,負責在 Native層與 FrameWork 層進行交互。 /system/bin/app_process 進程啟動過程中會載入該jar 包,其它的 Moles 的開發與運行都是基於該 jar 包的。
Xposed : Xposed 的 C++ 部分,主要是用來替換 /system/bin/app_process ,並為 XposedBridge 提供 JNI 方法。
XposedInstaller : Xposed 的安裝包,負責配置 Xposed 工作的環境並且提供對基於 Xposed 框架的 Moles 的管理。
XposedMods :使用 Xposed 開發的一些 Moles ,其中 AppSettings 是一個可以進行許可權動態管理的應用
1.2 Mechanism :原理
1.2.1 Zygote
在 Android 系統中,應用程序進程都是由 Zygote 進程孵化出來的,而 Zygote 進程是由 Init 進程啟動的。 Zygote 進程在啟動時會創建一個 Dalvik 虛擬機實例,每當它孵化一個新的應用程序進程時,都會將這個 Dalvik 虛擬機實例復制到新的應用程序進程裡面去,從而使得每一個應用程序進程都有一個獨立的 Dalvik 虛擬機實例。
Zygote 進程在啟動的過程中,除了會創建一個 Dalvik 虛擬機實例之外,還會將 Java運行時庫載入到進程中來,以及注冊一些 Android 核心類的 JNI 方法來前面創建的 Dalvik 虛擬機實例中去。注意,一個應用程序進程被 Zygote 進程孵化出來的時候,不僅會獲得 Zygote 進程中的 Dalvik 虛擬機實例拷貝,還會與 Zygote 一起共享 Java 運行時庫。這也就是可以將XposedBridge 這個 jar 包載入到每一個 Android 應用程序中的原因。 XposedBridge 有一個私有的 Native ( JNI )方法 hookMethodNative,這個方法也在 app_process 中使用。這個函數提供一個方法對象利用 Java 的 Reflection 機制來對內置方法覆寫。具體的實現可以看下文的 Xposed 源代碼分析。
1.2.2 Hook/Replace
Xposed 框架中真正起作用的是對方法的 hook 。在 Repackage 技術中,如果要對APK 做修改,則需要修改 Smali 代碼中的指令。而另一種動態修改指令的技術需要在程序運行時基於匹配搜索來替換 smali 代碼,但因為方法聲明的多樣性與復雜性,這種方法也比較復雜。
在 Android 系統啟動的時候, zygote 進程載入 XposedBridge 將所有需要替換的 Method 通過 JNI 方法 hookMethodNative 指向 Native 方法 xposedCallHandler , xposedCallHandler 在轉入 handleHookedMethod 這個 Java 方法執行用戶規定的 Hook Func 。
XposedBridge 這個 jar 包含有一個私有的本地方法: hookMethodNative ,該方法在附加的 app_process 程序中也得到了實現。它將一個方法對象作為輸入參數(你可以使用 Java 的反射機制來獲取這個方法)並且改變 Dalvik 虛擬機中對於該方法的定義。它將該方法的類型改變為 native 並且將這個方法的實現鏈接到它的本地的通用類的方法。換言之,當調用那個被 hook 的方法時候,通用的類方法會被調用而不會對調用者有任何的影響。在 hookMethodNative 的實現中,會調用 XposedBridge中的handleHookedMethod這個方法來傳遞參數。 handleHookedMethod 這個方法類似於一個統一調度的 Dispatch 常式,其對應的底層的 C++ 函數是 xposedCallHandler 。而 handleHookedMethod 實現裡面會根據一個全局結構 hookedMethodCallbacks 來選擇相應的 hook函數,並調用他們的 before, after 函數。
當多模塊同時 Hook 一個方法的時候, Xposed 會自動根據 Mole 的優先順序來排序,調用順序如下:
A.before -> B.before -> original method -> B.after -> A.after
2 源代碼分析
2.1 Cpp 模塊
其文件分類如下:
app_main.cpp :類似 AOSP 中的 frameworks/base/cmds/app_process/app_main.cpp,即/system/bin/app_process 這個 zygote 真實身份的應用程序的源代碼。關於zygote 進程的分析可以參照 Android:AOSP&Core 中的 Zygote 進程詳解。
xposed.cpp :提供給 app_main.cpp 的調用函數以及 XposedBridge 的 JNI 方法的實現。主要完成初始化工作以及 Framework 層的 Method 的 Hook 操作。
xposed.h , xposed_offsets.h :頭文件
Xposed 框架中的 app_main.cpp 相對於 AOSP 的 app_main.cpp 中修改之處主要為區分了調用 runtime.start() 函數的邏輯。 Xposed 框架中的 app_main.cpp 在此處會根據情況選擇是載入 XposedBridge 類還是 ZygoteInit 或者 RuntimeInit 類。而實際的載入 XposedBridge 以及注冊 JNI 方法的操作發生在第四步: xposedOnVmCreated中。
1.包含 cutils/properties.h ,主要用於獲取、設置環境變數, xposed.cpp 中需要將XposedBridge 設置到 ClassPath 中。
2.包含了 dlfcn.h ,用於對動態鏈接庫的操作。
3.包含了 xposed.h ,需要調用 xposed.cpp 中的函數,譬如在虛擬機創建時注冊 JNI 函數。
4.增加了 initTypePointers 函數,對於 Android SDK 大於等於 18 的會獲取到 atrace_set_tracing_enabled 函數指針,在 Zygote 啟動時調用。
5.AppRuntime 類中的 onVmCreated 函數中增加 xposedOnVmCreated 函數調用。
6.源代碼中的 Log* 全部重命名為 ALog*, 所以 Logv 替換為 Alogv ,但是功能不變。
7.Main 函數開始處增加了大量的代碼,但是對於 SDK 版本小於 16 的可以不用考慮。

2.1.1 Main 函數: zygote 入口
int main(int argc, char* const argv[])

㈦ 如何Android hook https http

1.創建工程android4.0.3(api15,測試發現其他版本也可以),可以不用activity

2.修改AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.robv.android.xposed.mods.tutorial"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<meta-data
android:name="xposedmole"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="Easy example" />
<meta-data
android:name="xposedminversion"
android:value="54" />
</application>
</manifest>

3.在工程目錄下新建一個lib文件夾,將下載好的XposedBridgeApi-54.jar包放入其中.

eclipse 在工程里 選中XposedBridgeApi-54.jar 右鍵–Build Path–Add to Build Path.

IDEA 滑鼠右鍵點擊工程,選擇Open Mole Settings,在彈出的窗口中打開Dependencies選項卡.把XposedBridgeApi這個jar包後面的Scope屬性改成provided.

4.模塊實現介面

[java] view plain


package de.robv.android.xposed.mods.tutorial;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;

public class Tutorial implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
XposedBridge.log("Loaded app: " + lpparam.packageName);
}
}

5.入口assets/xposed_init配置,聲明需要載入到 XposedInstaller 的入口類:

[java] view plain


de.robv.android.xposed.mods.tutorial.Tutorial //完整類名:包名+類名

6.定位要hook的api
編譯目標程序,查看Smali代碼
直接在AOSP(android源碼)中查看

7.XposedBridge to hook it
指定要 hook 的包名
判斷當前載入的包是否是指定的包
指定要 hook 的方法名
實現beforeHookedMethod方法和afterHookedMethod方法

㈧ 請教android中有類似hook功能的函數嗎偵聽某個函數的調用

java層應該沒有,如果kernel linux有的話,那麼android的底層應該有。不過android有許可權安全機制。這個沒了解

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:639
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:368
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:84
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:310
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:793
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:344
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:213
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:812
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:366
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:592