ARTDroid使用說明

  1. busybox安裝
    1.0 BusyBox說明
    Busy是一個集成了部分linux命令和工具的軟件昂芜。BusyBox開發(fā)的目的是可以在android系統(tǒng)上繼續(xù)使用linux中的命令,如grep,find等锄码。
    1.1 BusyBox下載與安裝
    BusyBox下載地址:https://busybox.net/downloads/binaries/
    下載完成之后局齿,將文件重命名為busybox罢浇,然后使用push命令讼积,將busybox推到手機,然后使用adb shell進入手機烦衣,在busybox文件所在目錄運行./busybox --install ./歹河,這個會將busybox安裝到當前目錄。
    一定要將busybox安裝到system/xbin目錄下花吟,要不然后續(xù)使用時可能會出現(xiàn)問題

將busybox安裝到system/xbin目錄下
首先要看system當前掛載信息
輸入adb shell秸歧,然后輸入mount可以看到信息,如下圖

mount

然后將system修改為可讀寫
remount

接著將busybox移動到xbin目錄衅澈,然后運行上述安裝命令即可键菱。

1.2 so庫編譯
1.2.1 在使用時,需要根據(jù)自己的需要對arthook_demo.h文件和arthook_demo.c文件進行修改今布。原始的文件內(nèi)容如下所示

arthook_demo.h

arthook_demo.c

arthook_demo.h文件中经备,主要需要根據(jù)需要修改MYHOOKCLASS的值拭抬,MYHOOKCLASS變量記錄的是
1.2.3 使用ndk編譯。
打開終端侵蒙,在ARTDroid/examples/arthook_demo/jni目錄下造虎,運行ndk_build
ARTDroid so庫編譯

編譯完成之后,生成的so庫所在的目錄是ARTDroid/examples/arthook_demo/libs文件夾纷闺。

  1. libarthook思路
    2.1 FindClass
    2.2 GetMethodID
    2.3 獲取虛表的偏移地址
    2.4 獲取虛表的長度
    2.5 在虛表中尋找MethodID
    2.6 修改找到的方法的指針算凿,指向patch method
  2. sh文件分析
    3.1 install.sh
    3.1.1 check_dependencies
    在環(huán)境變量PATH中查看是否有SDK路徑和NDK路徑,有則繼續(xù)執(zhí)行犁功,沒有則結(jié)束并提醒用戶將其添加到PATH中氓轰。
    3.1.2 check_first_run
    判斷是否是第一次運行demo,判斷的方法是判斷判斷是否存在DIR/.first_run.no文件浸卦,如果存在署鸡,則說明不是第一次運行,如果不存在則是第一次運行镐躲,此時創(chuàng)建DIR/.first_run.no储玫,并將IS_FIRST_RUN的值改為true
    3.1.3 compile_all
    進入到DIR目錄侍筛,然后判斷IS_FIRST_RUN是否為true萤皂,為true則繼續(xù)。進入DIR/adbi文件夾匣椰,運行clean.sh和build.sh裆熙。然后在DIR文件夾下,運行clean.sh和build.sh禽笑。
    3.1.4 push_to_device
    使用adb push入录,將libarthookdemo.so和hijack移動到手機的/data/local/tmp文件夾下。
    3.2 adbi/build.sh
    進入到adbi/hijack/jni目錄佳镜,運行ndk-build命令生成hijack僚稿,然后進入到adbi/instruments/base/jni目錄,運行ndk-build命令生成base.a文件蟀伸,進入到adbi/instruments/example/jni目錄蚀同,運行ndk-build生成libexample.so文件。
    3.3 DIR/build.sh
    進入到arthook/core/jni目錄下啊掏,然后在終端運行ndk-build命令蠢络,將jni目錄編譯得到libarthook.so文件,然后進入到examples/arthook_demo/jni目錄下迟蜜,運行ndk-build命令刹孔,得到libarthookdemo.so
    3.4 runhijack.sh
    runhijack.sh完成的動作是導入libarthookdemo.so和hijack.bin文件。
    3.4.1 文件首先檢查了依賴娜睛,主要是確定手機上已經(jīng)將busybox安裝到/system/xbin目錄下髓霞。
    3.4.2 判斷參數(shù)卦睹,如果參數(shù)為空則提示用戶,打印help信息方库。
    3.4.3 如果參數(shù)是-t分预,則打印相關(guān)信息,并執(zhí)行/data/local/tmp/hijack -p pid -l /data/local/tmp/libarthookdemo.so -d -D 2
    3.5 hijack.c
    在3.4中可知薪捍,runhijack.sh最終會運行hijack.bin笼痹。而這個文件是有hijack.c編譯得到的,所以這里繼續(xù)分析hijack.c文件酪穿,以main方法為入口凳干。
  3. 使用
    4.0 在使用之前,首先需要關(guān)閉SELinux被济,關(guān)閉命令是setenforce 0救赐。
    4.1 運行srcipts/install.sh
    install.sh會調(diào)用ndk編譯需要的文件。具體的代碼分析在第三部分有說明只磷。
    4.2 push文件到手機
    將編譯好的文件傳到手機经磅,這些文件包括/examples/classes.dex,/adbi/hijack/libs/armeabi/hijack,scripts/device/init.sh,scripts/device/runhijack.sh,examples/arthook_demo/libs/armeabi/libarthookdemo.so.上傳完成之后,data/local/tmp目錄下的文件應該是這樣的

    4.3 修改dex/opt的所有者钮追。
    首先用ps命令查看我們要測試的apk的USER预厌,如下圖中,我要測試的apk對應的USER是u0_a54,然后使用chown命令元媚,將dex/opt的所有者改為u0_a54.具體的命令是chown u0_a54:u0_a54 dex/opt

    4.4 運行runhijack.sh文件轧叽。
    運行runhijack.sh文件時,會提示用戶輸入相應的參數(shù)刊棕,如下圖所示炭晒。

    可以看到有兩種方式,一個是添加-s+包名甥角,另一個是-t+pid网严。我這里用的是-t+pid。首先確定下opt所屬的USER名字嗤无,如下圖震束,為u0_a64

    然后用ps命令,可以看到u0_a64對應的pid為1038

    重新運行runhijack.sh文件翁巍,添加參數(shù)驴一,如下圖所示

    接著在app上點擊,可以看到已經(jīng)hook成功灶壶。

    對應的日志記錄如下

