关于16k字节对齐
1.这近Google发布了支持Android 16的要求,NDK部分要求需要16k字节对齐,请问这个是否已经支持 2.另外我一直用您提供的方案进行加固,但是近期发现之前的版本还是被破解。对于native的代码 他们是怎么拦截的呢,不知道是否能私下交流,谢谢。
对齐跟ndk有关,按谷歌文档升级了ndk不用管,它ndk默认就配置了。有问题不确定你可以用谷歌提供的脚本检测一下。 默认是把opcode随机化了,随机化后的指令数据在.so中,这些只需要静态反编译就能看到。如果对dalvik指令熟悉能找到规律,再分析vm就能还原随机化之前的指令重新构建dex就行。通过分析还原还算正常需要花时间的手段,就怕别人做出自动化脚本秒还原。动态分析工具frida、还有什么模拟执行的,其他就不清楚了。 最后就是加固范围,别把开源代码或者公开的sdk这些加固进去,这些公开的别人有你加固前的指令流,只需要简单对比随机化后的指令流就能找到opcode前后关系,根本不用分析vm
还有就是项目开源的,各种数据结构公开的,别人分析只需要导入这些数据结构就能比较容易分析编译后的代码。
对齐还有种情况就是so未压缩直接放入apk中,之前需要4k对齐,后面应该16k对齐,这个应该跟mmap系统调用有关。因为谷歌一直推荐aab,所以很少自己处理apk,也没测试apk的16k对齐,如果你遇到可以改一下apk里添加so这部分,加上对齐https://github.com/maoabc/nmmp/blob/e77de28e93de67007ee1b12f2cab4cecdacdccbf/nmm-protect/apkprotect/src/main/java/com/nmmedit/apkprotect/ApkProtect.java#L159
好的,感谢回复!
对齐跟ndk有关,按谷歌文档升级了ndk不用管,它ndk默认就配置了。有问题不确定你可以用谷歌提供的脚本检测一下。 默认是把opcode随机化了,随机化后的指令数据在.so中,这些只需要静态反编译就能看到。如果对dalvik指令熟悉能找到规律,再分析vm就能还原随机化之前的指令重新构建dex就行。通过分析还原还算正常需要花时间的手段,就怕别人做出自动化脚本秒还原。动态分析工具frida、还有什么模拟执行的,其他就不清楚了。 最后就是加固范围,别把开源代码或者公开的sdk这些加固进去,这些公开的别人有你加固前的指令流,只需要简单对比随机化后的指令流就能找到opcode前后关系,根本不用分析vm
目前我的其他so文件还是需要再NDK21下面编译,您这边是否能在makefile里面增加下面的选项:
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,max-page-size=16384") target_link_options(${CMAKE_PROJECT_NAME} PRIVATE "-Wl,-z,common-page-size=16384")
然后再发布一个jar文件呢? 我在windows环境下,jar里面的zip文件我这边改了就编译不过。 感谢!
我改了逻辑,不删除tools目录,修改了CMakeLists.txt文件,重新打包zip,发现可以解决,但是不知道为啥是14,不是16
LOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**14
LOAD off 0x00000000003602b0 vaddr 0x00000000003642b0 paddr 0x00000000003642b0 align 2**14
原本页是4K是2^12,4倍不就是2^14。编译参数生没生效可以看.cxx目录下build.ninja或者CMakeCache.txt。
谢谢,build.ninja里面分析看编译参数生效了。