OLLVM

OLLVM

0X01 OLLVM简介

OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学安全实验室于2010年6月份发起的一个项目,该项目旨在提供一套开源的针对LLVM的代码混淆工具,以增加对逆向工程的难度。目前,OLLVM已经支持LLVM-3.6.1版本。

LLVM是一个优秀的编译器框架,它也采用经典的三段式设计。前端可以使用不同的编译工具对代码文件做词法分析以形成抽象语法树AST,然后将分析好的代码转换成LLVM的中间表示IR(intermediate representation);中间部分的优化器只对中间表示IR操作,通过一系列的Pass对IR做优化;后端负责将优化好的IR解释成对应平台的机器码。LLVM的优点在于,中间表示IR代码编写良好,而且不同的前端语言最终都转换成同一种的IR。

LLVM IR是LLVM的中间表示,优化器就是对IR进行操作的,具体的优化操作由一些列的Pass来完成,当前端生成初级IR后,Pass会依次对IR进行处理,最终生成后端可用的IR。

OLLVM的混淆操作就是在中间表示IR层,通过编写Pass来混淆IR,然后后端依据IR来生成的目标代码也就被混淆了。得益于LLVM的设计,OLLVM适用LLVM支持的所有语言(C, C++, Objective-C, Ada 和 Fortran)和目标平台(x86, x86-64, PowerPC, PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU, MIPS, MSP430, SystemZ, 和 XCore)。

0X02 OLLVM Android编译环境搭建

以下,介绍OLLVM Android编译环境的搭建过程。环境信息:ndk(android-ndk-r10e)、LLVM(llvm-3.6.1)

首先下载源码,编译OLLVM混淆器,这里采用LLVM的版本是3.6.1。下载编译过程如下:

git clone -b llvm-3.6.1 https://github.com/obfuscator-llvm/obfuscator.git
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE:String=Release ../obfuscator/
make -j5

下载的源码里已经包含了LLVM和Clang,编译完成后,编译好的二进制程序都存放在build/bin目录下。

依据github上的 wiki ,bin目录下编译好的工具链可以直接用来编译混淆linux下的程序,就像我们常用的gcc那样。若想使用OLLVM来混淆Android Native程序,还需将bin目录下的工具链整合进ndk环境中。

按照ndk编译工具链的组织结构,我们照样子新建一条工具链即可。在toolchains目录下新建obfuscator-llvm-3.6目录,并将llvm-3.6目录下的config.mk、setup.mk和setup-common.mk拷贝到obfuscator-llvm-3.6目录中,不做任何修改。然后,把源码编译好的bin目录和lib目录按照llvm-3.6中prebuilt/linux-x86_64的目录格式拷贝。接着,在toolchains目录下分别建立arm-linux-androideabi-obfuscator3.6, mipsel-linux-android-obfuscator3.6, x86-obfuscator3.6目录,注意文件夹的前缀要与原toolchains中的目录保持一致,然后把arm-linux-androideabi-clang3.6, mipsel-linux-android-clang3.6, x86-clang3.6文件夹下的 config.mk 和 setup.mk 对应拷贝到上述三个文件夹中,此时要分别修改 setup.mk 中的 LLVM_NAME ,即将其指定到开始建立的obfuscator-llvm-3.6目录。

LLVM_NAME := obfuscator-llvm-$(LLVM_VERSION)

若编译64位版本的so,也要按照上面的格式依次配置x86_64-obfuscator3.6,mips64el-linux-android-obfuscator3.6,aarch64-linux-android-obfuscator3.6三个文件夹。还要修改$NDK_PATH/build/core/setup-toolchain.mk文件,在NDK_64BIT_TOOLCHAIN_LIST := 加入 obfuscator 对应的NDK_TOOLCHAIN_VERSION

NDK_64BIT_TOOLCHAIN_LIST := obfuscator3.6 clang3.6 clang3.5 clang3.4 4.9

至此,新增加的具备OLLVM混淆的编译工具链就添加完成了,在编译native程序时,在Android.mk和Application.mk中配置编译参数即可。

在Application.mk中指定编译器名字:

NDK_TOOLCHAIN_VERSION := obfuscator3.6

在Android.mk中设置混淆参数:

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

这样配置完成后,使用ndk-build命令即可编译出混淆代码。代码在64位机器上执行正常,内容仅仅是一条if-else语句,混淆的效果确实不错。

参考

基于andserver搭建调用so环境(已更新 抖音11.0.0 x-gorgon)
抖音11 x-gorgon逆向,可参考

 java.lang.String r3 = "X-Gorgon"
  java.lang.String r4 = "X-Khronos"
  java.lang.String r5 = ""
  java.util.HashMap r6 = new java.util.HashMap
  r6.<init>()

 //返回相关
  L_0x02ec:
                    return r6

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,576评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,515评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,017评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,626评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,625评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,255评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,825评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,729评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,271评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,363评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,498评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,183评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,867评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,338评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,458评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,906评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,507评论 2 359