在運行install.sh文件時肝断,可能會提示缺少一些so文件后者a文件,主要是因為adbi目錄下的內(nèi)容沒有被編譯,使用ndk-build自己進行編譯之后重新運行install.sh即可
PTRACE_GETREGS ptrace(PTRACE_GETREGS,pid,0,data) 讀取寄存器的值胸懈,pid表示被跟蹤的子進程担扑,data為用戶變量地址,用于返回讀到的數(shù)據(jù)趣钱。這個指令會讀取17個基本寄存器的值
PTRACE_ATTACH ptrace(PTRACE_ATTACH,pid) 跟蹤指定的pid進程涌献。被跟蹤進程將成為當前進程的子進程并進入中止狀態(tài)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市首有,隨后出現(xiàn)的幾起案子燕垃,更是在濱河造成了極大的恐慌,老刑警劉巖井联,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卜壕,死亡現(xiàn)場離奇詭異,居然都是意外死亡烙常,警方通過查閱死者的電腦和手機轴捎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚕脏,“玉大人侦副,你說我怎么就攤上這事⊥毡蓿” “怎么了秦驯?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長终议。 經(jīng)常有香客問我汇竭,道長葱蝗,這世上最難降的妖魔是什么穴张? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮两曼,結(jié)果婚禮上皂甘,老公的妹妹穿的比我還像新娘。我一直安慰自己悼凑,他們只是感情好偿枕,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著户辫,像睡著了一般渐夸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渔欢,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天墓塌,我揣著相機與錄音,去河邊找鬼。 笑死苫幢,一個胖子當著我的面吹牛访诱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播韩肝,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼触菜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哀峻?” 一聲冷哼從身側(cè)響起涡相,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剩蟀,沒想到半個月后漾峡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡喻旷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年生逸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片且预。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡槽袄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锋谐,到底是詐尸還是另有隱情遍尺,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布涮拗,位于F島的核電站乾戏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏三热。R本人自食惡果不足惜鼓择,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望就漾。 院中可真熱鬧呐能,春花似錦、人聲如沸抑堡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽首妖。三九已至偎漫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間有缆,已是汗流浹背象踊。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工舌仍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人通危。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓铸豁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親菊碟。 傳聞我的和親對象是個殘疾皇子节芥,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容