如何保护JNI不被其他应用调用?或者如何获取APK自身的签名?或者如何保护我的密钥呢(我把解密密钥放在了JNI代码中)?求高手解决这3个问题JNI解密apk

解决方案 »

  1.   

    你可以把.so放到其他地方,要用时复制到lib下,在load就行拉。这样做是可行的。之前我有用到个第三方的库,里面的so文件后缀不规范,是so.1,即不能在打包前放到lib下,又没法用load读,所以我先把它放其他地方,动态把他后缀改名,再移到lib下就能正常加载了。
    根据以上思想,你甚至可以将这个so改成任何其他奇怪的文件名,并且加个密,这样就再安全不过了。当然效率肯定有损失
      

  2.   

    so.1 不是不规范这是静态库,你链接编译才对,调用时加入个token简单加密下即可
      

  3.   

    LS不明情况不要胡说。我找来的那个第三方库里有很多so,这些so互相依赖,其中有个我必须的so所依赖的so的后缀就是so.1,如果正常情况下,他应该依赖一个so后缀的文件,可以是真实动态库,也可以是一个link,如果是link,我改下文件名就行。问题是那个作者可能一时疏忽,引用的动态链接库的文件名后缀就是.so.1,导致我没法直接使用
    android里调用so对于so文件的命名是有规范的,必须是libXXX.so,调用时使用System.loadlibrary("XXX").虽然不规范的文件名,理论上用load也能调用,但是不规范文件名的so文件,你即使放入工程的libs目录,也不会最终被打包进apk文件
      

  4.   

    你生成.so文件用的c/c++文件中include了你的mainactivity,这个编译好之后,应该别人调不了你的jni了,不过可以通过先写一个activity依照so文件对于的文件名,然后间接调用!