前面一篇文章《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"具帮,
- 應(yīng)對這種反調(diào)做的最多的就是反編譯app博肋,將屬性值修改為“true”低斋;
- 但是每次這樣操作未免麻煩,有大神給出了mprop工具匪凡,只需將可執(zhí)行文件復(fù)制進(jìn)手機(jī)里膊畴,運(yùn)行
./mprop ro.debuggable 1
即可,但是這個工具修改的是內(nèi)存中的值病游,也就是說并不是永久的唇跨,每次重啟還得再改一次; -
其實(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操作,那就順便把這個功能也給改了讽挟。