<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Android逆向(前7章打包下載)|Xposed Hook(上)

    一顆小胡椒2022-03-18 07:41:49

    聲明:所有實驗含部分虛構,純屬技術練習,未對真實環境造成任何影響。也請勿將相關技術用于非法操作,否則責任自負。

    0x01 Hook修改變量

     在編寫hook類的時候會去實現一個IXposedHookLoadPackage接口(加載應用程序,即“ Android軟件包”時獲得通知), 重寫了handleLoadPackage方法(加載應用程序時將調用此方法),該方法有一個參數lpparam(有關該應用程序的信息), 這個方法向被實現的模塊提供更多關于運行環境上下文的信息。首先我們實驗的app是一款編寫好的XposedDemo,將其安裝到模擬器上,打開運行后沒有任何效果,如圖所示:

    使用jadx-gui反編譯工具查看其代碼,注意在一個Activity在啟動的時候,都會在onCreat()方法中執行setContentView(R.layout.activity_main)這行代碼,來將指定的資源xml文件加載到對應的activity中。

    然后定位到res/layout/activity_main.xml,可以發現當我們點擊button的時候會觸發myTest方法,回到MainActivity,跟進myTest()的Demo類。

    經過分析test()方法可以發現,當我們點擊按鈕時會在日志中輸出很多對應的日志信息,其中包括靜態變量staticInt = 100,注意靜態全局變量hook的時候調用的是使用的XposedHelpers.setStaticIntField(),若是全局普通變量用XposedHelpers.setIntField()。

    我們再次運行app點擊按鈕,不過此次打開我們的ddms查看日志輸出。

    然后編寫hook代碼如下:

    package com.xposed;

    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.LoadPackageParam;

    import android.util.Log;

    public class Hook implements IXposedHookLoadPackage {

    public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {

    Log.d("feichen", "hook..."); //日志輸出方式一

    XposedBridge.log("Loaded app: " + lpparam.packageName); //日志輸出方式二

    if (lpparam.packageName.equals("com.feichen.xposeddemo")){

    final Class clazz = XposedHelpers.findClass("com.feichen.xposeddemo.Demo",lpparam.classLoader);

    XposedHelpers.setStaticIntField(clazz,"staticInt",520);

    }

    }

    }

    將寫好的xposed編譯安裝到xposed后,勾選上寫好的xposed模塊,并重啟手機,然后運行app,打開ddms,點擊button按鈕,查看ddms中的staticInt初始化值已經被我們hook修改為520,如圖:

    然后hook字符串變量的話使用XposedHelpers.setStaticObjectField(clazz,"Tag","Lvmeng");這一條語句,具體的效果這里不再演示,有興趣的小伙伴下去可以自己嘗試。

    0x02 Hook普通方法

    Hook普通方法使用的是XposedHelpers下的findAndHookMethod(類的字節碼,方法名,回調函數)方法(用于Hook當前類下的所有方法),它有一個重載函數接收四個參數,

    findAndHookMethod(類名全路徑,類加載器,方法名,回調函數),其中回調函數除了使用

    XC_MethodHook()之外,還有XC_MethodReplacement()。對于有參數的函數需要帶上參數的字節碼。在0x03的地方就是四個參數的findAndHookMethod。

    因此,Hook普通方法的代碼如下:

    XposedHelpers.findAndHookMethod(clazz, "test", new XC_MethodHook(){

    public void beforeHookedMethod(MethodHookParam param){

    Log.d("Lvmeng","Lvmeng===============before");

    }

    public void afterHookedMethod(MethodHookParam param){

    Log.d("Lvmeng","Lvmeng=============after");

    }

    });

    其中beforeHookedMethod 會在調用原方法前執行,如果使用setResult則跳過原方法,并返回setResult參數中的值。

    afterHookedMethod 會在調用原方法后執行,setResult可改變返回值。

    replaceHookedMethod 會完全替換原方法,即原方法不執行,且返回值可以直接return,setResult不生效。

    然后將寫好的xposed編譯安裝到xposed后,勾選上寫好的xposed模塊,并重啟手機,然后運行app,打開ddms,點擊button按鈕,查看ddms中日志情況如下,可以發現test()函數已經被成功hook,并且添加上兩條日志信息

    0x03 Hook獲取參數與返回值

    Hook獲取參數是方法中要傳入的參數,我們也是可以在beforeHookedMethod和afterHookedMethod方法中獲取我們的參數值,其hook代碼如下:

    XposedHelpers.findAndHookMethod(clazz, "publicFunc",String.class, new XC_MethodHook(){

    public void beforeHookedMethod(MethodHookParam param){

    Log.d("Lvmeng","Lvmeng===============before");

    Log.d("before-獲取參數", ""+param.args[0]);

    }

    public void afterHookedMethod(MethodHookParam param){

    Log.d("Lvmeng","Lvmeng=============after");

    Log.d("after-獲取參數", ""+param.args[0]);

    }

    });

    其中,我們hook的方法是publicFunc,查看代碼可以發現該方法是接收參數的,如圖所示:

    然后安裝運行后的日志信息如下:

    Hook獲取返回值一般都是在afterHookedMethod方法中,Hook的代碼如下:

    public void afterHookedMethod(MethodHookParam param){

    Log.d("Lvmeng", ""+param.getResult());

    }

    在這里不再進行演示獲取返回值,有興趣的小伙伴可以下去自行測試。

    0x04 Hook構造函數

    Hook構造函數可分為有參構造函數前、無參構造函數前、有參構造函數后和無參構造函數后。這里Hook構造函數使用的是XposedHelpers下的findAndHookConstructor,詳細代碼如下:

    XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {

    public void beforeHookedMethod(MethodHookParam param) throws Throwable {

    Log.d("===================", "這是無參構造函數前");

    }

    public void afterHookedMethod(MethodHookParam param) throws Throwable {

    Log.d("===================", "這是無參構造函數后");

    XposedHelpers.setIntField(param.thisObject, "publicInt", 20000000);

    }

    });

    XposedHelpers.findAndHookConstructor(clazz, String.class, new XC_MethodHook() {

    public void beforeHookedMethod(MethodHookParam param) throws Throwable {

    Log.d("===================", "這是有參構造函數前");

    param.args[0] = "= - =";

    }

    public void afterHookedMethod(MethodHookParam param) throws Throwable {

    Log.d("===================", "這是有參構造函數后");

    }

    });

    然后安裝運行后的Hook日志如下:

    xposed構造函數
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    也請勿將相關技術用于非法操作,否則責任自負。
    Activity漏洞挖掘詳解
    2021-10-18 16:22:12
    2Activity漏洞初步介紹1.Activity基本介紹在學習Activity的漏洞挖掘之前,我們先對Activity的基本運行原理有一個初步的認識。
    一前言為了幫助更加方便的進行漏洞挖掘工作,前面我們通過了幾篇文章詳解的給大家介紹了動態調試技術、過反調試技術、Hook技術、過反Hook技術、抓包技術等,掌握了這些可以很方便的開展App漏洞挖掘工作,而最后我們還需要掌握一定的脫殼技巧,進行進一步助力我們漏洞挖掘的效率。本文第二節主要講述Android啟動流程和加殼原理。本文第三節主要介紹整體加殼的實現。本文第四節主要講當下脫殼點的概念。
    Xposed檢測繞過
    2023-03-06 14:36:15
    分享一些Xposed檢測繞過的總結,很多加殼軟件檢測到xposed就會殺死當前軟件進程。
    最近在學習Android APP客戶端漏洞挖掘過程中,對Android APP端漏洞挖掘做了一個基本的梳理總結本節主要是在介紹Android APP漏洞挖掘過程中,使用常見的Android漏洞挖掘工具的安裝和使用辦法,幫助Android漏洞挖掘人員提供便利。本文里面一部分的介紹采摘與網絡博客,大家可以點擊對應的網址進行查看。
    某加速器APP分析
    2023-07-14 09:51:27
    (這樣檢測是因為正常手機不會是intel或AMD型號的CPU。② 修改對應的smali語句,將eqz修改成nez。這里將eqz改成nez即可繞過檢測。解碼后結果是亂碼。
    VX小程序逆向分析
    2023-06-29 09:16:31
    Frida雖然確實調試起來相當方便,但是Xposed由于能夠安裝在用戶手機上實現持久化的hook,至今受到很多人的青睞,對于微信小程序的wx.request API。背景知識眾所周知,Xposed主要用于安卓Java層的Hook,而微信小程序則是由JS編寫的,顯然無法直接進行hook。對于Xposed則沒有這個問題,只需指定微信的包名就會自動hook上所有的子進程。答案是可以的,如下所示:Xposed hook wx.request java層代碼得到發送的數據實現如下所示:得到響應數據的Xposed代碼就不貼了,方法同上。
    前言市面的Android模擬器大多為游戲而定制,幾乎沒有使用原生AOSP并提供root和拓展性(可安裝xpo
    Frida工作原理學習
    2022-07-12 16:28:29
    frida是一款便攜的、自由的、支持全平臺的hook框架,可以通過編寫JavaScript、Python代碼來和frida_server端進行交互,還記得當年用xposed時那種寫了一大堆代碼每次修改都要重新打包安裝重啟手機、那種調試調到頭皮發麻的痛苦,百分之30的時間都是在那里安裝重啟安裝重啟。
    記一次試崗實戰項目
    2023-05-06 09:12:33
    試崗項目項目內容開發一個 xposed 插件,可以在 whatsApp 中導入通訊錄功能,輸入是手機號,輸出是這個手機號對應的id和個人信息,對方還跟貼心的給出了項目預覽圖,應該是對方近期接到的項目,也可以看出對方沒有白嫖我的意思。關鍵代碼定位點開APP隨便瀏覽了一下功能,根據對方給出的預覽圖,可以知道首先是需要定位這個界面的 onCreat 界面,首先考慮的就是直接搜字符串,比如“邀請使用”這四個字,但是拖入 jadx 一番搜索后什么也沒有。
    一顆小胡椒
    暫無描述
      亚洲 欧美 自拍 唯美 另类