錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務,錦州廣廈維修電腦,公司IT外包服務
topFlag1 設為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務項目 服務報價 維修流程 IT外包服務 服務器維護 技術文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務技術文章
逆向修改內核,繞過TracerPID反調試

作者: 527900417  日期:2018-05-18 08:37:28   來源: 轉載

前言

上次DDCTF結束后,和BinCrack師傅交流,他提到用了自己編譯的安卓內核,直接修改源碼更改了TracerPID,之后在國賽也遇到了對status的檢測,雖然可以修改內存繞過(ref 4),但是還是想試一試把內核patch掉。查閱了很多資料后,大概有三種方法:
1.修改源碼,重新編譯內核 (ref 2)
2.逆向修改內核文件,patch二進制文件
3.hook fopen 函數,檢測/proc/pid/status調用 (ref 3)
比較了幾種方法的工作量和自己的基礎知識(并沒有),選擇了第二種方法,以看雪的一篇文章最為典型,但由于機型和版本的區別,遇到了幾個坑,找到了一個較為通用的方法。
以下工作基于samsung note3 9008,armeabi-v7a2,第三方官改rom,5.0,twrp rec

準備工作

boot.img提取

首先確保有root權限
先找到目錄
FrjzAn1q1REOE1uVjeqAAdRNZ_F7
將boot導出為boot.img      

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

準備bootimg-tools工具

bootimg-tools工具是一款基于mkbootimg開發的boot.img 解包重打包C語言工具,github地址:https://github.com/pbatard/bootimg-tools
git clone https://github.com/pbatard/bootimg-tools.git
下載后進入bootimg-tools目錄,執行make 命令編譯該項目,在 makebootimg目錄下生成了相應的二進制執行文件。
Fn45BYYDxqbHlZYJM58anzcVoN0M
解開boot.img
FnUZUhSF5S9Pzn7fK2Qdd5RIexvb

注:使用其他工具一直提取失敗,最后回頭來看其實并不重要,如果熟悉boot.img格式的話,手動提取也可以。但是三星的這個文件,試了很多工具,也只有上面提到的這個工具能提取出來,但打包有些問題,后面有相應的解決方法。

提取原始zImage

將kernel文件復制為文件名為zImage.gz的文件,并使用010editor查找十六進制1f 8b 08 00,找到后把前面的數據全刪掉,使文件變成標準的gzip壓縮文件,這樣子就可以使用gunzip解壓了。
命令:gunzip zImage.gz
生成文件就是祼二進制文件zImage。
FkC2yIHjESZO3I01isl_G-oNR0dL

內核修改

zImage文件可以直接使用IDA(推薦6.8,7.0的話需要自己嘗試定位函數)去打開,但需要設置參數。
FoOzIFTNngyh84Kugw9HdBHOq2JG
在上圖,設置處理器類型為ARM Little-endian,點ok后,彈下圖
FiJkPZPoiGsNUOvBy9f8XebfF5BY
在ROM start address和Loading address填0xc0008000,點ok,沒有函數名,不方便定位代碼。

先回到root下的adb shell,輸入命令:
echo 0 > /proc/sys/kernel/kptr_restrict
關閉符號屏蔽
再輸入以下命令查看這兩函數的地址

echo 0 > /proc/sys/kernel/kptr_restrict cat /proc/kallsyms |grep proc_pid_status cat /proc/kallsyms |grep __task_pid_nr_ns

FtRMzOapuBcKrx3TeW9iF0CcGDSp
回到IDA,按g跳轉到c0964058(__task_pid_nr_ns)地址處,在光標放在在該函數處:
FmrtCdEToGBDhoGtwZOfRcK-HV-J
然后按x,彈出引用搜索框,找到sub_c0888ac0(這里由于解析程度不同,顯示和我的會不一樣,但是重點在于sub_c0888ac0),雙擊進入。
FmxiBVfo80w0b-WnOCbdwIoOGqCo
如果IDA沒有分析出該函數,就進行以下操作:按shift+f12,搜索TracerPid,找到以下項
Ft9ttPWjfE0jsR2E2jYMqMZEw-Wf
雙擊
FkP-Bo421kItvfV_cDQsHlkpI3cN
我這里是沒有解析出來引用函數的,如果有引用函數,跟進去就可以解析出來sub_c0888ac0了。
在這里,我們強制解析sub_c0888ac0函數,按g輸入c0888ac0,如果ida沒有識別為函數,按p強制解析。回到c0964058,按x尋找sub_c0888ac0。
跟進去:
FvuNVtEkrbS316dOCQ7wmTEcDvtA
根據其他文章的分析和我的實踐,得到的修改方法是把MOVEQ R10, R0替換為MOV R10, #0,機器碼為00 A0 A0 E3,指令的文件偏移為(C0889110-C0008000),及把下面第三行的BL sub_C0964058替換為MOV R0, #0,機器碼為00 00 A0 E3,指令的文件偏移為(C0889120-C0008000)。根據偏移地址在文件里使用010修改或者使用keypatch插件直接修改。
內核文件修改成功。

