• 當前位置:首頁 > IT技術 > 移動平臺 > 正文

    成熟的App會Hook自己
    2022-04-19 11:20:26

    一、目標

    李老板: 奮飛呀,我都是自己了,還不是想怎么玩就怎么玩,還用Hook這么麻煩嗎?

    奮飛:男人要對自己狠一點。

    我有一個 libtest.so,我調用它后,它會使用 android_log_print 輸出一些信息,我想讓它輸出的內容加點私貨。動手吧。

    • so hook
    • Dobby

    二、步驟

    先把so調用起來

    成熟的App會Hook自己_Android

    把so放在cpp的同級目錄 jniLibs下面。 然后跑起來,輸出:

    2021-06-11 09:45:11.185 17916-18002/com.fenfei.dobbydemo D/mytest: call directly. 1
    2021-06-11 09:45:11.185 17916-18002/com.fenfei.dobbydemo D/mytest: call from global ptr. 1
    2021-06-11 09:45:11.185 17916-18002/com.fenfei.dobbydemo D/mytest: call from local ptr. 1
    2021-06-11 09:45:11.185 17916-18002/com.fenfei.dobbydemo D/mytest: call from local ptr2. 1 (definitely failed when compiled with -O0)

    我們的目標就是在這些輸出里面加點私貨。

    Dobby

    github.com/jmpews/Dobb… 是一個多平臺的Hook庫,反正很牛就對了。

    git clone下來。

    成熟的App會Hook自己_#include_02

    整個文件夾放到 CMakeLists.txtnative-lib.cpp 同級目錄下面。

    然后編輯 CMakeLists.txt 文件

    # 這里指定靜態鏈接,生成一個so;默認為 ON,生成兩個so
    set(GENERATE_SHARED OFF)
    # 指定 dobby 庫目錄
    set(DOBBY_SOURCE_DIR Dobby)
    add_subdirectory(${DOBBY_SOURCE_DIR} dobby.out)
    #end

    ......

    # target_link_libraries 部分增加 dobby
    target_link_libraries( # Specifies the target library.
    native-lib
    dobby

    # Links the target library to the log library
    # included in the NDK.
    ${log-lib} )

    然后加上Hook代碼

    #include <android/log.h>
    #include "Dobby/include/dobby.h"

    static int (*orig_log_print)(int prio, const char* tag, const char* fmt, ...);
    static int my_libtest_log_print(int prio, const char* tag, const char* fmt, ...)
    {
    va_list ap;
    char buf[1024];
    int r;

    snprintf(buf, sizeof(buf), "[%s] %s", (NULL == tag ? "" : tag), (NULL == fmt ? "" : fmt));

    va_start(ap, fmt);
    r = __android_log_vprint(prio, "Dobby_libtest", buf, ap);
    va_end(ap);
    return r;
    }

    __attribute__((constructor)) static void ctor() {
    DobbyHook((void *) DobbySymbolResolver(NULL, "__android_log_print"), (void *) my_libtest_log_print,(void **) &orig_log_print);
    }

    跑起來,體驗一下。

    2021-06-11 10:23:12.175 30447-30493/com.fenfei.dobbydemo D/Dobby_libtest: [mytest] call directly. 1
    2021-06-11 10:23:12.175 30447-30493/com.fenfei.dobbydemo D/Dobby_libtest: [mytest] call from global ptr. 1
    2021-06-11 10:23:12.175 30447-30493/com.fenfei.dobbydemo D/Dobby_libtest: [mytest] call from local ptr. 1
    2021-06-11 10:23:12.175 30447-30493/com.fenfei.dobbydemo D/Dobby_libtest: [mytest] call from local ptr2. 1 (definitely failed when compiled with -O0)

    私貨整進去了, mytest: 整成了 Dobby_libtest: [mytest]

    三、總結

    Hook是經久不衰的話題,除了Hook別人,Hook自己也是很有意義的。

    成熟的App會Hook自己_Android_03

    有的東西吧,外行人看起來很厲害,但是我們內行人看起來吧,那真xxx不是一般的厲害

    TIP: 本文的目的只有一個就是學習更多的逆向技巧和思路,如果有人利用本文技術去進行非法商業獲取利益帶來的法律責任都是操作者自己承擔,和本文以及作者沒關系。

    關注微信公眾號: 奮飛安全,最新技術干貨實時推送

    本文摘自 :https://blog.51cto.com/u

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码