Android App 中隐藏敏感信息

http://my.oschina.net/liucundong/blog/161646

说明     

     我们开发的Android应用,大部分代码使用Java实现,当应用被反编译之后,一切信息都是暴漏出来的,如果一些信息我们希望不被暴漏出来,如:加密算法的密钥、在各大开放平台申请得到的AppKey、AppSecret等,为了解决这个问题,我们可以使用*.so文件将这些信息隐藏起来,并在Java中使用JNI调用。

    实现

     首先需要下载NDK并搭建开发环境
     http://developer.android.com/tools/sdk/ndk/index.html

     环境搭建成功之后,可按照以以下步骤实现:

    1.首先,创建一个普通的Android项目(TestJNI),并为该项目增加Native Support;


    2.编写使用本地方法的Java代码;

?
1
2
3
4
package com.example.testjni;
public class CommonUtils {         
   public static native String getSecret();
}

    3.生成jni需要的头文件;

到TestJNI/bin/classes目录中,运行命令:javah -jni com.example.testjni.CommonUtils

之后,在该目录下将会生成头文件:com_example_testjni_CommonUtils.h

    4.编写C代码;

将com_example_testjni_CommonUtils.h拷贝到TestJNI\jni\目录,并且删除该目录下eclipse自动生成的TestJNI.cpp(Eclipse自动生成的),然后新建com_example_testjni_CommonUtils.h.c。
内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
/*
  * com_example_testjni_CommonUtils.c
  *
  *  Created on: 2013-9-13
  *      Author: cundong
  */
#include <jni.h>
#include <com_example_testjni_CommonUtils.h>
 
JNIEXPORT jstring JNICALL Java_com_example_testjni_CommonUtils_getSecret
   (JNIEnv * env, jclass thiz){
     return (*env)->NewStringUTF(env, "http://www.baidu.com" ); //c
}

    5.修改Android.mk文件

内容如下:

?
1
2
3
4
5
6
7
8
LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE    := TestJNI
LOCAL_SRC_FILES := com_example_testjni_CommonUtils.c
 
include $(BUILD_SHARED_LIBRARY)
    6.编译得到*.so文件。

编译工程,得到:TestJNi\libs\armeabi\libTestJNI.so

7.在Java代码中使用该so文件

(1)加载so(确保调用该so文件的libs\armeabi目录中存在该so文件):

?
1
2
3
static {
     System.loadLibrary( "TestJNI" );
}
(2)调用本地方法: 
?
1
2
String str = CommonUtils.getSecret();
Toast.makeText( this , "str->" +str, Toast.LENGTH_SHORT).show();
如此,便将敏感信息隐藏到*.so中了。 

    注意事项

     如果遇到:Method 'NewStringUTF' could not be resolved 问题,可以使用如下方式解决:

Go to the project's Properties -> C/C++ General -> Code Analysis. Click the "Use project settings" radio button (or "Configure Workspace Settings..." button). Disable (uncheck) the "Method cannot be resolved" checkbox. 

http://stackoverflow.com/questions/15899813/eclipse-method-newstringutf-could-not-be-resolved

    如果遇到:Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8

请参考:http://blog.ready4go.com/blog/2013/05/18/resolve-android-ndk-warning-app-platform-android-14-is-larger-than-android-minsdkversion-8/

        demo下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值