记一次使用OLLVM增加so文件的分析难度(1)

11 篇文章 0 订阅
4 篇文章 0 订阅

编译ollvm源码(前提:我的这些都是放在/opt文件夹里面操作的)
1. git clone -b obfuscator-llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git
2. mkdir build  //这个目录主要是用于存放编译文件而已,其实不要紧的,到时都只是拿里面的编译后的文件来用而已
3. cd build

4.下面这个执行编译,有时会提示编译失败,说有个test 文件夹已存在

   cmake -DCMAKE_BUILD_TYPE:String=Release ../       注意:../这个是build在项目文件里面的写法,如果你build和项目文件是同级,那就需要指定你编译项目名称 ../obfuscator

  具体报错

CMake Error at cmake/modules/AddLLVM.cmake:1163 (add_custom_target):
  add_custom_target cannot create target "check-llvm-bindings-ocaml" because
  another target with the same name already exists.  The existing target is a
  custom target created in source directory "/opt/obfuscator-llvm-4.0/test".
  See documentation for policy CMP0002 for more details.
Call Stack (most recent call first):
  cmake/modules/AddLLVM.cmake:1226 (add_lit_target)
  test/CMakeLists.txt:150 (add_lit_testsuites)

  如果报错了,就加多一个编译配置参数

cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF  ../

5. make -j2   //这个2是代表线程数,主要还是看你的电脑,我这里是用虚拟机的,我设置了4个处理器,然后很卡,所有就用了两个线程,反正这里编译用了很长时间,如果一直卡死被杀进程,你就减少线程数据就行了,1个也行的

成功之后,用到的就只有build(刚刚创建的那个文件夹的)目录下bin和lib目录下的文件

之后进入到ndk的toolchains目录,找一份原有的llvm进行复制,我这里复制重命名为llvm-4.0

之后将下图里面的两个文件夹删除,用我们刚刚上面编译的bin和lib

我这里现在用的是android-ndk-r10d的NDK

将ndk/toolchains目录下这三个文件夹,复制一份并且重命名,其实就是修改clang3.4为obfuscator4.0(即最后一横之后的字符是用来识别版本的),等一下编译so,配置的时候是要用到obfuscator4.0 ,用于指定obfuscator4.0 这个编译器的

arm-linux-androideabi-clang3.4 -》arm-linux-androideabi-obfuscator4.0

mipsel-linux-android-clang3.4-》mipsel-linux-android-obfuscator4.0

x86-clang3.4-》x86-obfuscator4.0

 

之后修改上面三个文件夹里面的setup.mk ,将 LLVM_VERSION 改为你对应的版本,我的是4.0

LLVM_VERSION := 4.0
LLVM_NAME := llvm-$(LLVM_VERSION)   //注意这里 llvm-$(LLVM_VERSION) 这个名字是要对应回上面新添加的llvm的,我那里添加的是llvm-4.0

到这里配置基本可以了

 

混淆配置参数

 

-mllvm -fla 开启控制流扁平化

-mllvm -split:激活基本块划分。一起使用时能提高打平能力。

-mllvm -split_num=3:如果激活控制流打平,对每一个基本块应用三次控制流打平。默认使用1次。

_______________________________________________

-mllvm -sub 开启指令替换

-mllvm -sub_loop=3:如果激活了指令替换,使用这个选项在一个函数中应用3次指令替换。默认应用1次。

__________________________________________________

-mllvm -bcf 开启虚假控制流

bcf可以配合下面参数使用
-mllvm -bcf_loop=3 设置函数混淆次数为3次 不加此选项默认为1次
-mllvm -bcf_prob=40 设置代码块被混淆的概率是40%,默认30%
 

 

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := hello   # 输出的包名
LOCAL_LDLIBS += -llog -landroid -lc 
LOCAL_SRC_FILES := hello.cpp  #引入的编译文件
LOCAL_CFLAGS += -mllvm -fla -mllvm -sub  #混淆配置
LOCAL_ARM_MODE := arm
include $(BUILD_SHARED_LIBRARY)

 

Application.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
APP_ABI := armeabi armeabi-v7a   //
NDK_TOOLCHAIN_VERSION := obfuscator4.0  //上面刚刚新添加的4.0作为编译器
APP_PLATFORM = android-16 
APP_STL := c++_shared #llvm编译需此编译库

include $(BUILD_EXECUTABLE)

 

include $(BUILD_SHARED_LIBRARY) //生成的包有后续名  test.so

include $(BUILD_EXECUTABLE)  //生成的包没有后续名  test

 

效果:

 

 

正常可以打包'armeabi',"armeabi-v7a"

,唯一遗憾的是arm64-v8a框架的一直没有成功过

参考来源

https://blog.csdn.net/chrisnotfound/article/details/79026449

https://blog.csdn.net/SilenceCoder/article/details/79401147

https://blog.csdn.net/ASSYIRAN/article/details/81866242

https://www.jianshu.com/p/4a43ca8a9b13

https://www.cnblogs.com/20143605--pcx/p/10314863.html

https://www.jianshu.com/p/2b32949d223e

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值