NDK-Hikari混淆C/C++

    对代码进行混淆能够增加反逆向的难度,即使被反逆向,也让破译者难以阅读源码,类似的Java中有proguard混淆工具,对于C/C++编译的代码也有混淆工具,比如OLLVM(它是基于LLVM,LLVM可以简单的理解成编译C/C++源码的编译器,而OLLVM就是基于LLVM的用于对编译之后的C/C++源码进行代码混淆的开源库)、Hikari(基于OLLVM,但是比OLLVM更加稳定,bug少,会了OLLVM,基本上也就会Hikari)。在多说一句,不要认为将一些密钥编译成so库就会很安全,不信可以拿IDA工具对so库进行反编译,大致的逻辑还是清晰可见。我个人觉得使用Hikari或者OLLVM我认为的难点在于编译,因为我们最终将其与NDK进行结合时,仅仅是用到其编译后的文件(不过在Hikari使用过程中,可能需要到Hikari中寻找缺失的头文件)。


1、环境准备

       Hikari的作者暂时不支持在Windows环境编译Hikari,因此我们需要准备mac或者linux系统。下面是进行时使用的环境:

        虚拟机(VMware workstation)、

        ubuntu-18.04.3           镜像下载地址:

                https://mirrors.tuna.tsinghua.edu.cn/

        andkroid_ndk_r19c   下载地址: 

                https://developer.android.google.cn/ndk/downloads/index.html

环境目前大概就需要这些,下面开始。

2、安装Hikari需要的软件

  在ubuntu安装软件时,可能会遇到特别慢的情况,建议更换一下ubuntu软件源地址,参考文章:

                  https://blog.csdn.net/shanpenghui/article/details/80433555

以下都是在命令行终端进行操作

       1>首先安装cmake:

             输入命令:       sudo apt-get install cmake

            安装成功后检查是否安装成功:”cmake --version”出现版本号则表示安装成功

       2>安装g++

            输入命令:        sudoapt-get install g++

            检查是否安装成功: g++ --version

       3>安装python

           输入命令:        sudoapt-get install python python-dev -y

           检查是否安装成功:python –version

     4>安装ninja

            输入命令:        sudo apt-get install cmakeninja-build -y

            检查是否安装成功:ninja –version

     5>安装libxml2

            输入命令:      sudo apt-get install libxml2-devlibncurses5-dev swig libedit-dev doxygen -y

            上面需要注意的是“libxml2“中的倒数第二个是字母”L“,不是数字1.

3、接下来就是克隆Hikari开源库

          1>github地址:https://github.com/HikariObfuscator/Hikari.git

      克隆命令:

       git clone --recursive -b release_80  https://github.com/HikariObfuscator/Hikari.git Hikari

       这里可能会遇到很慢很慢的情况,大家可以更换成以下命令(瞬间清爽):

       git clone --recursive -b release_80  https://gitee.com/chenzimo/Hikari.git  Hikari


       到这里我们已经把Hikari开源库给克隆下来了,接下来都是一系列的命令

1> 进入Hikari目录: cd Hikari

2> 同步一下Hikari中使用到的第三方库: git submodule update --remote --recursive

3> 同步成功后返回上一级目录:cd ../

4>  在Hikari同级目录下创建build目录: mkdir build

5> 进入创建的build目录: cd build

6>  输入编译命令: cmake -G"Ninja" -DCMAKE_BUILD_TYPE=MinSizeRel -DLLVM_APPEND_VC_REV=on ../Hikari         上述命令中最后跟的是你克隆下来的Hikari目录的路径

7> 输入ninja,这一步进行正真的编译,我大概编译了3个小时: ninja

到这里我们编译好的Hikari文件在刚刚创建的build目录中,等会我们需要用到build目录中的bin目录。


4、将NDK和Hikari结合

       我使用的nkd版本: andkroid_ndk_r19c  进行解压并且将Android studio使用的ndk版本指定为上述版本。


NDK-Hikari混淆C/C++_第1张图片
指定Android sudio使用的ndk版本

重点来了,进入解压好的andkroid_ndk_r19c/ toolchains/llvm/prebuilt/linux-x86_64目录,将我们之前编译好的Hikari目录(也就是前面的build目录)下的bin目录拷贝出来,去替换掉andkroid_ndk_r19c/toolchains/llvm/prebuilt/linux-x86_64/下的bin文件,恭喜你你已经成功的将环境搭建好了,接下来就是利用Android Studio创建一个包含C/C++的Android项目,直接进行编译、安装之类的操作。但是这里可能会遇到头文件找不到的情况,不要慌,我们可以在克隆下的Hikari库中找到这些头文件(Hikari/tools/clang/lib/Headers/),找到头文件之后把它复制到如下目录:android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/

好了,接下来只需要在相应的模块下的build.gradle文件配置混淆指令(包括指令混淆、控制流混淆之类的,具体google).


具体混淆指令google

你可能感兴趣的:(NDK-Hikari混淆C/C++)