一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>x-hook針對(duì)Android平臺(tái)ELF的PLT hook庫(kù)

x-hook針對(duì)Android平臺(tái)ELF的PLT hook庫(kù)

2022-06-23 | zip | 0.55 MB | 次下載 | 免費(fèi)

資料介紹

授權(quán)協(xié)議 MIT
開(kāi)發(fā)語(yǔ)言 C/C++
軟件類(lèi)型 開(kāi)源軟件
所屬分類(lèi) 手機(jī)/移動(dòng)開(kāi)發(fā)

軟件簡(jiǎn)介

愛(ài)奇藝開(kāi)源的一個(gè)針對(duì) Android 平臺(tái) ELF (可執(zhí)行文件和動(dòng)態(tài)庫(kù)) 的 PLT (Procedure Linkage Table) hook 庫(kù)。

xhook 一直在穩(wěn)定性和兼容性方面做著持續(xù)的優(yōu)化。

??????????????oooo????????????????????????????oooo????????
??????????????`888????????????????????????????`888????????
??oooo????ooo??888?.oo.????.ooooo.???.ooooo.???888??oooo??
???`88b..8P'???888P"Y88b??d88'?`88b?d88'?`88b??888?.8P'???
?????Y888'?????888???888??888???888?888???888??888888.????
???.o8"'88b????888???888??888???888?888???888??888?`88b.??
??o88'???888o?o888o?o888o?`Y8bod8P'?`Y8bod8P'?o888o?o888o

特征

  • 支持 Android 4.0 (含) 以上版本 (API level >= 14)。

  • 支持 armeabi, armeabi-v7a 和 arm64-v8a。

  • 支持?ELF HASH?和?GNU HASH?索引的符號(hào)。

  • 支持?SLEB128?編碼的重定位信息。

  • 需要 ROOT 權(quán)限。

  • 不依賴(lài)于任何的第三方動(dòng)態(tài)庫(kù)。

  • 純 C 的代碼。比較小的庫(kù)體積。

編譯

你需要 google NDK 來(lái)編譯 xhook。

最新版本的 xhook 在開(kāi)發(fā)和調(diào)試中使用的 NDK 版本是?r16b。

  • 編譯動(dòng)態(tài)庫(kù) (libxhook.so 和其他的用于測(cè)試的動(dòng)態(tài)庫(kù))

./build_libs.sh
  • 把動(dòng)態(tài)庫(kù)安裝到 Demo 工程的 libs 目錄中

./install_libs.sh
  • 清除動(dòng)態(tài)庫(kù)

./clean_libs.sh

Demo

cd?./xhookwrapper/
./gradlew?assembleDebug
adb?install?./app/build/outputs/apk/debug/app-debug.apk

API

外部 API 頭文件:?libxhook/jni/xhook.h

1. 注冊(cè) hook 信息

int?xhook_register(const?char??*pathname_regex_str,??
???????????????????const?char??*symbol,??
???????????????????void????????*new_func,??
???????????????????void???????**old_func);

在當(dāng)前進(jìn)程的內(nèi)存空間中,在每一個(gè)符合正則表達(dá)式?pathname_regex_str?的已加載ELF中,每一個(gè)調(diào)用?symbol?的 PLT 入口點(diǎn)的地址值都將給替換成?new_func。之前的 PLT 入口點(diǎn)的地址值將被保存在?old_func?中。

new_func?必須具有和原函數(shù)同樣的函數(shù)聲明。

成功返回 0,失敗返回 非0。

pathname_regex_str?只支持?POSIX BRE?定義的正則表達(dá)式語(yǔ)法。

2. 執(zhí)行 hook

int?xhook_refresh(int?async);

根據(jù)前面注冊(cè)的 hook 信息,執(zhí)行真正的 hook 操作。

給?async?參數(shù)傳?1?表示執(zhí)行異步的 hook 操作,傳?0?表示執(zhí)行同步的 hook 操作。

成功返回 0,失敗返回 非0。

xhook 在內(nèi)部維護(hù)了一個(gè)全局的緩存,用于保存最后一次從?/proc/self/maps?讀取到的 ELF 加載信息。每次一調(diào)用?xhook_refresh?函數(shù),這個(gè)緩存都將被更新。xhook 使用這個(gè)緩存來(lái)判斷哪些 ELF 是這次新被加載到內(nèi)存中的。我們每次只需要針對(duì)這些新加載的 ELF 做 hook 就可以了。

3. 清除緩存

void?xhook_clear();

清除 xhook 的緩存,重置所有的全局標(biāo)示。

如果你確定你需要的所有 PLT 入口點(diǎn)都已經(jīng)被替換了,你可以調(diào)用這個(gè)函數(shù)來(lái)釋放和節(jié)省一些內(nèi)存空間。

4. 啟用/禁用 調(diào)試信息

void?xhook_enable_debug(int?flag);

給?flag?參數(shù)傳?1?表示啟用調(diào)試信息,傳?0?表示禁用調(diào)試信息。 (默認(rèn)為:禁用)

調(diào)試信息將被輸出到 logcat,對(duì)應(yīng)的 TAG 為:xhook。

5. 啟用/禁用 SFP (段錯(cuò)誤保護(hù))

void?xhook_enable_sigsegv_protection(int?flag);

給?flag?參數(shù)傳?1?表示啟用 SFP,傳?0?表示禁用 SFP。 (默認(rèn)為:啟用)

xhook 并不是一個(gè)常規(guī)的業(yè)務(wù)層的動(dòng)態(tài)庫(kù)。在 xhook 中,我們不得不直接計(jì)算一些內(nèi)存指針的值。在一些極端的情況和環(huán)境下,讀或者寫(xiě)這些指針指向的內(nèi)存會(huì)發(fā)生段錯(cuò)誤。根據(jù)我們的測(cè)試,xhook 的行為將導(dǎo)致 APP 崩潰率增加 “一千萬(wàn)分之一” (0.0000001)。(具體崩潰率可能會(huì)增加多少,也和你想要 hook 的庫(kù)和符號(hào)有關(guān))。最終,我們不得不使用某些方法來(lái)防止這些無(wú)害的崩潰。我們叫它SFP (段錯(cuò)誤保護(hù)),它是由這些調(diào)用和值組成的:sigaction(),?SIGSEGV,?siglongjmp()?和?sigsetjmp()。

在 release 版本的 APP 中,你應(yīng)該始終啟用 SFP,這能防止你的 APP 因?yàn)?xhook 而崩潰。在 debug 版本的 APP 中,你應(yīng)該始終禁用 SFP,這樣你就不會(huì)丟失那些一般性的編碼失誤導(dǎo)致的段錯(cuò)誤,這些段錯(cuò)誤是應(yīng)該被修復(fù)的。

應(yīng)用舉例

//監(jiān)測(cè)內(nèi)存泄露
xhook_register(".*\\.so$",?"malloc",??my_malloc,??NULL);
xhook_register(".*\\.so$",?"calloc",??my_calloc,??NULL);
xhook_register(".*\\.so$",?"realloc",?my_realloc,?NULL);
xhook_register(".*\\.so$",?"free",????my_free,????NULL);

//監(jiān)控?sockets?生命周期
xhook_register(".*\\.so$",?"getaddrinfo",?my_getaddrinfo,?NULL);
xhook_register(".*\\.so$",?"socket",??????my_socket,??????NULL);
xhook_register(".*\\.so$",?"setsockopt"???my_setsockopt,??NULL);
xhook_register(".*\\.so$",?"bind",????????my_bind,????????NULL);
xhook_register(".*\\.so$",?"listen",??????my_listen,??????NULL);
xhook_register(".*\\.so$",?"connect",?????my_connect,?????NULL);
xhook_register(".*\\.so$",?"shutdown",????my_shutdown,????NULL);
xhook_register(".*\\.so$",?"close",???????my_close,???????NULL);

//過(guò)濾出和保存部分安卓?log?到本地文件
xhook_register(".*\\.so$",?"__android_log_write",??my_log_write,??NULL);
xhook_register(".*\\.so$",?"__android_log_print",??my_log_print,??NULL);
xhook_register(".*\\.so$",?"__android_log_vprint",?my_log_vprint,?NULL);
xhook_register(".*\\.so$",?"__android_log_assert",?my_log_assert,?NULL);

//追蹤某些調(diào)用
xhook_register("^/system/.*$",?"mmap",???my_mmap,???NULL);
xhook_register("^/vendor/.*$",?"munmap",?my_munmap,?NULL);

//防御某些注入攻擊
xhook_register(".*com\\.hacker.*\\.so$",?"malloc",??my_malloc_always_return_NULL,?NULL);
xhook_register(".*/libhacker\\.so$",?????"connect",?my_connect_with_recorder,?????NULL);

//修復(fù)某些系統(tǒng)?bug
xhook_register(".*some_vendor.*/libvictim\\.so$",?"bad_func",?my_nice_func,?NULL);

//現(xiàn)在執(zhí)行?hook!
xhook_refresh(1);

許可證

Copyright (c) 2018-present, 愛(ài)奇藝, Inc. All rights reserved.

xhook 中大多數(shù)的源碼使用 MIT 許可證,另外的一些源碼使用 BSD 樣式的許可證。

詳細(xì)信息請(qǐng)查看 LICENSE 文件。

?
?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開(kāi)發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)