OLLVM移植到NDK
一、前言
一开始是直接将ollvm4源码编译后移植到ndk上,按照跟着铁头干混淆2 ubuntu20.04编译ollvm - 简书 (jianshu.com)上的步骤走,结果仍然报错:
1 |
|
而且如果直接将OLLVM的bin,lib,include目录覆盖到NDK中的对应的目录,居然会出现jni.h、string库识别不出来的错误(可是它可以在NDK目录中搜索出来):
1 |
|
之后看了Whitebird的博客,猜测可能是版本不匹配的问题。
所以有必要提醒各位,本文章中所涉及到的NDK是Android Studio自带的,以及LLVM是抑制了OLLVM的,且NDK版本和LLVM版本一致,均为14.0.6。
二、移植
2.1 OLLVM移植到LLVM14.x
OLLVM移植到LLVM14.x参考https://gal2xy.github.io/2024/04/17/LLVM%20and%20OLLVM/OLLVM%E7%A7%BB%E6%A4%8D%E5%88%B0LLVM14/
2.2 目录复制
将2.1步骤中编译出的LLVM中的bin、lib、include目录复制到NDK的toolchains/llvm/prebuilt/linux-86_64/目录下,进行覆盖。
在NDK目录下,将toolchains/llvm/prebuilt/linux-86_64/lib64目录下的clang文件夹复制到toolchains/llvm/prebuilt/linux-86_64/lib目录下,进行覆盖。
没有操作此步骤会报如下错误:
查询发现根本就没有这个目录。
三、项目混淆配置与测试
3.1 项目混淆配置
想要对项目中的.c/.cpp代码进行混淆,需要在cpp目录下的CMakeLists.txt中添加混淆配置,例如:
1 |
|
3.2 测试
测试代码:
分析apk中的so文件,该函数对应控制流图如下:
可见是非常的成功!
参考:
OLLVM移植到NDK
http://example.com/2024/04/17/LLVM and OLLVM/OLLVM移植到NDK/