<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                #### **Root的危害** * Android通過用戶隔離來保障每個應用的安全 * 每個App都可以申請Root權限 * Root后,你的App就可以被其他App訪問 * 內存被篡改 * 行為被監控 * …… :-: ![](https://box.kancloud.cn/9251473e986a4a6f362f52abf73ad3be_616x180.jpg) 圖1 :-: ![被注入后的Chrome進程](https://box.kancloud.cn/27e0ddcca9ddd730b752d4aaf27d284f_883x662.jpg) 圖2 被注入后的Chrome進程 #### **App劫持** **什么是App劫持?** * App劫持:App的執行流程被重定向 * 通常通過“注入+Hook”來實現 :-: ![APP劫持示例](https://box.kancloud.cn/b7b202f9092d7664da7015a7de9cc433_837x866.jpg) 圖3:APP劫持示例 **App劫持過程** * Step1: 逆向分析App的邏輯 * Step2: 注入模塊到App進程中 * Ptrace * Dlopen * Step3: Hook * Java Hook * Native(so) Hook :-: ![注入Hook過程](https://box.kancloud.cn/92a7dff9083833b1de8d396fdb131e50_1128x966.jpg) 圖4:注入Hook過程 #### **Hook詳解** **具有Hook行為的App** * 病毒 * 數量較少 * 開發hook模塊成本較高 * 需要root * 安全軟件 * 主動防御 #### **Hook類病毒** Wind Seeker ![](https://box.kancloud.cn/0649af635ffbdbd73d5ddd712260e792_241x429.jpg) 代碼示例: ![](https://box.kancloud.cn/b06a77cc8864f0f5a469ee9d4af24832_623x269.jpg) ![](https://box.kancloud.cn/74c84a22367ae8e5a46086f4c903b42a_560x228.jpg) #### **Hook類型** * Java Hook * Static Field Hook:靜態成員hook * Method Hook:函數hook * Native So Hook * GOT Hook:全局偏移表hook * SYM Hook:符號表hook * Inline Hook:函數內聯hook #### **Java靜態成員Hook** * 修改Java Class的靜態成員的值 * 通過反射 ~~~ Class<?> cls = Class.ForName(“”) Field fld = cls.getDeclaredField(“”) ~~~ * 為什么是靜態成員static field? * 反射只能得到Class,不能得到object **Java static field hook示例** :-: ![](https://box.kancloud.cn/4149f3d409ae50d5c76c427525560ae8_825x698.jpg) 圖5 Java static field hook示例 #### **Java函數hook** * 修改Java類的某函數指向自定義函數 * Dalvik:Java Method -> Native Method * ART:Method Inline Hook **Dalvik:** * Java函數在內存中指向的是字節碼:Method->insns * 字節碼inline hook?復雜! * 將Java函數轉為Native函數 * Method->nativeFunc 指向So中的函數 :-: ![Java函數hook之Dalvik](https://box.kancloud.cn/2f0a987b50cbb700449c8d0d07e083af_305x114.jpg) 圖6 Java函數hook之Dalvik #### **So GOT Hook** * 修改App加載的so中Got表里函數的絕對地址 * GOT * Global Offset Table:全局偏移表 * 存儲了依賴庫so的函數的絕對地址 * PLT * Procedure Linkage Table:過程鏈接表 * 將當前so內對依賴庫函數的相對調用轉移到Got中的絕對地址 **正常執行流程** ![](https://box.kancloud.cn/4d849559709c5a05a5f253ae5cdf9270_871x248.jpg) **Hook后執行流程** ![](https://box.kancloud.cn/1966201f3b2b682ae9a2312730594c2a_931x392.jpg) #### **So SYM Hook** * 修改App加載的So的符號表里的函數地址 * 缺點: * 必須在so加載前hook **So SYM hook流程** ![](https://box.kancloud.cn/1a76f82e4dbd278e4464012dcccc0526_918x765.jpg) #### **So Inline Hook** * 修改App加載的So的函數里的代碼 * 跳轉有范圍限制,需要跳板 * 需要兼容arm和thumb指令 * 優點:覆蓋面廣 * 缺點:難度高,不穩定 **So inline Hook流程** ![](https://box.kancloud.cn/501f006bb96d7e9fc0c2beb94274d97a_1103x899.jpg) #### **Hook Zygote** * 全局hook的方法: * Hook當前已運行的所有App進程,監聽新進程 * Hook Zygote進程 * App進程是有Zygote孵化出來的 * 如果Zygote被注入/hook,其他App都將被注入/hook **Hook前** :-: ![](https://box.kancloud.cn/e084b31075719453661f0f800551ccbc_823x537.jpg) 圖7 HookZygote前 **Hook后** :-: ![](https://box.kancloud.cn/db4cd58c7458a4d57cb27304870c5de1_841x517.jpg) 圖8 HookZygote前 #### **流行的Hook框架** * Xposed * http://repo.xposed.info/ * Cydia Substrate * http://www.cydiasubstrate.com/ * ADBI/DDI * https://github.com/crmulliner/adbi * https://github.com/crmulliner/ddi * frida Hook框架 * https://www.frida.re/ Frida是一款基于python + javascript 的hook框架,通殺android\ios\linux\win\osx等各平臺。由于是基于腳本的交互,因此相比xposed和substrace cydia更加便捷 **流行的Hook框架:Xposed** * 目前使用最廣的Android平臺開源hook框架 * 替換App_Process * Java函數轉為Native函數 * 在被hook函數執行時,調用BeforeHook/AfterHook接口 * 添加/刪除hook需要重啟zygote **流行的Hook框架:Cydia Substrate** * 兼容iOS和Android * 在iOS平臺使用廣泛 * 需要重啟Zygote **流行的Hook框架對比** ![](https://box.kancloud.cn/df19e3b53c72f40d6afc8ed44d91e0d1_964x596.jpg) ### **App劫持檢測/修復** #### **Hook檢測/修復:Java Hook** * 靜態成員hook * 檢測:根據變量的class判定是否屬于當前App的classes.dex * 修復:無法修復:無法獲得原始值 :-: ![Hook檢測或修復:Java靜態成員Hook](https://box.kancloud.cn/0e5888bd52d6ae1478741f8a8de10dd7_889x389.jpg) 圖9 Hook檢測或修復:Java靜態成員Hook * 函數hook * Dalvik:Java->Native * 檢測: * 根據nativFunc找到對應的BridgeFunction,判定其是否在libdvm.so內存區間; * 判斷insns指向的so內存區間 * 修復:無法修復,Native->Java不可逆 :-: ![](https://box.kancloud.cn/06d46e48243f43f0696b981e4303a8e8_1223x347.jpg) 圖10 Hook檢測/修復:Java 函數Hook #### **注入修復** * 為什么要修復注入? * 有可能只注入、不hook:監聽線程 * Hook:摘除鉤子 * 修復注入的方法 * munmap * 必須先將hook修復 * 不穩定,容易crash #### **修復Zygote** * 如何保證Zygote進程不被hook? * Init啟動Zygote進程 * 在hook之前就將Zygote保護起來 * 怎么保證在其他App之前啟動? * 學習Xposed,替換app_process? * 需要重啟 * 不夠穩定,兼容性 * 對所有App有效,可配性不高 #### **App劫持修復:結論** * Hook摘除不穩定,容易crash * 三個“基本”結論: * Hook基本無法修復 * 注入基本無法剔除 * Zygote基本無法保護 #### **離我的App遠點!——創建可信App運行環境** **創建App可信運行環境** * 創建可信的Zygote進程 * 保護可信的Zygote * 讓App從干凈的Zygote進程fork **一、創建可信Zygote進程** * Step1:啟動一個新的Zygote進程 * 編譯自定義app_process * 無需重啟 :-: ![](https://box.kancloud.cn/b4a404fe2c9449871f902b81e4cd7a8b_1284x389.jpg) 圖11 啟動一個新的Zygote進程 **二、保護可信Zygote進程** * Step2: 保護可信Zygote * 反調試/反注入 * Ptrace_me * 雙進程保護 * 其他保護 :-: ![](https://box.kancloud.cn/73a37d6e506e4689639d1d54a073f8e2_1679x389.jpg) 圖12 保護可信Zygote進程 **三、控制可信Zygote出口** * 通過可信Zygote fork自定義App * 重定向ActivityManagerService發送的socket client * 控制進程 * 需要保護的App:發送給可信Zygote * 無需保護的App:發送給舊Zygote :-: ![](https://box.kancloud.cn/7118556f0f00e87ee320d027a6b6de7c_1679x389.jpg) 圖13 控制可信Zygote出口 示例:整體流程 ![](https://box.kancloud.cn/d5861483e6c0ad63fea2be3ae0374b24_1553x762.jpg) #### **參考文章** [插件化知識詳細分解及原理 之代理,hook,反射](http://blog.csdn.net/yulong0809/article/details/56842027) [知識總結之 插件化學習 Hook系統方法分析](http://blog.csdn.net/cankingapp/article/details/73292035) [Android插件化原理解析——Hook機制之動態代理](https://www.jianshu.com/p/b30ea19c444b) [在Android中實現Hook機制的實驗](http://blog.csdn.net/zoudifei/article/details/49871065) [淺談android hook技術](https://sec.xiaomi.com/article/23) [Android安全技術揭秘與防范](http://www.java1234.com/a/javabook/andriod/2017/0920/8971.html) [Android應用劫持攻與防](http://www.java1234.com/a/javabook/andriod/2017/0908/8865.html) [《Android安全技術揭秘與防范》目錄—導讀 ](https://yq.aliyun.com/articles/99909?spm=5176.11065265.1996646101.searchclickresult.aa2a61pRyf47)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看