JEB動態調試解密數據包加密字段

0x00 場景

在測試某個app的時候,抓取數據包,發現某些參數存在被加密的狀況,或者有簽名校驗的狀況,這個時候若是咱們想直接去篡改數據包的內容每每是作不到的,那就來看看抓取的某個app登陸數據包,以下所示,password字段明顯進行了加密:java

接下來,就開始經過JEB對apk進行反編譯後動態調試定位關鍵加密函數。android

0x01 對APP進行調試的前提

在Android系統中,若是須要調試Android應用程序,須要知足如下兩個條件之一:app

  • apk配置文件AndroidManifest.xml中顯示的聲明瞭android:debuggable="true"。
  • 在安卓系統的根目錄下的default.prop文件中ro.debuggable=1

對於上述的第一個能夠調試android應用程序的條件,在android應用商店等下載的正式上架應用,一般不會遇到在AndroidMainfest中設置了android:debuggable="true"的狀況,因此若是想要使用第一種方法,一般就須要對apk進行解包添加android:debuggable="true"再打包,隨着加殼軟件以及apk自己的校驗等防禦措施,再從新打包apk的過程每每容易出現異常,不容易成功,而第二種調試的條件在手機發布時或者官方的原版rom包中,ro.debuggable=0,也就是說默認不容許調試的,能夠經過刷機的方式或者臨時修改內存的方式進行修改:ro.debuggable=1函數

0x02 反編譯apk文件

打開反編譯工具JEB,直接將須要反編譯的apk(未加殼)文件拖到JEB中便可進行反編譯獲得smali代碼和java僞代碼工具

等待一下子,反編譯結束以下:測試

0x03 經過關鍵字搜索打斷點

根據截取到的登陸數據包中的參數關鍵字(mobile_tel、op_station、mobile_uuid、terminal_os、terminal_platform、terminal_device、password、channel)在JEB的反編譯文件Byecode中進行搜索,定位加密的關鍵函數的位置。網站

ctrl+F 開始進行搜索:ui

搜索到如下位置,不止一處位置相似與如下位置,將搜索到的此相似位置都打上斷點編碼

將可能的位置都打上斷點事後,接着就開始進行調試了。加密

0x04 經過JEB調試找到加密函數位置

一、全部的斷點都下好事後,點擊調試按鈕,附上設備程序,開始調試,以下:

二、當將手機上運行的應用附上JEB事後,操做app至登陸界面,點擊登陸

若是剛纔下的全部斷點當中存在正確的,則點擊登陸事後jeb會直接停在正確斷點位置,反正,沒有任何效果,說明斷點沒有打在正確的地方,須要從新搜索。

在調試過程中,會提示程序沒有響應,記得點擊等待

三、在斷點處單擊右鍵選擇解析或者按tab鍵,跳轉到當前斷點位置的反編譯的java源碼處

發現password的值是由v0_2賦值而來

雙擊v0_2,跳轉到以下位置處,說明v0_2的值在onClick()函數中獲得:

繼續在onClick()函數中找其餘v0_2所在的位置

雙擊encrypt,跳轉到加密函數所在位置

經過分析,基本能夠肯定此處就爲password字段加密的函數位置所在

接下來能夠再經過下斷點加以肯定,回到如下java源碼位置,再按tab或者解析回到此位置對應的smali代碼處並打下斷點:

從新點擊app應用的登陸,成功跳轉到調用加密函數的斷點位置,以下:

四、雙擊加密函數encrypt,進入加密函數所在位置,分析加密函數以便解密:

實現加密的函數以下:

實現解密的函數以下:

解密須要用到的相關密鑰被硬編碼以下:

五、最後根據加密函數中的填充模式,加密模式、密鑰,數據塊,偏移量信息經過在線網站解密

將數據包中抓取到的加密字段進行url轉碼事後解密以下,獲得加密以前的原始密碼

相關文章
相關標籤/搜索