软件防破解之Android JNI的应用

1、软件安全的重要性:
只要有程序员在,在源代码可读的情况下,无论多么复杂的系统,总有人可以将其破解。

2、我们应该怎么做:
(1)、使源代码不可读;
(2)、使本地数据不可读;
(3)、使网络数据不可读;

3、Android端具体应该怎么做:
(1)、使源代码不可读(对APP进行加固);
(2)、使本地数据不可读(对本地数据进行加密);
(3)、使网络数据不可读(对网络请求的数据进行加密,返回的数据也需要加密,这需要服务端配合);

4、实例对比:
(1)、使源代码可读(使用dex2jar和apktool对apk反编译);
(2)、使本地数据可读(打开相应的本地文件,查看是否是明文的);
(3)、使网络数据可读(使用Fiddler对网络请求进行查看);

5、对本地数据或网络数据进行加密:
使用JNI技术在SO文件中执行加/解密算法或者生成的加密/解秘钥。

什么是JNI?
(1)、jni是本地开放接口,是一个协议
(2)、java可以调用c/c++
(3)、c/c++可以调用java

6、NDK是什么:
Android NDK是一个让开发人员在Android应用中嵌入使用本地代码编写的组件的工具集。Android应用运行在Dalvik虚拟机中。NDK允许开发人员使用本地代码语言(例如C和C++)实现应用的部分功能。这样以代码重用的形式能够给某类应用提供方便,而且在某些情况下能提高运行速度。

7、配置NDK
(1)、创建jni文件夹

这里写图片描述

(2)、编写c/c++代码

这里写图片描述

(3)、打开Project的local.properties文件添加NDK路径
ndk.dir=D\:\\NDK\\android-ndk32-r10-windows-x86_64\\android-ndk-r10

(4)、打开app Module的build.gradle文件,在defaultConfig节点里添加以下代码(注意这里的moduleName,是我们在之前自己编写的类里面加载的so库名)
        ndk {
            moduleName "so_library"
            abiFilters "armeabi"
        }

(5)、还要在gradle.properties里面加上这么一句话:
android.useDeprecatedNdk=true

(6)、生成SO库:
完成以上步骤之后,我们rebuild一下就可以生成so库了,在项目的app\build\intermediates\ndk\debug\lib路径下

这里写图片描述

8、使用JNI调用SO文件

(1)、将生成的SO文件拷贝到libs件夹下

这里写图片描述

(2)、编写JNI Native方法
package com.ndk.jni;

import android.content.Context;

public class JniNative {

    static {
        System.loadLibrary("so_library");//加载so库文件
    }

    /**
     * 请先初始化,否则程序将退出。
     * @param context
     * @return
     */
    public static native String  iniJni(Context context);

    public static native String  getStringFromJNI();

}

(3)、调用JNI Native方法
在需要到的地方调用
JniNative.iniJni(this);
JniNative.getStringFromJNI();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值