2010-07-27 35 views
3

我有一个原生的android库(.so)我捆绑了一些应用程序。在本机代码中,我想验证调用应用程序的签名者/包名称。在Android NDK中识别调用应用程序

原因是,目前任何人都可以用.so文件打开.apk文件,并使用它来构建自己的应用程序。

有没有办法从Java端安全地识别调用应用程序?这可能是软件包名称,签名或其他可以以独特方式识别Android应用程序的其他内容。

回答

2

JNI代码与Java包名称相结合,并且只能从相同的包和类中调用。为了进一步提高安全性,您可以从JNI代码中检查一些Java private static final字段。

+0

另一个应用程序可以使用相同的包和类名来调用函数。这并不难,他们只需要查看.so文件中的导出函数列表。 但我想,私人静态最终字段可以添加额外的安全性。攻击者仍然可以通过拆解我的应用程序来解决这个问题,但这是一个很长的路要走。 谢谢你的回答! – 2010-07-27 07:46:18

+0

攻击者总是可以降低防御力。最好的安全性是合法的防御 – ognian 2010-07-27 08:08:42

+0

你可以在应用程序中安排一些奇特的密码调用和响应协议,但是你添加到.so的任何检查都可以通过修改.so来禁用。你可以任意重复使用你的代码,但是你不能让它变得不可能。决定你愿意付出多少努力。 – fadden 2010-07-27 19:33:30