- 原理
- so文件到底还是ELF文件,思路在于用__attribute__((section("{name}")))这个申明将核心代码编译后的二进制放入该section中,同时指定__attribute__((constructor))作为so加载进来的第一段代码,在这个代码中对section进行解密。
- 加密的过程是将打包出来的so文件,进行二进制分析后,将核心代码的section段的二进制进行加密编码,在编写cpp文件时,在初始化函数中进行解密。
- 还可以根据这个原理,参照网上的方法进行二次加工。比如加密解密的方法等。
- 坑
- 如果用__attribute__((section("{name}")))指定的方法在申明函数处是不需要JNIExport和JNICall的,如果加上就会在.text段保存一份,在IDA还是一览无余。
- 不要想着因为代码在编译后都在.text段所以就想着把.text段加密,既然方法代码都在.text当然也包括你的解密方法了,就发生了“死锁”。
参考资料:
加密脱壳
如果按网上的方法修改了shoff引起的坑
偷so的控件