Android - 公钥硬编码、变形处理(安全检测)

需求:

银联安全检测:秘钥如何处理。

级别:严重

条目::客户端公钥不能是是硬编码在客户端安装包内!

破解原理:

秘钥如果做成Base64或者做成文件直接一整段的放在java类或者asset中,这个就是硬编码;应用程序在加解密时,使用硬编码在程序中的密钥,攻击者通过反编译拿到密钥可以轻易解密APP通信数据;

修复建议:

密钥加密存储或者经过变形处理后用于加解密运算,切勿硬编码到代码中!

1、密钥直接明文存在sharedprefs文件中,这是最不安全的。 

2、密钥直接硬编码在Java代码中,这很不安全,dex文件很容易被逆向成java代码。 

3、将密钥分成不同的几段,有的存储在文件中、有的存储在代码中,最后将他们拼接起来,可以将整个操作写的很复杂,这因为还是在java层,逆向者只要花点时间,也很容易被逆向。

4、用ndk开发,将密钥放在so文件,加密解密操作都在so文件里,这从一定程度上提高了的安全性,挡住了一些逆向者,但是有经验的逆向者还是会使用IDA破解的。 

5、在so文件中不存储密钥,so文件中对密钥进行加解密操作,将密钥加密后的密钥命名为其他普通文件,存放在assets目录下或者其他目录下,接着在so文件里面添加无关代码(花指令),虽然可以增加静态分析难度,但是可以使用动态调式的方法,追踪加密解密函数,也可以查找到密钥内容。

参考:

1、参考的博客: https://bbs.pediy.com/thread-210263.htm

2、银联安全检测:https://open.unionpay.com/tjweb/product/detail?proId=8

你可能感兴趣的:(【,Android,进阶开发,】)