1. 程式人生 > >Hook實現外掛化的三個選項題,你Hook住了嗎

Hook實現外掛化的三個選項題,你Hook住了嗎

最近在學習Hook技術,如果你對Hook之前有所瞭解,不妨做一下Hook的3個相關題目!不怎麼了解也沒關係,這裡也給你普及一下!

什麼叫Hook?

Android 作業系統中系統維護著自己的一套事件分發機制。應用程式,包括應用觸發事件和後臺邏輯處理,也是根據事件流程一步步地向下執行。Hook是「鉤子」的意思,就是在事件傳送到終點前截獲並監控事件的傳輸,像個鉤子鉤上事件一樣,並且能夠在鉤上事件時,處理一些自己特定的事件。

通過Hook, 使它能夠將自身的程式碼「融入」被勾住(Hook)的程式的程序中,成為目標程序的一個部分。API Hook 技術是一種用於改變 API 執行結果的技術,能夠將系統的 API 函式執行重定向。在 Android 系統中使用了沙箱機制,普通使用者程式的程序空間都是獨立的,程式的執行互不干擾。

1.Hook技術與插樁技術實現外掛化下面描述的有哪些是對的[多選題]

A.插樁是通過that語法來實現載入的

B.hook是通過將外掛的dex合併到宿主中的dex陣列中去

C.hook 將兩個apk合成一個apk檔案進行載入

D. 插樁是通過ProxyActivity重寫了兩個方法gerResourse和getClassloader實現外掛載入

2.外掛中的到的Application是宿主中的Application嗎?

A.是的

B 不是的

3.LoadApk中的ClassLoader物件是什麼時候被賦值的

A App啟動時,在Application初始化時賦值的

B Activity啟動時,在Activity初始化時賦值

C Activity呼叫宣告週期onResume方法時,被賦值

D 以上都不是

關於問題的答案,在後臺回覆Hook即可。

關於Hook的初步理解

關於Hook技術,一般是通過反射來建立動態代理,替換系統的API,實現自己的邏輯。

Hook

比如通過Hook,來啟動外掛化的apk,其核心思想,是通過反射,將系統物件替換成我們建立的代理類物件,獲得這個IActivityManager物件,也是通過反射。

具體實現步驟如下:
  • 通過反射,拿到IActivityManager物件;
  • 自定義一個代理類的排程類,它要實現InvocationHandler的invoke方法;
  • 以IActivityManager為引數,建立排程類例項;
  • 以IActivityManager和排程類例項為引數,生成一個代理類的例項;
  • 用代理類的例項,替換第一步拿到的IActivityManager物件。
最近研究Hook技術的實現規劃
  • Hook的原則
  • 如何去找Hook點
  • Java 動態代理機制分析
  • App的啟動流程
  • 常用的 Hook 框架
  • 使用 Java 反射實現 API Hook
  • 動態代理技術Hook掉系統的AMS服務

關於Hook技術實現起來剛開始還是比較難的,需要一定的技術功底,尤其對原始碼比較熟悉。如果想繼續深造Android學習Hook技術,歡迎關注我終端研發部可以和我一塊學習!

總結

對於我們APP開發者來講,建議大家不要以市場行情的變化而受影響,堅持自己喜歡人認定的路線走下去,沉澱和進步!

如果對小程式和快應用感興趣的可以參考下面的文章

相信自己,沒有做不到的,只有想不到的

微信公眾號:終端研發部

技術

相關推薦

Hook實現外掛選項Hook

最近在學習Hook技術,如果你對Hook之前有所瞭解,不妨做一下Hook的3個相關題目!不怎麼了解也沒關係,這裡也給你普及一下! 什麼叫Hook? Android 作業系統中系統維護著自己的一套事件分發機制。應用程式,包括應用觸發事件和後臺邏輯處理,也是

新標準IEC62368-1第版時代來臨準備好

