Android安全之NDK的代码混淆 -- Ollvm

安卓开发者交流群欢迎您加入
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
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值