安卓系統(tǒng)修改系統(tǒng)內(nèi)核繞過TracerPid檢測(cè)--反防調(diào)試

作者子炎

背景:

得到一個(gè)Android的CrackMe來考察逆向知識(shí),分析后發(fā)現(xiàn)其關(guān)鍵函數(shù)位于native so庫(kù)中,并且在函數(shù)開始時(shí)啟動(dòng)了線程進(jìn)行TracerPid檢測(cè)的反調(diào)試,當(dāng)發(fā)現(xiàn)程序被調(diào)試時(shí)會(huì)直接殺死應(yīng)用。雖然題目最后卡在了native 逆向與反調(diào)試?yán)@過這里,下去后我學(xué)習(xí)了下如何繞過這個(gè)反調(diào)試。主要是兩種:(1)patch so,直接修改關(guān)鍵值來繞過;(2)修改系統(tǒng)內(nèi)核文件來將TracerPid寫死為0。剛好我手頭有一個(gè)之前做實(shí)驗(yàn)已root的紅米 note 4,便決定采用修改系統(tǒng)內(nèi)核的方式,一勞永逸。

1.提取boot.img

有點(diǎn)目錄不同,需要根據(jù)手機(jī)機(jī)型去確定目錄ls -l /dev/block/platform/soc/xxxx.ufshc/by-name | grep boot
su
ls -l /dev/block/platform/soc/xxxx.ufshc/by-name | grep boot
lrwxrwxrwx 1 root root 21 1970-01-01 08:01 boot -> /dev/block/mmcblk0p34
dd if=/dev/block/mmcblk0p34 of=/sdcard/boot.img
adb pull /sdcard/boot.img boot.img

img

2. 修改內(nèi)核文件

取出來的 boot.img 是一個(gè)打包文件,包含了ramdisk,kernel 等很多東西,首先需要將其解開。這里我使用的是一個(gè) github 上的工具 Android_boot_image_editor

2.1 kali 獲取工具

[https://github.com/cfig/Android_boot_image_editor][0]
git clone https://github.com/cfig/Android_boot_image_editor.git

2.2 解包 boot.img
把提取出來的 boot.img 拷貝到 ./Android_boot_image_editor 目錄下:

img

./gradlew unpack解壓 boot.img

img

解包后的文件在 build/unzip_boot 下:
cd build/unzip_boot

img

2.3 修改 kernel 文件

binwalk 看一下 kernel 是怎么組織的:

img

可以看到,對(duì)于我的 kernel,gzip文件+設(shè)備文件。所以我們需要做的是提取出頭部的 gzip,解壓修改后拼接回去
提取 gzip(0x7xxxx根據(jù)實(shí)際情況修改,注意一下是python腳本,需要新建個(gè)py文件寫入運(yùn)行):
with open("./kernel","rb") as f:
content=f.read(0x7xxxx)
with open("./kernel_core.gz","wb") as f:
f.write(content)

img

因我的 010 Editor 在 win 下,把提取出來的 kernel_core.gz 拷貝到 win 下,并對(duì)解壓后的 kernel_core 使用 010 Editor 進(jìn)行修改:
ctrl +f 查詢 TracerPid
25 64 --> 30 09 (0\t)
注意:010 Editor 默認(rèn)為覆蓋模式,不需要?jiǎng)h除 25 64 再進(jìn)行輸入 30 09,直接把光標(biāo)定位到 25 前輸入 30 09 即可。我就在這踩了坑,導(dǎo)致一直不成功……

img
img

將修改好的 kernel_core 重命名為 kernel,拷貝回 kail 進(jìn)行壓縮:
gzip -n -f -9 kernel

img

移動(dòng)到Android_boot_image_editor-master/build/unzip_boot 目錄下

img

原 kernel 進(jìn)行拼接(0x7xxxxx記得替換成之前的查看到的):
with open("./kernel.gz","rb") as f:content = f.read()with open("./kernel","rb") as f:f.seek(0x7xxxxx)content += f.read()with open("./kernel_new","wb") as f:f.write(content)

img

刪除原 kernel 及多余文件,重命名 kernel_new 為 kernel

img

留下以下這些文件就可以了

img

2.4 修改 root 下的 default.prop 文件

cd root
vi default.prop`
`ro.secure=1 改成 ro.secure=0
ro.debuggable=0 改成ro.debuggable=1
img

如果系統(tǒng)版本是開發(fā)版的華ro.secure本來就是0

2.5 重打包

./gradlew pack

img

boot.img.signed 即為重打包后的文件:

img

3. twrp 刷入鏡像

https://dl.twrp.me/angler/(根據(jù)手機(jī)型號(hào)下載對(duì)應(yīng)的版本,不知道就百度)
將得到的 boot.img.signed 修改為 boot-new.img 放入手機(jī)的隨意一個(gè)文件夾
進(jìn)入 twrp rec: 安裝→刷入鏡像,選擇處理后的鏡像刷如即可
adb reboot bootloader

fastboot boot twrp-3.5.2_9-0-angler.img #如果twrp-3.5.2_9-0-angler.img 不在一個(gè)目錄下需要帶上盤符和目錄`

img

選擇對(duì)應(yīng)的boot-new.img安裝即可

今天的分享就到這里了,有時(shí)間給大家出后續(xù),寫的不好各位大佬噴輕點(diǎn),麻煩各位大佬點(diǎn)點(diǎn)贊,謝謝大佬!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、前言在前一篇文章中詳細(xì)介紹了Android現(xiàn)階段可以采用的幾種反調(diào)試方案策略,我們?cè)谄平饽嫦驊?yīng)用的時(shí)候,一般現(xiàn)...
    JiangWei_App閱讀 1,848評(píng)論 2 5
  • 1.前言 1、好一段時(shí)間沒有寫安卓逆向相關(guān)的文章了,最近朋友發(fā)我一個(gè)apk說是讓我研究一下怎么過掉apk的反調(diào)試,...
    淡v漠閱讀 3,448評(píng)論 0 2
  • 前面一篇文章《Android反調(diào)試手段收集》在講常用的反調(diào)試方法中有一條是檢測(cè)進(jìn)程的TracerPid的值正常情況...
    M_天河閱讀 3,448評(píng)論 0 1
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,555評(píng)論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn),也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 7,718評(píng)論 0 4

友情鏈接更多精彩內(nèi)容