You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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的依赖,命令是:
    readelf -d libopencv_java3.so | grep libpng
    
    输出里会显示依赖的libpng版本号,对比一下已知漏洞的版本列表(比如1.6.36及以下存在部分高危漏洞)。

第二步:替换并重新编译OpenCV的libpng

预编译的OpenCV包大概率不会用最新的libpng,所以最好自己编译源码来替换:

  • 下载安全版本的libpng源码(推荐1.6.37及以上,这个版本修复了大部分公开的高危漏洞)
  • 把OpenCV源码中3rdparty/libpng目录下的所有文件全部替换成你下载的新libpng文件
  • 针对Android平台编译OpenCV:
    1. 配置Android NDK和CMake环境
    2. 用OpenCV自带的platforms/android/build_sdk.py脚本或者手动编写CMakeLists.txt,确保编译时链接新的libpng
    3. 编译完成后,生成新的libopencv_java3.so和相关的静态/动态库

第三步:验证替换效果

替换完编译后,一定要确认漏洞已经修复:

  • 编译你的Android项目,导出APK后解压,找到lib/[abi]/libopencv_java3.so
  • 再次用readelf命令检查依赖的libpng版本,确认是你替换的安全版本
  • 可以先用本地漏洞扫描工具自查,没问题再上传到Google Play的预发布渠道,看审核报告是否还提libpng漏洞

额外提醒

  • 别忽略项目里的其他第三方库!有些广告SDK或者图片处理库也可能自带旧版libpng,需要一并排查替换
  • 如果不想全量编译OpenCV,也可以尝试手动替换.so的依赖,但这个方法需要一定的逆向知识,容易出兼容性问题,不推荐新手用

内容的提问来源于stack exchange,提问作者Parmita Koradiya

火山引擎 最新活动