安卓开发者交流群欢迎您加入
418263790
关键代码放JNI (C/C++)里真的很安全吗?
很多Android开发者都认为 把关键代码放到C/C++里 然后打包静态库 然后破解者就无法破解
我想说 你太嫩了
不信? 举个例子:
编写以下jnil例子
#include <jni.h>
#include "android_log.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
jint JNICALL
Java_com_test_Test(JNIEnv *env, jclass t,jint k) {
int key = 8;
return key^k;//假设这是个算法
}
然后使用ndk编译
ubuntu@ubuntu:~/桌面/Android/project/AndroidNDK-master/jni$ ndk-build
[armeabi-v7a] Compile thumb : SecShell <= test.c
[armeabi-v7a] SharedLibrary : libSecShell.so
[armeabi-v7a] Install : libSecShell.so => libs/armeabi-v7a/libSecShell.so
ubuntu@ubuntu:~/桌面/Android/project/AndroidNDK-master/jni$
得到so文件 然后打开 IDA pro(反汇编工具) 没有的百度下载
可以看到 我们的jni函数名: Java_com_test_Test
点进去
然后按F5 查看伪代码
//IDA-pro 伪代码效果
int __fastcall Java_com_test_Test(int a1, int a2, int a3)
{
return a3 ^ 8;
}
如图 a3则是jint k , int key=8 于是相当于 k^8, 则为a3^8;
看到了吧 so的代码都能看到了 和我们的jni没编译前的代码基本一致, 你还觉得jni安全么
插句话: 在 Android上实现OLLVM的资料实在太少了 不是写的不全 或者写的不知道是从哪里抄来的 等等 好像写这些高端文章 害怕我们学会似的 写一半又故意留一半没说 这还让我们怎么学习啊?看你装B吗? … 我实在看不惯才写下了这篇文章 因此,转载请注明出处!!!
因此 本文就是为了解决这个问题 使用 OLLVM对c代码进行混淆(类似java的混淆,但又不一样)
环境:windows+vmware虚拟机
Ubuntu 64位:
先贴一段从官网copy过来的,对OLLVM的说明
- Obfuscator-LLVM is a project initiated in June 2010 by the information security group of the University of Applied Sciences and Arts Western Switzerland of Yverdon-les-Bains (HEIG-VD).
The aim of this project is to provide an open-source fork of the LLVM compilatio