一、为什么要使用jni加固
其实以前都不是很了解jni,没怎么用过。 因为jni的使用场景要么是提供超过java的性能,要么跨平台android、ios都可以使用。这种so在条件允许的情况会有人专门负责,不需要app层去处理。
之前做过一个android加固相关的,通过jni把部分重要的逻辑放到c层,这样可以防止app被反编译后轻易找到那部分逻辑。当然如果用c写觉得麻烦(涉及到java其他库依赖库或者模块依赖等),可以通过java->c->java 其实不用写什么c代码也可以起到加固作用。
二、使用jni加固的基本流程
- 选定进入jni的入口
- 选定so里面通过路径查找的java类 需要keep住
- 基于以前破解的方法,制定恶意的逻辑。只要敢改代码二次打包,就入坑
- 签名检验可以考虑下沉到so做
三、java->c->java注意点
1.findClass(path)不能混淆,不然找到该类。但是混淆后,容易被顾名思义。这时要处理,比如不混淆也看不懂的代码
2.抖一些小机灵,比如埋雷,只要被串改了就出问题之类的