修改android內(nèi)核 的Tracerpid,避免一些殼的調(diào)試檢測

一些必備工具:
1、一臺root的android手機(jī)
2、下載"rom制作工具"超級好用
3、導(dǎo)出bootimg的工具,我用了“搞機(jī)助手",可以一鍵導(dǎo)出boot.img
4、linux下查看boot.img壓縮方式的工具。
5、010 editor

步驟:
首先用搞機(jī)助手導(dǎo)出boot.img。


1637545301(1).png

1637545359(1).png

image.png

導(dǎo)出后在桌面可以找到boot.img。
提取到boot.img后,進(jìn)行下一步
將boot.img用復(fù)制到bootimg.exe的同一文件夾下


image.png

輸入命令:.\bootimg.exe --unpack-bootimg
生成如下:
image.png

提取這個kernel文件
用linux(我用windows安裝了子系統(tǒng)的方式)安裝binwalk
git clone https://github.com/devttys0/binwalk
cd binwalk
python setup.py install

安裝好后,因為我的linux是windows子系統(tǒng),所以找了一下安裝路徑在,binwalk在:
C:\Users\Administrator\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\su\binwalk
下面。把kernel文件復(fù)制到該文件下面,執(zhí)行 binwalk kernel


image.png

輸入:binwalk -e kernel --run-as=root,開始解壓縮


image.png

生成文件
下面開始對文件內(nèi)容進(jìn)行修改
將541C文件導(dǎo)入010 editor ,CTRL+F 查找Text:TracerPid:
image.png

我的紅米A8 安裝的是android10系統(tǒng),發(fā)現(xiàn)與網(wǎng)上的大部分教程都不一致:


image.png

網(wǎng)上大部分的系統(tǒng)里面都是這種:

"TracerPid:\t%d\n"

翻看了紅米A8的源代碼,發(fā)現(xiàn)是這種形式的:
tracerpid 沒有%d這個借記符號

 seq_put_decimal_ull(m, "\nTracerPid:\t", tpid);

所以我這個需要另辟蹊徑了。
用IDA打開文件


image.png

設(shè)置處理器類型為ARM Little-endian,點ok后,彈下圖


image.png

在ROM start address和Loading address填0xc0008000,點ok,沒有函數(shù)名,不方便定位代碼。
在ida中搜索(我已經(jīng)導(dǎo)入了android的內(nèi)核的函數(shù)文件所以可以識別出函數(shù)),在紅米源代碼中定位到調(diào)用函數(shù)在proc_pid_status函數(shù)中,所以直接找該函數(shù)去修改
image.png

我們只需要 把 BL _task_pid_nr_ns 替換為MOV R0, #0,機(jī)器碼為00 00 A0 E3,指令的文件偏移為(C03559F0-C0008000 = 34d9f0)。
打開010editor,找到該位置


image.png

修改為
image.png

修改好后,將541c文件在ubuntu下用命令重新壓縮gzip格式
gzip -n -f -9 541C
發(fā)現(xiàn)用這個命令壓縮的基本一致,紅米這個內(nèi)核壓縮包有crc32校驗,必須把壓縮號的文件覆蓋到原來的541C.gz里面去,


image.png

在原壓縮包里搜索gz的尾部特征碼: F7 DF 2F 9A B1 CC C8 90 95 01


image.png

把新的壓縮包的所有內(nèi)容覆蓋到原壓縮包到特征碼的位置位置。
這個就與原壓縮包一模一樣了。

然后重新寫入到kernel文件里面去,用python腳本:

with open(r"./541c.gz","rb") as f:
    content = f.read()

with open(r"./kernel","rb") as f:
    f.seek(0xA7D110)#地址查看前面截圖,把壓縮包后面剩余的原樣添加進(jìn)去的意思
    content += f.read()
    
with open(r"./kernel_new","wb") as f:
    f.write(content)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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