IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android ndk ollvm环境搭建 -> 正文阅读

[移动开发]android ndk ollvm环境搭建

ollvm 地址

GitHub - obfuscator-llvm/obfuscator

本文是针对win32环境搭建教程?

一 。需要工具

1?mingw-w64.exe ?基于windows的GNU gcc编译器

2?cmake.msi??针对不同编译器生成源代码构建文件

3?ndk版本?android-ndk-r10e

所需工具参见文章最后百度网盘链接

二。开始编译

如果下载完毕,解压 你会得到一下目录

?顺序执行一下命令

::编译
mkdir build
cd build
cmake -G “MinGW Makefiles” -DCMAKE_BUILD_TYPE=Release ../
mingw32-make -j7

以下是编译截图

?

编译结束后 在build -》bin 目录下 会生成一下exe

?三。开始配置ndk

1 到ndk 目录 android-ndk-r10e\toolchains

2 新建?arm-linux-androideabi-clang-ollvm4.0 和?ollvm4.0目录

3 复制 ndk 原来?llvm-3.6 目录下的所有文件到??ollvm4.0

? ? ????????3.1 复制 上面编译好build-》bin 下的exe文件 到?android-ndk-r10e\toolchains\ollvm4.0\prebuilt\windows-x86_64\bin 目录

? ? ? ? 复制之前最好清空android-ndk-r10e\toolchains\ollvm4.0\prebuilt\windows-x86_64\bin 目录下的全部文件

? ????????? 3.2 复制?arm-linux-androideabi-clang3.6 目录下所有文件到??arm-linux-androideabi-clang-ollvm4.0

?4 修改?arm-linux-androideabi-clang-ollvm4.0 -》setup.mk?

? ? 参照修改配置

? ?

LLVM_NAME := ollvm-4.0
LLVM_TOOLCHAIN_ROOT := $(NDK_ROOT)/toolchains/$(LLVM_NAME)
LLVM_TOOLCHAIN_PREBUILT_ROOT := $(call host-prebuilt-tag,$(LLVM_TOOLCHAIN_ROOT))
LLVM_TOOLCHAIN_PREFIX := $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/

TOOLCHAIN_VERSION := 4.8
TOOLCHAIN_NAME := arm-linux-androideabi-$(TOOLCHAIN_VERSION)
TOOLCHAIN_ROOT := $(NDK_ROOT)/toolchains/$(TOOLCHAIN_NAME)
TOOLCHAIN_PREBUILT_ROOT := $(call host-prebuilt-tag,$(TOOLCHAIN_ROOT))
TOOLCHAIN_PREFIX := $(TOOLCHAIN_PREBUILT_ROOT)/bin/arm-linux-androideabi-
LLVM_TOOLCHAIN_PATH := $(NDK_ROOT)/toolchains/ollvm4.0/prebuilt/windows-x86_64/bin/
TARGET_CC := $(LLVM_TOOLCHAIN_PATH)clang$(HOST_EXEEXT)
TARGET_CXX := $(LLVM_TOOLCHAIN_PATH)clang++$(HOST_EXEEXT)

通过以上操作 ollvm 环境就搭建好了 接下来就是 可以开始撸ollvm 了

四。开始使用

ollvm 混淆模式支持以下四模式

.-mllvm -fla:控制流扁平化

. -mllvm -sub:指令替换

. -mllvm -bcf:虚假控制流程

. -mllvm -sobf: 字符串加密

如果你在c++ 层 有aes xxrea 等加密 可以开启?-sobf

Android.mk 配置

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_LDLIBS :=-llog

LOCAL_MODULE := test

LOCAL_SRC_FILES := Test.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH) 

#开启三种混淆方式  -mllvm -sobf 字符串模糊处理  -mllvm -sub指令替换     -mllvm -bcf  虚假控制  -mllvm -fla 平坦控制流
#APP_CPPFLAGS += -mllvm -fla -mllvm -sobf  -mllvm -sub  -mllvm -sobf  
LOCAL_CFLAGS += -mllvm -sub -mllvm -bcf -mllvm -fla -mllvm -sobf
#APP_ABI := x86 armeabi-v7a

include $(BUILD_SHARED_LIBRARY)

#$(call import-module,mmp)

测试 cpp


// Created by Administrator on 2017/1/13.
//
#include "Test.h"
#include <string.h>
#include <stdio.h>

#include <sys/ptrace.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <signal.h>
#include <sys/time.h>
#include <sys/inotify.h>
#include <unistd.h>
#include "Sgin.h"

#include <android/log.h>
#define  LOG_TAG    "test"
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)



void enstr(char * Text)
{
    //printf("in enstr");
    char cryptograph[128]={'\0'};
    int count=strlen(Text);
    for(int i = 0; i < count; i++)
    {
        cryptograph[i]=Text[i]+i+5;
    }
    printf("加密后:%s\n",cryptograph);
}

void dnstr(char * Text)
{
    printf("in dnstr");
    char cryptograph[128]={'\0'};
    int count=strlen(Text);
    for(int i = 0; i < count; i++)
    {
        cryptograph[i]=Text[i]-i-5;
    }
    printf("解密后:%s\n",cryptograph);
}

jint JNI_OnLoad(JavaVM* vm, void* reserved){
	LOGD("in Jni_OnLoad ");


	//anit_debug2(); #反调试
	char Text[128]={'a','b','c','d'};
	enstr(Text);
    JNIEnv* env;
    if ( vm->GetEnv( reinterpret_cast<void**>(&env), JNI_VERSION_1_6 ) != JNI_OK )
    {
    	return -1;
    }
    //sub_0329(env);
    return JNI_VERSION_1_6;
}


下面是开启ollvm 和 没有混淆代码对比

可以很明显的看到右边void enstr(char * Text) 函数多了很多分支?

cfg对比?

链接:https://pan.baidu.com/s/1viG0rZNlLBRgnifKXdavrg?
提取码:oip3

参考???https://github.com/obfuscator-llvm/obfuscator?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:03:58  更:2022-07-04 23:07:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:50:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码