代码混淆能起到很好的反逆向分析,类似于 java 的 proguard 混淆和 dex 文件的 dexguard 混淆工具,c/c++ 也有对应的 ollvm 混淆组件。

0x00 OLLVM 简介

Obfuscator-LLVM is a project initiated in June 2010 by the information security group of the University of Applied Sciences and Arts Western Switzerland of Yverdon-les-Bains (HEIG-VD).

The aim of this project is to provide an open-source fork of the LLVM compilation suite able to provide increased software security through code obfuscation and tamper-proofing. As we currently mostly work at the Intermediate Representation (IR) level, our tool is compatible with all programming languages (C, C++, Objective-C, Ada and Fortran) and target platforms (x86, x86-64, PowerPC, PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU, MIPS, MSP430, SystemZ, and XCore) currently supported by LLVM.

0x01 环境信息

系统环境:MacOS

系统版本:10.12.5

NDK版本:android-ndk-r14b

0x02 下载编译

github 上最新版本是4.0,可以直接 clone github 项目编译,可参考提供的 wiki 文档:Installation

$ git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git

$ mkdir build

$ cd build

$ cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/

$ make -j7

这里编译的时候需要 cmake 工具,可以通过 Homebrew 直接安装。编译成功后,生成的文件在 build/bin 下

0x03 与 NDK 整合

新建编译链

在 android-ndk-r14b/toolchains 下新建目录 ollvm-4.0/prebuilt/darwin-x86_64,把前一步编译生成的结果拷贝到此目录下(主要是bin和lib)。

这里最好直接复制 llvm 目录,然后进行修改。手动创建的时候遇到过编译失败,直接复制修改就没这种问题。

[armeabi-v7a] Compile++ thumb: native <= jni_export.cpp

make: execvp: /Users/xiangqing/Documents/code/ollvm/build/bin: Permission denied

make: *** [/Users/xiangqing/Documents/project/droid-ndk/example/src/main/obj/local/armeabi-v7a/objs/native/jni_export.o] Error 127

配置编译链

在 android-ndk-r14b/build/core/toolchains 目录下,新建目录 arm-linux-androideabi-clang-ollvm4.0,拷贝目录 arm-linux-androideabi-clang 下的文件 config.mk 与 setup.mk 到 arm-linux-androideabi-clang-ollvm4.0 中,修改setup.mk文件。

#

# Override the toolchain prefix

#

############################ 原始配置 ############################

#LLVM_TOOLCHAIN_PREBUILT_ROOT := $(call get-toolchain-root,llvm)

#LLVM_TOOLCHAIN_PREFIX := $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/

#################################################################

############################ 修改后 #############################

OLLVM_NAME := ollvm-4.0

LLVM_TOOLCHAIN_PREBUILT_ROOT := $(call get-toolchain-root,$(OLLVM_NAME))

LLVM_TOOLCHAIN_PREFIX := $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/

#其他配置不做修改

......

config.mk 保存的是该编译链对应的 CPU 架构,所以上面修改完只能编译 armeabi 和 armeabi-v7a 架构的 so。如果需要编译其他架构需要做相应的修改。文件夹名也必须按照严格的格式,如 mips 的需要添加文件夹:mipsel-linux-android-clang-ollvm4.0,修改相应的 setup.mk 文件。

0x04 OLLVM 使用

使用 ollvm 进行 ndk 的编译需要对 Application.mk 和 Android.mk 文件做相应的修改。

Android.mk 中添加混淆编译参数:

LOCAL_CFLAGS += -mllvm -sub -mllvm -bcf -mllvm -fla

Application.mk 中配置 NDK_TOOLCHAIN_VERSION

APP_ABI := x86 armeabi-v7a x86_64 arm64-v8a mips armeabi mips64

NDK_TOOLCHAIN_VERSION := clang-ollvm4.0

参考文章:

