這篇文章主要介紹“Hook的定義是什么”,在日常操作中,相信很多人在Hook的定義是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Hook的定義是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷,提供成都網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營(yíng)銷、小程序開(kāi)發(fā)、公眾號(hào)商城、等建站開(kāi)發(fā),成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢(shì)。
Hook 技術(shù)又叫做鉤子函數(shù),簡(jiǎn)單來(lái)說(shuō),就是把系統(tǒng)的程序拉出來(lái)變成我們自己執(zhí)行代碼片段。今天小編用三分鐘簡(jiǎn)述Hook,讓大家了解Hook技術(shù)。
1、 Hook的定義
Hook,鉤子。勾住系統(tǒng)的程序邏輯。在某段SDK源碼邏輯執(zhí)行的過(guò)程中,通過(guò)代碼手段攔截執(zhí)行該邏輯,加入自己的代碼邏輯。
Hook 簡(jiǎn)單類似網(wǎng)絡(luò)傳輸中的中間人攔截,我攔截APP中的原始方法,自己定義一個(gè)方法,替換原始的東西,實(shí)現(xiàn)我不可描述的目的,大白話就是這樣,但是實(shí)際過(guò)程和應(yīng)用還是比較復(fù)雜的。
常見(jiàn)的使用場(chǎng)景,舉幾個(gè)栗子:
App登錄劫持,一般用戶手動(dòng)點(diǎn)擊“登錄”按鈕才會(huì)將用戶名和密碼信息發(fā)送至服務(wù)器端去驗(yàn)證賬號(hào)與密碼是否正確。這樣就很簡(jiǎn)單了,居心叵測(cè)的人只需要找到開(kāi)發(fā)者在使用EditText控件的getText方法后進(jìn)行網(wǎng)絡(luò)驗(yàn)證的方法,Hook該方法,就能劫持到用戶的賬戶與密碼了。
App注入廣告,app 啟動(dòng)的時(shí)候加載 HomeActivity 肯定要執(zhí)行onCreate 方法, 劫持首頁(yè)的onCreate方法,在里面注入彈窗廣告,獲得廣告收入。App數(shù)據(jù)篡改,比如玩一款游戲App ,修改里面額金幣數(shù),可以反編譯App ,找到具體的類和方法,插入自己的方法就可以實(shí)現(xiàn)。聽(tīng)起來(lái)很牛b,但是要實(shí)現(xiàn),需要掌握很多的逆向技術(shù)和其它需要技術(shù),可是非常不易的。
2、實(shí)用價(jià)值
Hook是中級(jí)開(kāi)發(fā)通往高級(jí)開(kāi)發(fā)的必經(jīng)之路。如果把谷歌比喻成安卓的造物主,那么安卓SDK源碼里面就包含了萬(wàn)事萬(wàn)物的本源。中級(jí)開(kāi)發(fā)者,只在利用萬(wàn)事萬(wàn)物,浮于表層,而高級(jí)開(kāi)發(fā)者能從本源上去改變?nèi)f事萬(wàn)物,深入核心。
最有用的實(shí)用價(jià)值: hook是安卓面向切面(AOP)編程的基礎(chǔ),可以讓我們?cè)诓蛔兏袠I(yè)務(wù)的前提下,插入額外的邏輯。這樣,既保護(hù)了原有業(yè)務(wù)的完整性,又能讓額外的代碼邏輯不與原有業(yè)務(wù)產(chǎn)生耦合。
3、前置技能
Java反射
熟練掌握類Class,方法Method,成員Field的使用方法源碼內(nèi)部,很多類和方法都是@hide的,外部直接無(wú)法訪問(wèn),所以只能通過(guò)反射,去創(chuàng)建源碼中的類,方法,或者成員.
閱讀安卓源碼的能力
Hook的切入點(diǎn)都在源碼內(nèi)部,不能閱讀源碼,不能理清源碼邏輯,則不用談hook. 其實(shí)使用AndroidStudio來(lái)閱讀源碼有個(gè)坑,有時(shí)候會(huì)看到源碼里面 “一片飄紅”,看似是有什么東西沒(méi)有引用進(jìn)來(lái),其實(shí)是因?yàn)橛胁糠衷创a沒(méi)有對(duì)開(kāi)發(fā)者開(kāi)放,解決起來(lái)很麻煩, 所以,推薦從安卓官網(wǎng)下載整套源碼,然后使用 SourceInsight 查看源碼。 如果不需要跳來(lái)跳去的話,直接用安卓源碼網(wǎng)站一步到位。
4、hook通用思路
無(wú)論多么復(fù)雜的源碼,我們想要干涉其中的一些執(zhí)行流程,最終的殺招只有一個(gè): “偷梁換柱”。而 “偷梁換柱”的思路,通常都是一個(gè)套路:根據(jù)需求確定要hook的對(duì)象尋找要Hook的對(duì)象的持有者,拿到要hook的對(duì)象(持有:B類 的成員變量里有 一個(gè)是A類的對(duì)象,那么B就是A的持有者)定義“要Hook的對(duì)象”的代理類,并且創(chuàng)建該類的對(duì)象使用上一步創(chuàng)建出來(lái)的對(duì)象,替換掉要Hook的對(duì)象。
到此,關(guān)于“Hook的定義是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!