【发布时间】:2016-11-25 03:54:29
【问题描述】:
我想实施安全检查 - 应用程序(或 dex 文件)的签名验证,以验证未修改的应用程序使用我的共享本机库 (*.so) 与 NDK 构建。我想直接在 C++ 中执行所有签名检查,而不使用 Java。目前我发现可以在这里访问apk文件:/data/app/--1/base.apk。从 apk 文件中,我猜即使没有提取,也可能获取原始 dex 文件的内容,因为 apk 文件已对齐。
- 有人知道如何在不从 apk 中提取的情况下读取 dex 文件吗?
我说原始 dex 文件是因为如果我理解正确(如果我错了,请纠正我)dex 文件会在安装 apk 时转换为 ELF 共享对象 - 特定于设备架构的二进制可执行文件。这就是我无法检查/验证 /proc/self/maps 中列出的 *.dex 文件签名的原因(例如:/data/dalvik-cache/x86/data@app@com.asdf.pkg@base .apk@classes.dex) 因为在编译时无法知道签名,因为 dex 文件会被更改。
我知道检查原始 dex 文件的方法不是很安全,因为我认为它可以通过替换优化的 dex 文件在有根设备上轻松绕过 - 只需在自定义 dex 文件上运行 dex2oat 并将其放在 (/data/dalvik-缓存/...)。
- 还有其他更好的方法来检查应用程序是否来自使用纯 C++ 的原生库吗? (不通过 JNI 调用 Java)
【问题讨论】:
标签: android c++ android-ndk dex