另,在更改的過程中聯想到直接修改TracerPid的格式字符串值,因為不太熟悉,感覺可能會導致占位符后移而報錯,就沒考慮這個思路,之后也發現確實可以這樣做。原始格式化字符串內容為:\t%s\nTgid:\t%d\nPid:\t%d\nPPid:\t%d\nTracerPid:\t0\t\nUid:\t%d\t%d\t%d\t%d\nGid:\t%d\t%d\t%d\t%d\n
這里應該用到了C語言中的占位符%d,來進行值的填充,那么我們可以把TracerPid那一項的占位符%d,改成'0',但是'%d'是兩個字符,所以我們可以改成'00',或者'0\t'(十六進制30 09),或者'0\n';只要保證修改后的字符串內容對齊就好。這樣TracerPid這一項的值占位符就失效了,值永遠都是0了。

打包boog.img

使用之前的解包時提供的打包方法,打包后刷入失敗..
最后探索到的方法是直接修改原boot.img
使用gzip -n -f -9 zImage壓縮修改后的內核裸文件,壓縮后會比原來的小,必須比原來的文件小才可以。
得到zImage.gz,我們使用010分別打開zImage.gz和boot.img,搜索1F 8B 08 00。
按下insert鍵,將010改為overwrite,注意這里必須是覆蓋,這樣就不用考慮插入后大小的問題了,把zImage.gz的內容復制到boot.img的相應位置。
FnAy5kaViLN66ZSB875MZC85tmkc
修改完成,使用twrp rec刷入鏡像,選擇刷入boot。重啟。

調試查看

使用ida調試so文件,查看status文件。
FhnP1YDYiijeHyCo73Mx6Wabyqqj
更改后
FlFP8GeyEiGU_L6ar2KSlmMvY35m
更改成功。

變磚補救

但愿還是能夠一次成功的,刷內核失敗無限重啟或者不能開機也比較正常。在嘗試過程中失敗了三次,只要之前備份了原始的boot.img,變磚之后重新進入rec,刷入原始的boot.img就好。
如果是使用odin刷入的話,需要將boot.img打包為tar文件才可以。

ref
1.逆向修改手機內核,繞過反調試
2.Android系統內核編譯及刷機實戰 (修改反調試標志位)
3.基于HOOK的Anti-debug調用點trace和Anti-anti
4.Android動態調試和ptrace反調試之讀取進程status文件



作為一只菜鳥,搞了好久才將內核更改成功,斗膽與各位分享自己的經歷,希望各位大神多指點。



熱門文章
  • 機械革命S1 PRO-02 開機不顯示 黑...
  • 聯想ThinkPad NM-C641上電掉電點不...
  • 三星一體激光打印機SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數和判...
  • IIS 8 開啟 GZIP壓縮來減少網絡請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機始終停留在開機界面...
  • 常見打印機清零步驟
  • 安裝驅動時提示不包含數字簽名的解...
  • 共享打印機需要密碼的解決方法
  • 圖解Windows 7系統快速共享打印機的...
  • 錦州廣廈電腦上門維修

    報修電話:13840665804  QQ:174984393 (聯系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務區域: 遼寧錦州市區
    主要業務: 修電腦,電腦修理,電腦維護,上門維修電腦,黑屏藍屏死機故障排除,無線上網設置,IT服務外包,局域網組建,ADSL共享上網,路由器設置,數據恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    主站蜘蛛池模板: 亚洲Av无码精品色午夜| 国产成人精品无码专区| 亚洲国产成人精品无码区在线观看| 亚洲av无码不卡私人影院| 久久午夜无码鲁丝片直播午夜精品| 亚洲日韩国产精品无码av| 午夜无码一区二区三区在线观看| 亚洲av永久无码精品漫画| 一本大道无码av天堂| 亚洲AV无码久久精品狠狠爱浪潮 | 亚洲熟妇无码av另类vr影视 | 中文字幕无码一区二区免费| 日韩一区二区三区无码影院 | 无码中文人妻视频2019| 无码专区6080yy国产电影| 最新无码专区视频在线| 亚洲AV无码精品色午夜果冻不卡 | AV无码久久久久不卡蜜桃| 亚洲AV中文无码字幕色三| 精品久久久无码中文字幕边打电话| 丰满熟妇乱又伦在线无码视频| 日韩精品中文字幕无码专区| 人妻精品久久无码专区精东影业| 国产av无码久久精品| 日韩精品无码人妻免费视频| 亚洲youwu永久无码精品 | 国产aⅴ激情无码久久久无码| 亚洲色在线无码国产精品不卡| 亚洲中文字幕无码久久2017 | 无码人妻精品一区二区三区99性 | 中文字幕无码久久久| 国产免费午夜a无码v视频| 少妇爆乳无码专区| 亚洲日韩精品无码专区加勒比| 无码少妇精品一区二区免费动态| 人妻系列AV无码专区| 亚洲精品午夜无码电影网| 亚洲精品无码久久一线| 亚洲精品午夜无码电影网| 无码人妻久久久一区二区三区| 亚洲av永久无码精品秋霞电影影院|