密钥硬编码 - 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】密钥加密存储或者经过变形处理后用于加解密运算,切勿硬编码到代码中