標籤:載入 列印 目的 作者 ring https 應用 分享圖片 strong
本文i春秋作家——HAI_
0×00 前言
HAI_逆向使用手冊(想嘗試一下新的寫法)
其他 Android逆向進階 系列課程 <<<<<<<
人物說明
小白:已經掌握了一些基礎的逆向技能的菜鳥。
小紅:小白的女朋友。
大白:小白的師傅。
竹山(大白居)
師傅師傅,我今天下山聽見有人說,江湖中出現了一種為Hook的武林秘籍。據說十分厲害,可以攔截System。攔截程式猿開發的出來app。
小白啊,你知道什麼是Hook嗎。
聽說過,但是卻不明白什麼是hook。
Hook這個秘籍啊,說白了是對函數進行重寫。我們重寫這個函數,就可以實現我們想要的目的,攔截呀,還有其他的內容。
師傅,我想學這個Hook秘籍。
好好,我們慢慢來。
先說說我們今天學習的Hook技能吧。
技能(內容)
1.一個新的武器(Xposed架構)的使用
2.練習使用Hook的第一重內功(Android Studio 3.0 +Xposed)
3.木樁實戰練習
4.木樁f進階(小白的自我進步)
0×01 一個新的武器(Xposed架構)的使用
小白,認真學習哦,我們先來試試我們的新武器。Xposed,以後江湖闖蕩也有一個防身的技巧。
小白你等等,我去找找這個武器我放在哪了。所謂工欲善其事必先利其器。
好了,師傅你快去,別囉嗦了。
1. 武器 get
小白,要想使用這個武器,就要先打通經脈。
1.1 經脈(環境)
1.Root,手機root,無root不安卓。打通root經脈我們才能進行之後的操作。
2.Xposed架構安裝,想要使用Xposed這個武器,就要先能拿的起來才能談使用。
1.2武器
xposedBridgeApi-82.jar.jar。
這個就是我們的武器了,小白,來,我給你示範示範這個武器的基本使用方法。
2.武器示範
我們這裡使用Xposed武器攔截packageName,然後進行輸出。
其實這個武器還是搭配內功才能發揮最大的能力。
搭配內功,師傅,這個怎麼搞。
莫急莫急,我們一步一步來。
0×02 練習使用Hook的第一重內功(Android Studio 3.0 +Xposed)
小白,我先傳授你第一重內功的運行穴位。要好好聽哦。
Android Studio 3.0 基本配置
我們先來給內容運行提供一個環境。
(1)首先構建一個不需要Activity的項目
(2)然後匯入jar包。並且右鍵add as Library。
(3)填寫Androidmanifest.xml檔案。
<meta-data android:name="xposedmodule" android:value="true" /> <meta-data android:name="xposeddescription" android:value="Hook log test" /> <meta-data android:name="xposedminversion" android:value="53" />
(4) 修改依賴方式
Xposed裡已有該jar包內容,再次打包進去會衝突。
(5)基本Xposed模型建立
使用alt+enter實現一個方法。
小白,聽我囉嗦兩句。
handleLoadPackage,這個方法用於在載入應用程式的包的時候執行使用者的操作。
LoadPackageParam loadPackageParam:,這個參數包含了載入的應用程式的一些基本資料。
內功實現
這裡一句話就可以實現。
XposedBridge.log(“HAI_app: ” + loadPackageParam.packageName);
這裡我們要進行思考了,什麼是 XposedBridge.log了。
posedBridge.log的列印會輸出到xposed架構的啟動程式的日誌功能中。這樣也更方便我們的查看。
我們來做配置的最後一步。設定開始地方。
建立assets目錄裡,建立一個file。file名稱為xposed_init。
寫入包名+類。
測試成果
Build APK
安裝進行測試。
手機安裝然後重新啟動即可。
思考
所謂師傅領進門,修行看個人。所以啊。
我知道了師傅,我們是不是可以通過這個簡單的來進行過濾啊。比如寫一個簡單的分析系統。或者是其他的東西,我們還可以對這個進行過濾。我先自己去試試。
小白的自我修行
通過這個運行路徑,對報名進行分析和過濾。
進行簡單的嘗試。
使用昨天學的java字串的substring來進行對字串過濾。
然後進行測試。
當然也可以針對這個進行更加詳細的說明。
0×03木樁實戰練習
小白,來來,師傅這裡給你找了一個木樁,我打給你看看。這個hook是怎麼法功的,怎麼打的。要學好哦。
知道了師傅。
木樁資訊收集1.基本資料
小白啊,用我們之前使用過的一個武器,來收集這些基本資料吧。
師傅,我們一般都收集什麼資訊啊。
恩,我們一般要收集
1.木樁的包名
2.木樁的簡單的邏輯
….
小白,這個你就自己收集把。
小白的操作
首先是包名。使用武器,apkhelper。
擷取到包名資訊。com.example.login
然後是簡單的邏輯手機。
2.反編譯資訊收集
小白啊,收集玩了嗎?
收集完了師傅。
好,我們接下來收集反編譯資訊。知己知彼,方能百戰不殆。
師傅的操作
首先我們來看看我們要收集的東西。
1.關鍵的類名。
2.關鍵的函數位置。
來用Android Killer武器反編譯木樁。
定位。
查看類名,進行記錄。
小白,看清楚,是這個樣子進行記錄。
原來是這樣。com/example/login/MainActivity;
但是我們要改成這樣的。com.example.login.MainActivity
現在就需要定位到關鍵函數了。
這個login就是我們要Hook住的函數啦。
Ljava/lang/String;Ljava/lang/String;從這裡我們可以看到是兩個輸入內容。並且類型是String。我們現在要做的就是要hook住這個輸出,然後對其進行輸出。
木樁實戰練習環境搭建
好了,小白,前期資料收集的差不多了。我現在要發功了,要看清楚我的使用哦。
先把環境調整好。
然後先做一個簡單的過濾。
這個時候,收集的包名就排上用場了。
因為是hook的是方法,所以我們這裡使用一個方法。
第一個參數,要hook的包名+方法名,這個也是我們收集好的。
第二個參數不動
第三個參數方法名
第四個參數 輸入的參數
我們有兩個String類型的參數,所以才這樣寫
最後一個參數,就是做一個監聽。可以監聽這個方法的使用前和使用後。
f for木樁
小白,一切準備你就須,看為師給你f這個木樁。
小白,你看這第一招
XposedBridge.log("ZHUZHU520:LoginName:"+param.args[0]);
這一招搞它的第一個輸入。
然後再來看這一招
XposedBridge.log("ZHUZHU520 assward:"+param.args[1]);
這一招搞它的第二個輸入。
然後最後一招。
XposedBridge.log("ZHUZHU520:end???:"+param.getResult());
這一招就是攔截傳回值。
小白啊,這裡有一個需要思考的內容。
這樣hook的意義或者作用是什嗎?
小白的思考
師傅,我覺得首先,這樣可以攔截下輸入的參數,還有返回的值。如果在hook裡做一個轉寄資訊的技能。那不就可以成功的對登入賬戶的人進行帳號和密碼的擷取。
這不就是和釣魚一樣了嘛。
我覺得這是一個很大的漏洞,如果登入廠商沒有做相應的處理,那這裡我可以拿這個搞死他。
好了,小白,你說的很對,我們現在來對這個進行下測試吧。
f 木樁測試
小白啊,你看這裡我們就成功的攔截內容了。小白給你一個任務,用hook f掉這個木樁,我希望他能登入成功,哪怕我輸入的對的。
0×04 木樁f進階(小白的自我進步)
XposedBridge.log("ZHUZHU520:end???:"+param.getResult());
思考一
師傅之前使用了一個param.getResult()擷取了傳回值,那我是不是可以使用相同的set方法,重新對這個進行賦值啊。
根據各種方式,我們知道了這裡的傳回值就是Z,也就是布爾型。
說幹就幹,爭取f掉木樁。
進行測試。
成功hook。
思考二
除了可以hook傳回值,還可以hook輸入值。
但是這樣有點畫蛇添足的感覺。
0×05 結束語
小白啊,hook就學到這裡吧。有時間我們繼續學習hook 技能。回去多練練。
Android逆向進階(7)——揭開Hook的神秘面紗