android ndk 混淆,OLLVM + NDK 混淆编译环境搭建相关推荐

  1. Android 8.1 【FriendlyARM】编译环境搭建与镜像烧写

    NanoPC-T4 不仅是世界上最小的全功能接口 RK3399 一体化主板, 而且是一款完全开源的高性能计算平台.它的尺寸只有 100x64mm,标配4GB LPDDR3 内存和 16GB 闪存, 板 ...

  2. android studio ndk HelloWorld 编译环境搭建

    android studio NDK helloworld 项目 第一步 android studio ndk 编译环境搭建 http://yunpan.cn/c3cCxxgwrqDaL 访问密码 6 ...

  3. 鸟人的Android揭秘(3)——Android 编译环境搭建

    一.主机环境要求 要顺利编译 Android 源代码,硬件环境和操作系统都必须满足一定的条件.官方推荐的硬件环境配置是: 编译 Gingerbread(2.3.x)及后续版本必须使用64位系统 需至少 ...

  4. Android源码编译环境搭建教程 (一) - Ubuntu系统构建

    Android源码编译环境搭建教程 (一) - Ubuntu系统构建 本教程为感兴趣的同学提供Android源码编译的环境搭建,当然这里都是基于windows系统,mac系统也差不多,将相应的软件替换 ...

  5. win10编译OpenCV4Android系列1-Android编译环境搭建

    win10编译OpenCV4Android系列1-Android编译环境搭建 前言 一.配置JDK 1.下载JDK 2.安装JDK 二.配置AndroidSDKTools 1.下载AndroidSDK ...

  6. Qt | Qt For Android、Qt5.14.2安卓开发环境搭建详细步骤

    Qt | Qt For Android.Qt5.14.2安卓开发环境搭建详细步骤 目录 Qt | Qt For Android.Qt5.14.2安卓开发环境搭建详细步骤 1.简介 2.软件下载 1.J ...

  7. android上的i-jetty (1)环境搭建

    android上的i-jetty (1)环境搭建 android ftp swiftp  http://code.google.com/p/swiftp/ 介绍下如果把android设备作为一个web ...

  8. android4 设置栈大小,【技术分享】Android内核漏洞利用技术实战:环境搭建栈溢出实战...

    [技术分享]Android内核漏洞利用技术实战:环境搭建&栈溢出实战 2017-08-14 16:22:02 阅读:0次 预估稿费:300RMB 投稿方式:发送邮件至linwei#360.cn ...

  9. 全志JAVA_android 全志a10(2.3.4)开发1(编译环境搭建)

    android 全志a10(2.3.4)开发一(编译环境搭建) android系统编译可分为两部分:一部分是linux内核编译:另一部分是android源码编译:全文中主要是说明从搭建编译环境,安装编 ...

  10. 全志R16_Tina SDK编译环境搭建

    2. Tina SDK 目录结构 ├── tina │ ├── abi │ ├── app │ ├── bionic │ ├── build │ ├── device │ │ ├── softwinn ...

最新文章

  1. VirtualKD + VMWare双机调试(失败)
  2. python中访问命令行参数_如何在Python中访问命令行参数?
  3. uva 10692——Huge Mods
  4. 前端学习(1734):前端系列javascript之发行
  5. Django 模板系统2
  6. 国外地球物理强势学校与知名研究组
  7. notepad++ 中增加lua语法检查快捷键
  8. (CVPR-2021)具有深度通用线性嵌入的跨视角步态识别
  9. 与关系型数据库相比,MongoDB的优缺点
  10. 初探MYD-AM335x开发板
  11. java图形用户界面基础
  12. Win10+阿里云ECS+Hexo搭建个人博客笔记
  13. LINUX——正则表达式
  14. 神经网络自动布局技术,神经网络自动布局原理
  15. 解决表格刷新时抖动闪烁问题
  16. 2022湖南株洲服饰产业数智互联网峰会暨湖南服饰产业互联网高峰论坛成功举办
  17. 基于Core Text实现的TXT电子书阅读器
  18. linux终端分辨率对应表,Linux下设置终端分辨率,最全的VGA代码和分辨率对照表...
  19. [A Beginner‘s Guide to Irrational Behavior][怪诞行为学]Week1: 你的直觉是对还是错?
  20. C# 导入(读取) WPS ET文件

热门文章

  1. Golang操作数据库
  2. ubuntu - sudo in php exec
  3. 字段分行加一 sql语句
  4. PHP Cookbook读书笔记 – 第11章Session和持久化
  5. 20200620每日一句
  6. Steve Pavlina:如何ASAP找到人生目标?
  7. 190321每日一句
  8. 181220每日一句
  9. Atitit、 知识管理法 目录 1. 信息管理的演进 1 2. 显性知识管理 1 3. 隐形知识 1 4. 知识产权保护 1 1.信息管理的演进 文献管理,计算机管理,信息资源管理,情报管理,直
  10. Atitit 医学之道 attilax总结