這篇文章主要介紹“Hook的定義是什么”,在日常操作中,相信很多人在Hook的定義是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Hook的定義是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Hook 技術又叫做鉤子函數,簡單來說,就是把系統的程序拉出來變成我們自己執行代碼片段。今天小編用三分鐘簡述Hook,讓大家了解Hook技術。
1、 Hook的定義
Hook,鉤子。勾住系統的程序邏輯。在某段SDK源碼邏輯執行的過程中,通過代碼手段攔截執行該邏輯,加入自己的代碼邏輯。
Hook 簡單類似網絡傳輸中的中間人攔截,我攔截APP中的原始方法,自己定義一個方法,替換原始的東西,實現我不可描述的目的,大白話就是這樣,但是實際過程和應用還是比較復雜的。
常見的使用場景,舉幾個栗子:
App登錄劫持,一般用戶手動點擊“登錄”按鈕才會將用戶名和密碼信息發送至服務器端去驗證賬號與密碼是否正確。這樣就很簡單了,居心叵測的人只需要找到開發者在使用EditText控件的getText方法后進行網絡驗證的方法,Hook該方法,就能劫持到用戶的賬戶與密碼了。
App注入廣告,app 啟動的時候加載 HomeActivity 肯定要執行onCreate 方法, 劫持首頁的onCreate方法,在里面注入彈窗廣告,獲得廣告收入。App數據篡改,比如玩一款游戲App ,修改里面額金幣數,可以反編譯App ,找到具體的類和方法,插入自己的方法就可以實現。聽起來很牛b,但是要實現,需要掌握很多的逆向技術和其它需要技術,可是非常不易的。
2、實用價值
Hook是中級開發通往高級開發的必經之路。如果把谷歌比喻成安卓的造物主,那么安卓SDK源碼里面就包含了萬事萬物的本源。中級開發者,只在利用萬事萬物,浮于表層,而高級開發者能從本源上去改變萬事萬物,深入核心。
最有用的實用價值: hook是安卓面向切面(AOP)編程的基礎,可以讓我們在不變更原有業務的前提下,插入額外的邏輯。這樣,既保護了原有業務的完整性,又能讓額外的代碼邏輯不與原有業務產生耦合。
3、前置技能
Java反射
熟練掌握類Class,方法Method,成員Field的使用方法源碼內部,很多類和方法都是@hide的,外部直接無法訪問,所以只能通過反射,去創建源碼中的類,方法,或者成員.
閱讀安卓源碼的能力
Hook的切入點都在源碼內部,不能閱讀源碼,不能理清源碼邏輯,則不用談hook. 其實使用AndroidStudio來閱讀源碼有個坑,有時候會看到源碼里面 “一片飄紅”,看似是有什么東西沒有引用進來,其實是因為有部分源碼沒有對開發者開放,解決起來很麻煩, 所以,推薦從安卓官網下載整套源碼,然后使用 SourceInsight 查看源碼。 如果不需要跳來跳去的話,直接用安卓源碼網站一步到位。
4、hook通用思路
無論多么復雜的源碼,我們想要干涉其中的一些執行流程,最終的殺招只有一個: “偷梁換柱”。而 “偷梁換柱”的思路,通常都是一個套路:根據需求確定要hook的對象尋找要Hook的對象的持有者,拿到要hook的對象(持有:B類 的成員變量里有 一個是A類的對象,那么B就是A的持有者)定義“要Hook的對象”的代理類,并且創建該類的對象使用上一步創建出來的對象,替換掉要Hook的對象。
到此,關于“Hook的定義是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。