1. 程式人生 > >修改系統核心 繞過反除錯 TracerPid為0

修改系統核心 繞過反除錯 TracerPid為0

感謝作者整理,親測可用 坐著用的mac 現在改成windows下操作

裝置nexus5 系統android 4.4

如果 裝置與上不符 按照以下方法獲取boot.img

一、  提取ker核心檔案在提取zImage前,必須確保自己擁有root許可權。adb root 獲取root許可權輸入命令:

adb shellls -l /dev/block/platform/msm_sdcc.1(具體裝置具體定)/by-name,找到boot這一項,記下路徑

 

將boot匯出為boot.imgdd if=/dev/block/mmcblk0p19 of=/data/local/boot.imgadb pull /data/local/boot.img boot.img

如果裝置和系統的和給出符話直接 使用原始碼的boot.img更好

二.使用 bootimg.exe工具,解開boot.img

Bootimg boot.img檔案放到同一目錄


執行bootimg --unpack-bootimg 該命令會解包出核心:kernelramdisk.gz.

kernel就是內合檔案 和zImage相同

kernel檔案複製為檔名為z.gz的檔案,並使用010editor查詢十六進位制1f 8b 08 00,找到後把前面的資料全刪掉,使z.gz檔案變成標準的gzip壓縮檔案,這樣子就可以使用gunzip解壓了。命令:gunzip.exe z.gz 

生成檔案z就是祼二進位制檔案zImage。

二、  提位、修改關鍵程式碼zImage檔案可以直接使用IDA去開啟,但需要設定引數。
在上圖,設定處理器型別為ARM Little-endian,點【ok】後,彈下圖


在ROM start address和Loading address填0xc0008000,點【ok】,IDA顯示效果如下圖所示,沒有函式名,不方便定位程式碼。
先回到root下的adb shell,輸入命令:echo 0 > /proc/sys/kernel/kptr_restrict關閉符號遮蔽再輸入以下命令檢視這兩函式的地址
回到IDA,按g跳轉到c01b083c(__task_pid_nr_ns)地址處,在游標放在在該函式處:
然後按x,彈出引用搜索框


在搜尋框裡,找到sub_c02b9ff8(proc_pid_status)地址對應的函式,雙擊它,如果IDA沒有分析出該函式,就進行以下操作:按shift+f12,搜尋TracerPid,找到以下項
雙擊它,看到
再雙擊【DATA XREF: sub_c02b9ff8+190】,IDA就能分析出sub_c02b9ff8函數了,然後重新搜尋sub_c01b083c的引用。找到後,雙擊它,得以下圖:
經本人分析得到的修改方法是把MOVEQ R10, R0替換為MOV R10, #0,機器碼00 A0 A0 01 替換為 00 A0 A0 E3  

指令的檔案偏移為(C02BA568-C0008000=2B2568) (使用010editor修改)

及把BL sub_C01B083C替換為MOV R0, #0,機器碼 AF DB FB EB 為00 00 A0 E3,

指令的檔案偏移為(C02BA578-C0008000=2B2578)|(原文中錯誤的地方)

三、  刷回手機刷回前需要先打包boot.img檔案使用命令壓縮成z.gz:gzip -n -f -9 z

三、使用010editor將z.gz的二進位制資料覆蓋到原kernel檔案的1F 8B 08 00處的位置(新的z.gz檔案必須比原z.gz檔案小,並且回寫回去時不能改變原kernel檔案的大小及修改原kernel檔案後面的內容,否則會很麻煩),這時得到了kernel檔案。

注:這個地方可以新建一個用010editor 新建hex檔案  把 原kernel檔案1F 8B 08 00處一起的資料複製到 新檔案裡 然後把 z.gz的資料新增複製到 新檔案裡 ,這時候 比對 原kernel和新檔案

把原kernel檔案中 多的資料 一個位元組不少的賦值到新的檔案中,這樣就組成新的 kernel 檔案 新檔案和原kernel一樣大。把原kernel檔案刪除 把新檔案重新命名為kernel

執行命令bootimg --repack-bootimgbasecmdlinepage_sizepadding_size

其中上述命令中的黑體部分為包命令的輸出值。得到boot.img檔案。手機重啟進入刷機模式,然後,執行命令fastboot flash boot boot.img。完成刷機後,重新開機,就大功告成了。

四、  還原磚頭刷核心,不免會有刷成磚頭的情況。使用步驟1中提取到的原版boot.img,解包後會被命名為 bootold.img 在刷機模式下,執行fastboot flash boot bootold.img就還原系統了。

所以工具下載地址 http://pan.baidu.com/s/1bo8RUmN