修改手機(jī)內(nèi)核繞過ptrace

前面一篇文章《Android反調(diào)試手段收集》在講常用的反調(diào)試方法中有一條是檢測進(jìn)程的TracerPid的值正常情況下為0,在被調(diào)試時變成父進(jìn)程的pid,應(yīng)對這種情況我們可以通過修改手機(jī)內(nèi)核中代碼,將這個pid永久性改為0。

具體方法也都是前人總結(jié)的https://bbs.pediy.com/thread-207538.htm,這里只根據(jù)自己的設(shè)備做一遍操作演示。
設(shè)備:Nexus5
系統(tǒng)版本:4.4.4

1,提取出boot.img文件

首先要有root權(quán)限,進(jìn)入到/dev/block/platform/文件夾下,然后這里會有一個文件夾,在不同手機(jī)中這個文件夾名字不一樣,我的設(shè)備中是msm_sdcc.1,進(jìn)入后然后再進(jìn)入by-name文件夾,找一個boot文件,如下:


記下后面的路徑,然后導(dǎo)出boot文件:

dd if=/dev/block/mmcblk0p19 of=/data/local/boot.img
adb pull /data/local/boot.img boot.img

權(quán)限不夠的話就賦下權(quán)限值。

2,用bootimg.exe工具解壓boot.img文件

lcweik大神在上面文章中給出的mac下的工具abootimg,我這里用的是windows下的bootimg.exe
命令是:bootimg --bootimg boot.img


boot.img不是一個完整的文件系統(tǒng),它們是一種android自定義的文件格式,該格式包括了2K的文件頭+用gzip壓縮過的內(nèi)核+一個ramdisk內(nèi)存盤+第二階段的載入器程序(可選)

解析后文件如下:

其中的kernel文件就是內(nèi)核文件,ramdisk.gz文件解壓后就是initrd文件夾下的內(nèi)容。

3,處理內(nèi)核文件

備份kernel文件,修改文件名為zImage.gz文件,用010打開文件,查找十六進(jìn)制1F 8B 08 00,這是gz文件的文件頭標(biāo)志,把在這之前的內(nèi)容全部刪掉,然后zImage.gz文件就變成標(biāo)準(zhǔn)的gzip壓縮文件了,然后使用gunzip命令或者gzip -d命令解壓縮文件,


這時獲取到的zImage文件才是需要處理的文件。
用ida工具打開zImage文件,處理器類型選擇ARM小端,點(diǎn)擊ok確認(rèn),

反匯編內(nèi)存配置頁面將ROM和Inputfile的起始地址設(shè)置為0xC0008000,因?yàn)長inux啟動內(nèi)核的地址就是0xC0008000。

進(jìn)去后Shift+F12進(jìn)入字符串頁面,全局搜索TracerPid,

選中雙擊后得到下面地址:0xC0D228A4,然后減去基址0xC0008000,得到0xD1A8A4

將文件用010打開,跳轉(zhuǎn)到這個地址,在這里直接修改字符串內(nèi)容,將TracerPid后面的%d改為0\t或者0\n,注意不能值改為0,要保證修改后字符串對齊。

至此修改image文件完成。

4,生成修改后的boot.img文件

用gzip壓縮zImage文件gzip -n -f -9,生成zImage.gz文件,然后將生成的zImage.gz文件,覆蓋到kernel文件中的對應(yīng)位置,即我們刪除的內(nèi)容之后的位置1F8B0800,這里一定要注意仔細(xì),不能有文件大小錯誤。
通過bootimg工具生成boot文件。

5,刷機(jī)

啟動fastboot,運(yùn)行fastboot flash boot boot-new.img刷入重啟即可。

Tips:

還有一種最常見的反調(diào)方式就是在app的am文件中添加android:debuggable="false",

  1. 應(yīng)對這種反調(diào)做的最多的就是反編譯app,將屬性值修改為“true”;
  2. 但是每次這樣操作未免麻煩,有大神給出了mprop工具,只需將可執(zhí)行文件復(fù)制進(jìn)手機(jī)里,運(yùn)行./mprop ro.debuggable 1即可,但是這個工具修改的是內(nèi)存中的值,也就是說并不是永久的,每次重啟還得再改一次;
  3. 其實(shí)這個屬性值,是在系統(tǒng)根目錄下的default.prop文件中的,設(shè)備啟動就會解析存入內(nèi)存中。所以如果我們能夠把這個文件中的值改成1,那么就永久有效了。在上面解包boot.img的時候,說到了有一個initrd目錄,其實(shí)default.prop就是在這個目錄下



    這里我們直接將其改成1,因?yàn)槲覀儸F(xiàn)在已經(jīng)進(jìn)行了修改boot.img操作,那就順便把這個功能也給改了。

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

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

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