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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章