逆向手機核心,添加調試支援和反調試,手機核心添加調試

來源:互聯網
上載者:User

逆向手機核心,添加調試支援和反調試,手機核心添加調試

 

0x00前言
  一個安卓應用可以被調試的條件是應用AndroidManifest.xml顯示指定android:debuggable="true",如果沒有設定android:debuggable的值,則預設android:debuggable="false",所以發布的應用大部分都是不可調試的,如果要調試,則需要解包,改屬性然後重打包,這樣非常麻煩,而且效率低。第二個條件是核心設定檔default.prop的屬性ro.debuggable=1,這樣就不用管應用裡面設定的屬性了,看來是一個比較好的解決方案,我們只要修改一次核心就可以一勞永逸了。
  安卓應用程式常用的一種反調試手段是查看/proc/[pid]/status下的資訊,如果處於調試狀態,那麼TracerPid的值就是調試進程的Pid,那麼程式就會做出相應的行為來反調試。

 

0x01提取核心

查看boot所在的分區

ls -l /dev/block/platform/msm_sdcc.1/by-name

提取核心

dd if= /dev/block/mmcblk0p17 of=/data/local/boot.imgadb pull /data/local/boot.img boot.img

解包核心

bootimg.exe --unpack-bootimg

解包之後的檔案結構

 

0x02修改ro.debuggable

修改initrd/default.prop檔案中的ro.debuggable=1

 

0x03修改kernel檔案

複製一份kernel為zImage.gz方便後面的修改

用010editor開啟zImage.gz尋找十六進位1F 8B 08 00,刪除前面的所有資料,使檔案變成一個標準的gzip壓縮檔,這樣就可以使用gunzip解包了。

 

gunzip zImage.gz

解包產生的zImage就是核心二進位檔案了。

用IDA開啟檔案,設定處理器類型為ARM Little-endian

設定ROM start address和Loading address為0xc0008000

在安卓root終端關閉符號屏蔽

echo 0 > /proc/sys/kernel/kptr_restrict

查看proc_pid_status和__task_pid_nr_ns函數地址

cat /proc/kallsyms | grep proc_pid_status

cat /proc/kallsyms | grep __task_pid_nr_ns

為什麼要尋找這兩個函數呢,我們根據源碼/kernel/msm/fs/proc/array.c來看一下

函數proc_pid_status內聯了task_state函數,在task_state內嵌函式裡面通過函數__task_pid_nr_ns 擷取到tracerpid並且列印出來。

在IDA中按快速鍵g跳轉到函數c0187f88(__task_pid_nr_ns)函數處,按x出來引用搜尋方塊,在其中找到函數c02764b8(proc_pid_status)

查看局部的調用為

可以看到調用的結果會儲存在R11中,所以修改命令MOV R11, R0為MOV R11, #0,機器碼為00 B0 A0 E3,檔案的位移為(0xC02765F8-0xC0008000= 26E5F8)

重新壓縮zImage

gzip -n -f -9 zImage

用010editor添加原kernel的首部和尾部位元據到檔案zImage.gz(新的zImage.gz檔案必須比原zImage.gz檔案小,並且回寫回去時不能改變原kernel檔案的大小及修改原kernel檔案後面的內容,否則會很麻煩),這時得到了kernel檔案。

添加首部3DEB長的資料

先佔位,然後複製首部的資料到頭部

添加尾部資料

替換原先的kernel檔案,重建新的boot.img

bootimg.exe --repack-bootimg

 

0x04刷入新的核心

手機重啟到bootloader模式

adb reboot bootloader

刷入新的boot

fastboot flash boot boot-new.img

重啟

fastboot reboot

如果手機開不了機,那麼重新刷回老的核心

fastboot flash boot boot-old.img

 

0x05小結

  工欲善其事,必先利其器,有一個基本的調試環境對逆向學習是非常有協助的。因為很多的手機產商沒有將手機系統原始碼放出,所以只能採取逆向核心的方式進行修改,如果手機廠商有把系統的原始碼放出,那麼從源碼編譯將會更具有修改性,可以定製更多的核心特性。如果手機有開源的安卓系統支援,比如lineage os或者CM的支援,也可以選擇這些優秀的開原始碼來編譯。

 

參考:

逆向修改手機核心,繞過反調試

Android逆向之旅—應用的”反調試”方案解析(附加修改IDA調試連接埠和修改核心資訊)

[原創]支援windows下打包boot/recovery.img的bootimg.exe,且支援自動解包/打包dt.img,加入MTK機型支援

Android反調試筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.