记录某加密工具使用

/ 0评 / 0

去官网下载http://www.safengine.com/mobile/download.html for ndk版本

自己已经同步了一份 http://qtfreet.com/se-llvm-ndk.zip

然后按照readme.txt中的步骤去覆盖ndk中的clang.exe文件

编写Android.mk 和Application.mk 

示例:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES :=        \
    $(LOCAL_PATH)        \
    $(LOCAL_PATH)/Android \
    $(LOCAL_PATH)/AntiDebug \
    $(LOCAL_PATH)/EncryptUtils \
$(LOCAL_PATH)/Utils
    
LOCAL_LDLIBS := -lm -llog
include $(CLEAR_VARS)
LOCAL_MODULE    := qtfreet
LOCAL_CFLAGS :=   -Os  -fvisibility=hidden
LOCAL_SRC_FILES := Aes/aes_cbc.cpp Aes/aes_core.cpp Aes/cbc128.cpp Base64/Base64.cpp hello.cpp
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -ldl -llog -lz  #打印日志
LOCAL_STATIC_LIBRARIES := libc 
include $(BUILD_SHARED_LIBRARY)
include $(call all-makefiles-under,$(LOCAL_PATH))

因为不怎么了解Android.mk语法,搞了个笨方法,直接在LOCAL_SRC_FILES里包含了所有的c文件

写了个脚本

private static List<String> filelist = new ArrayList();

public static void main(String[] args) {
    getFiles("C:\\Users\\qtfreet\\Desktop\\Openssl_Aes_CBC128_PKCS5Padding\\app\\src\\main\\jni");
    StringBuilder sb = new StringBuilder();
    for (String path : filelist) {
      //  System.out.println(path);
        if (path.endsWith(".cpp") || path.endsWith(".c")) {
            sb.append(path.replace("C:\\Users\\qtfreet\\Desktop\\Openssl_Aes_CBC128_PKCS5Padding\\app\\src\\main\\jni\\", "").replace("\\", "/") + " ");
        }
    }
    System.out.println(sb.toString());
}

private static void getFiles(String filePath) {
    for (File file : new File(filePath).listFiles()) {
        if (file.isDirectory()) {
            getFiles(file.getPath());
        } else {
            filelist.add(file.getPath());

        }
    }
}

Application.mk

APP_ABI := armeabi x86
APP_STL := stlport_static
APP_CPPFLAGS +=-fpermissive
NDK_TOOLCHAIN_VERSION := clang3.6

使用方法:

1.在JNI项目的Application.mk中增加NDK_TOOLCHAIN_VERSION := clang3.6

2.根据需要在代码中增加SDK标记:

    函数声明:

        __attribute((obfuscate)) 对该函数使用加密编译

        __attribute((no_obfuscate)) 对该函数不使用加密编译

        __attribute((min_obfuscate)) 设置为最低加密等级,免费版强制使用最低加密等级

    批量标记:

        #pragma obfuscate on/off 加密编译该区域中的所有函数(保留以上单独设定)

3.执行ndk-build编译(使用-B重新编译项目)

发表评论

电子邮件地址不会被公开。 必填项已用*标注