作者子炎
背景:
得到一個Android的CrackMe來考察逆向知識,分析后發(fā)現(xiàn)其關鍵函數(shù)位于native so庫中,并且在函數(shù)開始時啟動了線程進行TracerPid檢測的反調試,當發(fā)現(xiàn)程序被調試時會直接殺死應用。雖然題目最后卡在了native 逆向與反調試繞過這里,下去后我學習了下如何繞過這個反調試。主要是兩種:(1)patch so,直接修改關鍵值來繞過;(2)修改系統(tǒng)內核文件來將TracerPid寫死為0。剛好我手頭有一個之前做實驗已root的紅米 note 4,便決定采用修改系統(tǒng)內核的方式,一勞永逸。
1.提取boot.img
有點目錄不同,需要根據(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

2. 修改內核文件
取出來的 boot.img 是一個打包文件,包含了ramdisk,kernel 等很多東西,首先需要將其解開。這里我使用的是一個 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 目錄下:

./gradlew unpack解壓 boot.img

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

2.3 修改 kernel 文件
binwalk 看一下 kernel 是怎么組織的:

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

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


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

移動到Android_boot_image_editor-master/build/unzip_boot 目錄下

原 kernel 進行拼接(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)

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

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

2.4 修改 root 下的 default.prop 文件
cd root
vi default.prop`
`ro.secure=1 改成 ro.secure=0
ro.debuggable=0 改成ro.debuggable=1

如果系統(tǒng)版本是開發(fā)版的華ro.secure本來就是0
2.5 重打包
./gradlew pack

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

3. twrp 刷入鏡像
https://dl.twrp.me/angler/(根據(jù)手機型號下載對應的版本,不知道就百度)
將得到的 boot.img.signed 修改為 boot-new.img 放入手機的隨意一個文件夾
進入 twrp rec: 安裝→刷入鏡像,選擇處理后的鏡像刷如即可
adb reboot bootloader
fastboot boot twrp-3.5.2_9-0-angler.img #如果twrp-3.5.2_9-0-angler.img 不在一個目錄下需要帶上盤符和目錄`

選擇對應的boot-new.img安裝即可
今天的分享就到這里了,有時間給大家出后續(xù),寫的不好各位大佬噴輕點,麻煩各位大佬點點贊,謝謝大佬!