【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )
文章目錄
- 一、GOT 表攔截與插樁攔截
- 二、插樁攔截簡介
- 三、插樁攔截涉及的 ARM 和 x86 中的跳轉指令
一、GOT 表攔截與插樁攔截
函數攔截有 222 種方式 :
- 使用 GOT 表進行函數攔截 : 修改 GOT 表實現函數攔截 ;
- 插樁攔截 : 該方法就是 在實際被調用的函數中添加跳轉代碼實現函數攔截 ;
在 【Android 逆向】函數攔截原理 ( 通過修改 GOT 全局偏移表攔截函數 | 通過在實際被調用的函數中添加跳轉代碼實現函數攔截 ) 博客中分析到 , " 使用 GOT 表進行函數攔截 " 方法不能保證 100% 成功 , 插樁攔截 可以實現 100% 攔截成功率 ;
" 插樁攔截 " 由于需要 修改代碼 , 可能會 被反調試工具發現 , 如果是游戲 , 賬號估計就涼了 ; 反調試工具 不可能監控所有的函數 , 一個應用的函數個數都是以萬進行計算的 ;
二、插樁攔截簡介
插樁攔截 : 在要 調用的實際函數 的入口處 , 寫入跳轉代碼 , 跳轉到 我們自定義的 攔截函數中 , 在攔截函數中 , 執行 處理函數 , 處理函數再次調用實際函數 或 自己執行一些其它函數 ;
三、插樁攔截涉及的 ARM 和 x86 中的跳轉指令
插樁攔截 時 , 在 實際函數 入口處寫入的 跳轉代碼 就是 匯編中的 跳轉指令 ;
跳轉指令 可以理解為 " 指令 " 或 " 機器碼 " , 指令是人看到的 匯編指令 , 機器碼是給 CPU 執行的 二進制機器碼 ; 二者是等效的 ;
x86 架構下的跳轉指令 : 下面的二進制數都是十六進制數 ; 323232 位指令 ;
E9 00 00 00 00 , JMP target ;
JMP 是強制跳轉指令 , E9 是對應的機器碼 ;
ARM 架構下的跳轉指令 : 下面的二進制數都是十六進制數 ; 323232 位指令 ;
04 F0 1F E5 00 00 00 00 , B target ;
B 指令是無條件跳轉指令 , 04 F0 1F E5 是對應的機器碼 ;
x86 架構是 復雜指令集 , ARM 架構是 精簡指令集 , 從上面的機器碼可以看出區別 , x86 架構中指令有 111 字節 , ARM 架構中 指令只有 444 字節 ;
總結
以上是生活随笔為你收集整理的【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】函数拦截 ( G
- 下一篇: 【错误记录】Visual Studio