在測試某個app的時候,抓取數據包,發現某些參數存在被加密的狀況,或者有簽名校驗的狀況,這個時候若是咱們想直接去篡改數據包的內容每每是作不到的,那就來看看抓取的某個app登陸數據包,以下所示,password字段明顯進行了加密:java
接下來,就開始經過JEB對apk進行反編譯後動態調試定位關鍵加密函數。android
在Android系統中,若是須要調試Android應用程序,須要知足如下兩個條件之一:app
對於上述的第一個能夠調試android應用程序的條件,在android應用商店等下載的正式上架應用,一般不會遇到在AndroidMainfest中設置了android:debuggable="true"的狀況,因此若是想要使用第一種方法,一般就須要對apk進行解包添加android:debuggable="true"再打包,隨着加殼軟件以及apk自己的校驗等防禦措施,再從新打包apk的過程每每容易出現異常,不容易成功,而第二種調試的條件在手機發布時或者官方的原版rom包中,ro.debuggable=0,也就是說默認不容許調試的,能夠經過刷機的方式或者臨時修改內存的方式進行修改:ro.debuggable=1函數
打開反編譯工具JEB,直接將須要反編譯的apk(未加殼)文件拖到JEB中便可進行反編譯獲得smali代碼和java僞代碼工具
等待一下子,反編譯結束以下:測試
根據截取到的登陸數據包中的參數關鍵字(mobile_tel、op_station、mobile_uuid、terminal_os、terminal_platform、terminal_device、password、channel)在JEB的反編譯文件Byecode中進行搜索,定位加密的關鍵函數的位置。網站
ctrl+F 開始進行搜索:ui
搜索到如下位置,不止一處位置相似與如下位置,將搜索到的此相似位置都打上斷點編碼
將可能的位置都打上斷點事後,接着就開始進行調試了。加密
若是剛纔下的全部斷點當中存在正確的,則點擊登陸事後jeb會直接停在正確斷點位置,反正,沒有任何效果,說明斷點沒有打在正確的地方,須要從新搜索。
在調試過程中,會提示程序沒有響應,記得點擊等待
發現password的值是由v0_2賦值而來
雙擊v0_2,跳轉到以下位置處,說明v0_2的值在onClick()函數中獲得:
繼續在onClick()函數中找其餘v0_2所在的位置
雙擊encrypt,跳轉到加密函數所在位置
經過分析,基本能夠肯定此處就爲password字段加密的函數位置所在
接下來能夠再經過下斷點加以肯定,回到如下java源碼位置,再按tab或者解析回到此位置對應的smali代碼處並打下斷點:
從新點擊app應用的登陸,成功跳轉到調用加密函數的斷點位置,以下:
實現加密的函數以下:
實現解密的函數以下:
解密須要用到的相關密鑰被硬編碼以下:
將數據包中抓取到的加密字段進行url轉碼事後解密以下,獲得加密以前的原始密碼