我想实现安全检查 - 应用程序(或dex文件)的签名验证,以验证未修改的应用程序使用我的共享本机库(* .so)构建NDK。我想直接用C ++执行所有签名检查,没有Java。目前我发现可以访问apk文件:/data/app/--1/base.apk。从apk文件我想有可能获得原始dex文件的内容,甚至可能没有提取,因为apk文件已对齐。
我说原始dex文件,因为如果我理解正确(并且如果我错了就纠正我的话)dex文件在安装apk时被转换为ELF共享对象 - 特定于设备架构的二进制可执行文件。这就是为什么我无法检查/验证/ proc / self / maps中列出的* .dex文件的签名的原因(例如:/data/dalvik-cache/x86/data@app@com.asdf.pkg@base .apk @ classes.dex)因为在编译时无法知道签名,因为dex文件将被更改。
我知道检查原始dex文件的方法不是很安全,因为我认为可以通过替换优化的dex文件轻松绕过root设备 - 只需在自定义dex文件上运行dex2oat并将其放入(/ data / dalvik-缓存/...).
答案 0 :(得分:1)
副手,我想不出办法做到这一点。
我能想到几个(而且他们都像帽子一样疯狂):
对于像我这样使用基于英特尔设备的愚蠢的人来说可能会失败。