Android Google Play旧OpenSSL警告

我刚刚发现安全警报说“您的应用程序正在使用包含安全漏洞的OpenSSL版本。”并链接到本文:

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

我做了一个grep命令来查找apk中使用的OpenSSL版本
unzip -p YourApp.apk | strings | grep "OpenSSL"
我发现该应用程序使用的是OpenSSL 1.0.1k 8 Jan 2015

问题是,我没有明确使用任何OpenSSL类,我没有依赖它。 所以可能其他一些依赖项是使用旧的OpenSSL版本,但我不知道,我怎么能找到使用OpenSSL依赖的库。 我试图找到哪个库使用OpenSSL与此命令./../gradlew -q dependencies但根本没有任何OpenSSL ..

我有一个使用整个依赖列表的应用程序的问题。 经过多次寻找答案后,这对我有用:

我创建了一个名为findopenssl.sh的脚本(我在另一个SO回答中找到了这个但是没有引用给作者的信用 – 同样,将myhomedirectory更改为你想要工作的目录,我使用了我的主文件夹,因为它只是让终端的生活变得更轻松了。 此脚本将识别apk中引用OpenSSL的文件以及实现被视为安全风险的Heartbeat函数的文件:

 #!/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商店。