2018年10月4日,國際電工產品委員會IECEE正式釋出了第三版的資訊科技、視聽裝置和通訊裝置的安全標準IEC 62368-1:2018。 第三版標準將完全取代第二版標準IEC 62368-1:2014以及傳統的安全標準IEC 60950-1(資訊科技IET標

影響程式設計師生涯的錯誤觀念千萬不要犯!

程式設計師在社會上,到底是怎樣一個生活群體?是否能找到自己方向?其實,路一直都在那裡,只是你看不到而已! 當初的你,可能一直被一些技術牽著鼻子走,並不是自己在做著自己想做的,而是被技術推到了現在這樣子。想想有多少人對於自己將來要從事的職業和技術型別進行過深入思考和比較呢?當

現在有T1、T2、T3執行緒怎樣保證T2在T1執行完後執行T3在T2執行完後執行

這是個基礎的執行緒問題,主要是考核join方法的。不瞭解這個方法的話會感覺很懵逼。 假設現在有兩個執行緒A、B。如果在A的run方法中呼叫B.join(),表示A需要在B執行緒上面等待,也就是需要在B執行緒執行完成之後才能再次執行。瞭解這個概念之後,這個問題就很簡單了,java程式碼如下:

影響程式設計師生涯的錯誤觀念千萬不要犯

程式設計師在社會上,到底是怎樣一個生活群體?是否能找到自己方向?其實,路一直都在那裡,只是你看不到而已! 當初的你,可能一直被一些技術牽著鼻子走,並不是自己在做著自己想做的,而是被技術推到了現在這樣子。想想有多少人對於自己將來要從事的職業和技術型別進行過深入思考和比

C++ string中的幾小陷阱掉進過

stl 試題 賦值 clu ror ati world mod iostream C++開發的項目難免會用到STL的string。使用管理都比char數組(指針)方便的多。但在得心應手的使用過程中也要警惕幾個小陷阱。避免我們項目出bug卻遲遲找不到原因。1. 結構體中的

【項目管理】經驗之談 | 資深項目經理都避免的5中招

尊重 最終 fail 同方 快速 這就是 tro 理解 動力 哈嘍!大家好! 那天看到最有趣的一句話就是 為了填坑,一位項目經理胖了20斤 。。。。。 今天就給大家介紹一下 項目經理要註意的那些“坑” 項目經理“誤踩雷區” 1 未告知成員工作目標 作為項目經理

記一次安裝多版本php的四雷區踩著

path start cgi 命令執行 mysq -c tool port 一鍵 記一次安裝多版本的php的四個雷區,你踩著了嗎 需求:公司需要在同一臺服務器上安裝不同版本的php,而這一臺的服務上已經安裝了php.7.1,現需要同

學習程式設計的25“坑”踩到

0、忽視了程式設計終究是以人為本的。是的,機器的確會執行你的程式碼,但程式設計是為人們解決問題的,將他們的需求轉換為由其他人(或你自己線下)讀取,維護和修改的程式碼。 1、未能花充足的時間練習程式設計。 根據工作或日程安排,你可能會花費大量時間在與程式設計相關的任務上,但實際上這些並非程式設計本

PPT設計技巧get到

PPT做不好是因為沒有學過設計嗎?感覺這個說法也沒毛病呀。製作PPT最主要的是把自己需要表達的資訊傳遞給受眾,這才是重點,其次是對PPT頁面的設計了,設計是為了更高效,更準確的讓觀眾知道我們表達的內容。那麼如何提高PPT設計呢?配色:一些好看的PPT,從頭到尾看起來都是一個色,保持的很一致呀。如下圖的這個文藝

CSS的23垂直居中技巧都學會

網頁CSS的垂直居中需求始終沒有停過,而其困難度也始終沒有讓人輕鬆過,經過了每位開發先烈的研究後,據說CSS的垂直居中技巧已達到近十種之多,但始終鮮為人知,部分公司甚至將CSS的垂直居中技巧當成面試題,其重要性可見一斑。 在不斷探索,發現中,CSS的垂直居中的方式竟然能達到23種,大家可以看看自己熟知的是哪

馬上過年令程式猿最頭痛的件事中槍

一年一年又一年,程式設計師gg要回家過年了,可是頭疼的事情還真不少。強烈要求漲工資。 1.修電腦 過年期間,程式猿最怕的三件事過年期間,程式猿最怕的三件事 對程式設計師們來說,過年回家經常是一把辛酸淚。七大姑八大姨們難得碰到一個懂電腦的,一定不會輕易放過。 “會不會修電腦?

10攝影技術停滯不前中招

    有些朋友認為攝影只是一種歡樂餘興,隨心隨手就是他們的攝影哲學,沒關係的,這篇文章你當作參考就好,而那些渴望求進步的人,可以來檢視自己有否和我犯同樣的毛病,互勉之。其實或許都是老生常談,但我們又何嘗不是重覆犯錯?溫故知新總會有益處,種瓜得瓜,種豆得豆,我們怎樣看待攝

Python面試基礎十大陷阱中招

我們在會碰到各種各樣的面試,有的甚至是HR專門為你設定的障礙,在python面試中也是,無論你是應聘Python web開發,爬蟲工程師,或是資料分析,還是自動化運維,這些python面試基礎題十大陷阱也許你會遇到,今天的python培訓總結出來給你以防萬一,收好不謝!問題1

10用Java謀生非常有趣的方式全都掌握

提升 ava ext 如果 cap suse 努力 混合 ges 令我驚訝的是,有些人覺得編程並不令人興奮——只將它當作是一份枯燥的工作。不過,雖然可能的確有很多無聊的編程工作,但這並不意味著你不得不接受這些工作中的一個。 程序員有各種各樣的機會,運用他們的技能去做一些有趣

這麼香的Chrome外掛都安裝

工欲善其事必先利其器,今天長話短說,介紹13個敏捷、高效的Chrome外掛 根據使用方式,本人將其劃分為三大類: 開發者工具 日常效率工具類 瀏覽器管理類 開發者工具 1. Web Developer Web Developer 這款擴充套件集成了各種各樣的 Web 開發工具,幾乎是網頁開發人員必備的

【編程】不引入第變量而交換兩變量的值

其中 blog b+ 沒有 來源 article else 位移 text 不引入第三個變量,而交換兩個變量的值 方法一:算術運算 1 int a,b; 2 a=10;b=12; 3 a=b-a; //a=2;b=12 4 b=b-a; //a=2;b=10

【OC複合】之定義一個學生類需要有姓名年齡考試成績成員屬性建立5物件屬性可以任意值。(Objective-C)

題目: 定義一個學生類,需要有姓名,年齡,考試成績三個成員屬性,建立5個物件,屬性可以任意值。(Objective-C) 1)    不使用@property,手動編寫他們的訪問器方法(getter和setter),注意記憶體管理(手動管理記憶體) 2)    增加一個便利

2018.12.28this關鍵字呼叫書名屬性的型別

一.this關鍵字呼叫書名屬性的三個型別題 1.建立一個借書類BorrowABook,借書類中有書名屬性name,引數為name的構造方法和借書方法borrow()。編寫一個程式,使用this關鍵字呼叫書名屬性後,借閱《戰爭與和平這本書》 package myObject; pub

java實現【有執行緒ID分別是A、B、C,請有多線程式設計實現,在螢幕上迴圈列印10次ABC.】

該題應屬於生產者消費者模式一類 生產者消費者模式:根據標誌位來發訊息,實現對執行緒的控制。 直接貼答案了,請各位大蝦們指正哦。 建立三個執行緒 如下:ThreadA、ThreadB、ThreadC public class ThreadA implements Ru