2016-04-04 101 views
3

我只是找到了一個安全警告,指出並鏈接到這篇文章「您的應用程式使用的OpenSSL版本包含一個安全漏洞。」:谷歌Android播放舊的OpenSSL警告

https://support.google.com/faqs/answer/6376725

我做了一個grep命令來查找在APK
unzip -p YourApp.apk | strings | grep "OpenSSL"
使用OpenSSL的版本,我發現該應用程序使用OpenSSL 1.0.1k 8 Jan 2015

問題是,我沒有明確使用任何OpenSSL類,也沒有依賴關係。所以可能其他的一些依賴使用舊的OpenSSL版本,但我不知道,我怎麼能找到什麼庫使用OpenSSL依賴。 我試圖找到該庫使用OpenSSL與此命令./../gradlew -q dependencies 但沒有任何OpenSSL的所有..

+0

你有沒有嘗試繞過SSL認證 –

+0

你是什麼意思?我如何做到這一點? – Sandak

+0

您也可以禁用SSLCertificateChecking與此,你不需要任何類型的認證,同時擊中網址到服務器 –

回答

0

我有這個問題,因爲這是使用依賴性的整個列表的應用程序。經過多次搜索答案,這是什麼對我有用:

我創建了腳本叫做findopenssl.sh(我發現這在另一個SO回答某處,但沒有參考信貸作者 - 也是,將myhomedirectory更改爲無論您想要工作的目錄是什麼,我都使用了我的主文件夾,因爲它在終端中讓生活更輕鬆)。這個腳本會識別你的apk引用OpenSSL的文件,以及那些實現被認爲是安全風險的心跳功能):

#!/bin/bash 
sslworkdir=「myhomedirectory」 
if [ ! -d $sslworkdir ]; then 
mkdir $sslworkdir 
fi 
unzip -q "$1" -d $sslworkdir 
#Set delimiter to ignore spaces 
IFS=$'\r\n' 
#Create an array of OpenSSL version strings 
opensslarr=($(egrep --binary-files=text -o -R -e "OpenSSL\s\d+\.\d+\.\d+\w+\s\d+\s\w+\s\d+" $sslworkdir/*)) 
#Stackoverflow syntax highlight fix closing 'block comment' */ 
if [ ${#opensslarr[@]} -gt 0 ]; then 
echo "Found OpenSSL versions" 
printf "%s\n" "${opensslarr[@]}" 
heartbeatarr=($(grep -R -E "(tls1_process_heartbeat|dtls1_process_heartbeat|dtls1_heartbeat|tls1_hearbeat)" $sslworkdir/*)) 
#Stackoverflow syntax highlight fix closing 'block comment' */ 
if [ ${#heartbeatarr[@]} -gt 0 ]; then 
echo "Files that contains heartbeat methods:" 
printf "%s\n" "${heartbeatarr[@]}" 
else 
echo "No libraries contain heartbeat methods" 
fi 
else 
echo "Did not find OpenSSL" 
fi 
rm -rf $sslworkdir 

我複製我的apk到我的主目錄,並在終端窗口運行腳本搭配:

sh findopenssl.sh myappname.apk 

在我而言,這個標識被稱爲libportsip_core.so具有舊版本的OpenSSL引用一個庫文件。

我發現了libportsip_core.so(armv7和x86)的兩個版本並刪除了它們。然後,我再次清理,重建並構建了我的apk並再次運行腳本。這很好,我成功地提交到Play商店。