Android SO文件保护OLLVM混淆加固——混淆篇(二)

国庆假期,别人都玩的玩,回家的回家,我索性无聊,品一杯香茶,记一篇博客,望能够对这方面的网友有所帮助。。。。。

*************************************************************************

记上一次对JNI接口函数的混淆有一段时间了,没看的网友可以看这里:点击打开链接

今天我们分析最近在移动端比较火的源码级别的编译混淆OLLVM,除了各大论坛的压轴题用到了此技术,包括各移动加固厂商也相继用到了此技术,说明此技术的重要性,下面开搞。。

原理篇:

这里我们需要明白几个重要问题:

1.LLVM是什么?

2.OLLVM又是什么?

3.为什么这个可以用到Android的编译上?

对于第一个问题:

:LLVM是一个编译器框架,由于设计上的众多优点,被很多编译器所采用,比如知名的Clang,现在最大的支持方为苹果公司,至于它具体的优点,设计等等,网上很多,总之很牛掰。

对于第二个问题:

LLVM-Obfuscator 是瑞士西北应用科技大学安全实验室针对LLVM编译组件开发的代

码混淆工具,该工具完全开源,目的是为了增加逆向工程的难度,保证代码的安全性。

我们可以把这个OLLVM这个结合到ndk中使我们产生编译产生混淆代码,后面会细讲。

对于第三个问题:

:对于android4.4以后引入ART机制,增加了llvm编译器的分量,我们来看一下这个图:


实现篇:

环境:Ubuntu 14.04   64bit

步骤:

第一步:

先将ndkllvm.tar(附件会给出)解压到 /opt 目录中 命令如下
$ sudo tar -xv -f ndkllvm.tar -C /opt

第二步:

配置环境变量
$ vim ~/.profile //在文件末尾添加 
export LLVM=/opt/Android-ndk-r10b

如图:


第三步:
加载环境变量
$ source ~/.profile

第四步:

然后可进入 llvm_project/hello 目录 通过
$ $LLVM/ndk-build // 进行编译项目了

注意:

这个可能会遇到点小问题,由于时间比较早了我记不太清了,好像是缺少一部分32位的库,百度一发网上有解决办法。

这里我们拿我之前写的一个反调试工程,进行操作,以便看的刚清楚,源码会放到后面。

我们在编译前:

注意:

第一:把对应的xxx.c或者xxx.cpp文件放在llvm_project/hello/jni目录下面;

第二:编写正确的与之对应的Android.mk文件(如果用Android studio要注意);

如图所示:


最后在AK下面重编译打包,OK,运行结果是:



混淆的效果:

使得IDA的空格键失效显示不了控制流图,这个不知道为什么会这样?以前混淆过后的控制流图变的异常的复杂。

在后面我会总结针对这两种较为流行混淆的反混淆以及逆向破解方法。

总结篇:

环境搭建的核心步骤:

第一步:
先将  ndkllvm.tar 解压到 /opt 目录中 命令如下
$ sudo tar -xv -f ndkllvm.tar -C /opt
第二步:
然后 配置环境变量
$ vim ~/.profile  //在文件末尾添加 
export LLVM=/opt/Android-ndk-r10b
第三步:
加载环境变量
$ source ~/.profile
第四步:
然后可进入 llvm_project/hello 目录 通过
$ $LLVM/ndk-build   

注意的问题:

第一:补充32位的依赖库;

第二:把对应的xxx.c或者xxx.cpp文件放在llvm_project/hello/jni目录下面;

第三:编写正确的与之对应的Android.mk文件(如果用Android studio要注意);


附件源码:点击打开链接    


    

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值