我刚收到Google Play发出的电子邮件,内容如下:



我没有在任何应用程序中明确包含OpenSSL。使用Android NDK的应用程序正在使用NDK 9d(最新版本)。我唯一使用的外部 native 库是ffmpeg和OpenCV,以及一些不包含 native 代码的广告库。

可能还包含OpenSSL的其他地方导致此警告?

问候,

最佳答案

我编写了一个bash脚本,它将显示您应用中静态链接的所有内容的OpenSSL版本,以及是否包含TLS心跳方法。

这适用于我扔给它的几个APK。将使用版本号和日期专门提取OpenSSL版本字符串。如果Google标记了APK,但找不到它,请在egrep命令中将OpenSSL regex放宽到“OpenSSL”,然后查看该链接。

将以下内容放入文件中testopenssl.sh

用法:./testopenssl.sh APK_File

#!/bin/bash
sslworkdir="ssl_work_dir"
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

08-18 04:36
查看更多