OpenCV升级后仍因libpng旧版本漏洞遭Google Play拒审求助
解决OpenCV libpng漏洞导致Google Play拒审问题
我之前也碰到过一模一样的情况,Google Play对libpng的漏洞检测真的很严格——哪怕升级了OpenCV版本,自带的libpng可能还是没跟上安全补丁。下面是我亲测有效的解决步骤:
第一步:确认当前OpenCV绑定的libpng版本
首先得搞清楚OpenCV 3.4.0自带的libpng是不是依然存在漏洞的旧版本:
- 如果你用的是OpenCV源码,直接看
3rdparty/libpng目录下的png.h文件,里面会有版本定义(比如#define PNG_LIBPNG_VER_STRING "1.6.24") - 如果你用的是预编译的Android库,可以用
readelf工具查看libopencv_java3.so的依赖,命令是:
输出里会显示依赖的libpng版本号,对比一下已知漏洞的版本列表(比如1.6.36及以下存在部分高危漏洞)。readelf -d libopencv_java3.so | grep libpng
第二步:替换并重新编译OpenCV的libpng
预编译的OpenCV包大概率不会用最新的libpng,所以最好自己编译源码来替换:
- 下载安全版本的libpng源码(推荐1.6.37及以上,这个版本修复了大部分公开的高危漏洞)
- 把OpenCV源码中
3rdparty/libpng目录下的所有文件全部替换成你下载的新libpng文件 - 针对Android平台编译OpenCV:
- 配置Android NDK和CMake环境
- 用OpenCV自带的
platforms/android/build_sdk.py脚本或者手动编写CMakeLists.txt,确保编译时链接新的libpng - 编译完成后,生成新的
libopencv_java3.so和相关的静态/动态库
第三步:验证替换效果
替换完编译后,一定要确认漏洞已经修复:
- 编译你的Android项目,导出APK后解压,找到
lib/[abi]/libopencv_java3.so - 再次用
readelf命令检查依赖的libpng版本,确认是你替换的安全版本 - 可以先用本地漏洞扫描工具自查,没问题再上传到Google Play的预发布渠道,看审核报告是否还提libpng漏洞
额外提醒
- 别忽略项目里的其他第三方库!有些广告SDK或者图片处理库也可能自带旧版libpng,需要一并排查替换
- 如果不想全量编译OpenCV,也可以尝试手动替换
.so的依赖,但这个方法需要一定的逆向知识,容易出兼容性问题,不推荐新手用
内容的提问来源于stack exchange,提问作者Parmita Koradiya




