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


0x00 場景

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

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

0x01 對APP進行調試的前提

在Android系統中,如果需要調試Android應用程序,需要滿足以下兩個條件之一:

  • 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 開始進行搜索:

搜索到以下位置,不止一處位置類似與以下位置,將搜索到的此類似位置都打上斷點

將可能的位置都打上斷點過后,接着就開始進行調試了。

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

1、所有的斷點都下好過后,點擊調試按鈕,附上設備程序,開始調試,如下:

2、當將手機上運行的應用附上JEB過后,操作app至登錄界面,點擊登錄

如果剛才下的所有斷點當中存在正確的,則點擊登錄過后jeb會直接停在正確斷點位置,反正,沒有任何效果,說明斷點沒有打在正確的地方,需要重新搜索。

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

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

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

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

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

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

通過分析,基本可以確定此處就為password字段加密的函數位置所在

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

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

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

實現加密的函數如下:

實現解密的函數如下:

解密需要用到的相關密鑰被硬編碼如下:

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

將數據包中抓取到的加密字段進行url轉碼過后解密如下,得到加密之前的原始密碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM