在Android 中 開發者可能會忽略某些細節 導致不安全加密資料 使得攻擊者 可以去利用不安全加密程式來取得存放在手機中的敏感資料 可能的不安全加密實作如下 1. 過舊的加密演算法, 硬編碼的金鑰, 不安全存放金鑰, 使用不安全的亂數生成器 等等
我們可以先用JADX先反編譯一下 該APP 查看有哪些功能
根據函式名稱APP 會把Message 放在 DataBase 中 透過content.put()方式 放到DB中
找一下 saveMessageToDatabase 在哪裡被調用
有趣的是 我們可以看到一個Strings 型態的strSendToServer return 值被放到 decrypt中 表示這個Strings 是加密過的東西
我們在看一下 這個 strings 的Source 發現他會向遠端伺服器/message 請求一段加密的訊息
之後就會把訊息以密文放在DB中
現在我們大致上了解了怎個運作過程 也知道DB 可能會有值得去了解的密文
可以先去 手機中翻一下 那些加密過後的訊息位置
adb root
adb shell
cd /data/data/com.hackthebox.chatapp
裡面會有 messages.db 的東西
sqlite3 messages.db
.tables
select * from encrypted_messages;
Table 中加密的內容
確認了加密的訊息後 可以來看一下解密的算法實現
這裡使用了AES對稱式算法 AES 主要對 128 bit Data 進行矩陣操作 他的KEY長度可以是 128, 192, 256 長度
並用了CBC 每個明文會先對前一個區塊進行Xor運算 在進行AES 算法 至於第一個 明文區塊就會使用 Initial Vector 來進行Xor 也就是說我們要解AES 需要知道 IV 與 key 就能進行decrypt
我們可以觀察 SecretKeySpec() 與 IvParameterSpec() 它們都是透過R classes 來傳遞參數 這裡有硬編碼的問題 不安全儲存 我們可以去檢查 String.xml
知道 Secrte key 與 initial Vector 後我們可以快速的從CyberChef網站中Decrypt 資料庫Table 裡的加密訊息 可能其他的資訊都可以透過這總decrypt方式取得