密鑰硬編碼 - SecretKeySpec類
一、API
1. 繼承關係
【1】java.lang.Object
【2】javax.crypto.spec.SecretKeySpec
2. 主要方法
【1】SecretKeySpec(byte[ ] key, String algorithm)
【2】參考鏈接
https://developer.android.com/reference/javax/crypto/spec/SecretKeySpec.html
二、觸發條件
1. 定位SecretKeySpec初始化方法的位置
【1】對應到smali語句中的特徵
'Ljavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V'
2. 方法內定位String.getBytes()的位置
【1】對應到smali語句中的特徵
'Ljava/lang/String;->getBytes(Ljava/lang/String;)[B'
3. 取出String對應寄存器的名稱V1
4. 賦值判斷:const-string V1, "test123"
三、漏洞原理
【1】應用程序在加解密時,使用硬編碼在程序中的密鑰,攻擊者通過反編譯拿到密鑰可以輕易解密APP通信數據
【2】更多內容
http://bbs.pediy.com/showthread.php?t=210263&highlight=密鑰+鑰硬+硬編+編碼+碼
四、修復建議
【1】密鑰加密存儲或者經過變形處理後用於加解密運算,切勿硬編碼到代碼中