1. 武器 get
小白,要想使用這個武器,就要先打通經脈。
1.1 經脈(環境)
1.Root,手機root,無root不安卓。打通root經脈我們才能進行之后的操作。
2.Xposed框架安裝,想要使用Xposed這個武器,就要先能拿的起來才能談使用。
1.2武器
xposedBridgeApi-82.jar.jar。
這個就是我們的武器了,小白,來,我給你演示演示這個武器的基本使用方法。
2.武器演示
我們這里使用Xposed武器攔截packageName,然后進行輸出。
其實這個武器還是搭配內功才能發揮最大的能力。
搭配內功,師傅,這個怎么搞。
莫急莫急,我們一步一步來。
0x02 練習使用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了。
The print of posedBridge.log will be output to the logging feature of the xposed framework’s startup program.。這樣也更方便我們的查看。
我們來做配置的最后一步。設置開始地方。
新建assets目錄里,新建一個file。file名稱為xposed_init。
寫入包名+類。
測試成果
Build APK
安裝進行測試。
手機安裝然后重新啟動即可。
思考
所謂師傅領進門,修行看個人。所以啊。
我知道了師傅,我們是不是可以通過這個簡單的來進行過濾啊。比如寫一個簡單的分析系統。或者是其他的東西,我們還可以對這個進行過濾。我先自己去試試。
小白的自我修行
通過這個運行路徑,對報名進行分析和過濾。
進行簡單的嘗試。
使用昨天學的java字符串的substring來進行對字符串過濾。
然后進行測試。
當然也可以針對這個進行更加詳細的說明。
0x03木樁實戰練習
小白,來來,師傅這里給你找了一個木樁,我打給你看看。這個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:Passward:"+param.args[1]);
這一招搞它的第二個輸入。
然后最后一招。
XposedBridge.log("ZHUZHU520:end???:"+param.getResult());
這一招就是攔截返回值。
小白啊,這里有一個需要思考的內容。
這樣hook的意義或者作用是什么?
小白的思考
師傅,我覺得首先,這樣可以攔截下輸入的參數,還有返回的值。如果在hook里做一個轉發信息的技能。那不就可以成功的對登錄賬戶的人進行賬號和密碼的獲取。
這不就是和釣魚一樣了嘛。
我覺得這是一個很大的漏洞,如果登錄廠商沒有做相應的處理,那這里我可以拿這個搞死他。
好了,小白,你說的很對,我們現在來對這個進行下測試吧。
f 木樁測試
小白啊,你看這里我們就成功的攔截內容了。小白分配給你一個任務,使用hook f來攔截木樁,并確保不管我是否輸入正確,木樁能夠成功登錄。
0x04 木樁f進階(小白的自我進步)
XposedBridge.log("ZHUZHU520:end???:"+param.getResult());
思考一
師傅之前使用了一個param.getResult()獲取了返回值,那我是不是可以使用相同的set方法,重新對這個進行賦值啊。
根據各種方式,我們知道了這里的返回值就是Z,也就是布爾型。
說干就干,爭取f掉木樁。