當(dāng)前位置:首頁(yè) > IT技術(shù) > 移動(dòng)平臺(tái) > 正文

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

一、目標(biāo)

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

奮飛:男人要對(duì)自己狠一點(diǎn)。

我有一個(gè) libtest.so,我調(diào)用它后,它會(huì)使用 android_log_print 輸出一些信息,我想讓它輸出的內(nèi)容加點(diǎn)私貨。動(dòng)手吧。

  • so hook
  • Dobby

二、步驟

先把so調(diào)用起來(lái)

成熟的App會(huì)Hook自己_Android

把so放在cpp的同級(jí)目錄 jniLibs下面。 然后跑起來(lái),輸出:

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)

我們的目標(biāo)就是在這些輸出里面加點(diǎn)私貨。

Dobby

github.com/jmpews/Dobb… 是一個(gè)多平臺(tái)的Hook庫(kù),反正很牛就對(duì)了。

git clone下來(lái)。

成熟的App會(huì)Hook自己_#include_02

整個(gè)文件夾放到 CMakeLists.txtnative-lib.cpp 同級(jí)目錄下面。

然后編輯 CMakeLists.txt 文件

# 這里指定靜態(tài)鏈接,生成一個(gè)so;默認(rèn)為 ON,生成兩個(gè)so
set(GENERATE_SHARED OFF)
# 指定 dobby 庫(kù)目錄
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);
}

跑起來(lái),體驗(yàn)一下。

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)

私貨整進(jìn)去了, mytest: 整成了 Dobby_libtest: [mytest]

三、總結(jié)

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

成熟的App會(huì)Hook自己_Android_03

有的東西吧,外行人看起來(lái)很厲害,但是我們內(nèi)行人看起來(lái)吧,那真xxx不是一般的厲害

TIP: 本文的目的只有一個(gè)就是學(xué)習(xí)更多的逆向技巧和思路,如果有人利用本文技術(shù)去進(jìn)行非法商業(yè)獲取利益帶來(lái)的法律責(zé)任都是操作者自己承擔(dān),和本文以及作者沒(méi)關(guān)系。

關(guān)注微信公眾號(hào): 奮飛安全,最新技術(shù)干貨實(shí)時(shí)推送

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

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >