• 大小: 211KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-21
  • 语言: Java
  • 标签: Dex加载  JNI  APK加固  

资源简介

http://blog.csdn.net/csdn49532/article/details/50624627 配套代码,使用JAVA和JNI二种方法动态加载dex,调用dex中的方法,对android APK进行加固,防止APK被破解。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include “JNIUtil.h“
#include 
#include 
#include 
#include 
extern “C“
{
string copyDexToData(JNIEnv* env jobject asset string dexName
string dataPath);
void Java_com_example_dexload_NativeLoad_loadDex(JNIEnv* env jobject obj
jstring dexName jstring dataPath jobject asset)
{
JavaVM* jvm;
env->GetJavaVM(&jvm);
JNIUtil::SetJavaVm(jvm);
JNIUtil util;
string strDexName = util.Jstring2String(dexName);
string strdataPath = util.Jstring2String(dataPath);
string strDexPath = copyDexToData(env asset strDexName strdataPath);
string strDestDexPath = strdataPath + “/cache“;
LOGI(“%s“strDexPath.c_str());
LOGI(“%s“strDestDexPath.c_str());
jstring jDexPath = util.String2Jstring(strDexPath.c_str());
jstring jDestDexPath = util.String2Jstring(strDestDexPath.c_str());
//查找ClassLoader类并调用静态方法获取系统的classloader对象
jclass classloaderClass = env->FindClass(“java/lang/ClassLoader“);
jmethodID getsysloaderMethod = env->GetStaticMethodID(classloaderClass
“getSystemClassLoader“ “()Ljava/lang/ClassLoader;“);
jobject loader = env->CallStaticobjectMethod(classloaderClass
getsysloaderMethod);

//查找DexClassLoader类并且创建对象生成优化后的dex
jclass dexLoaderClass = env->FindClass(“dalvik/system/DexClassLoader“);
jmethodID initDexLoaderMethod = env->GetMethodID(dexLoaderClass “
“(Ljava/lang/String;Ljava/lang/String;“
“Ljava/lang/String;Ljava/lang/ClassLoader;)V“);
jobject dexLoader = env->Newobject(dexLoaderClass initDexLoaderMethod
jDexPath jDestDexPath  NULL loader);

//赋值给java端的DexClassLoader对象
jclass native = env->GetobjectClass(obj);
jfieldID loadID = env->GetFieldID(native “mDex“
“Ldalvik/system/DexClassLoader;“);
env->SetobjectField(obj loadID dexLoader);
}
void Java_com_example_dexload_NativeLoad_test(JNIEnv* env jobject obj
jobject ac)
{

//获取java端的ClassLoader对象
jclass native = env->GetobjectClass(obj);
jfieldID loadID = env->GetFieldID(native “mDex“
“Ldalvik/system/DexClassLoader;“);
jobject load = env->GetobjectField(obj loadID);

//调用ClassLoader的方法loadClass加载dex中的Test1类
jclass classloaderClass = env->GetobjectClass(load);
jmethodID loadClassMethod = env->GetMethodID(classloaderClass “loadClass“
“(Ljava/lang/String;)Ljava/lang/Class;“);
JNIUtil util;
jstring Test1ClassName = util.String2Jstring(“com.example.dextest.Test1“);
jclass javaClientClass = (jclass) env->CallobjectMethod(load
loadClassMethod Test1ClassName);

//创建Test1类的对象并且调用其中的test方法
jmethodID initFuncTest = env->GetMethodID(javaClientClass ““ “()V“); //构造函数ID
jobject objTest1 = env->Newobject(javaClientClass initFuncTest);
jmethodID Test_method = env->GetMethodID(javaClientClass “test“
“(Landroid/app/Activity;)V“);
if (Test_method != NULL)
env->CallVoidMethod(objTest1 Test_method ac);
}
st

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件         475  2015-12-23 10:31  DexLoad\.classpath
     文件        3699  2015-12-31 15:09  DexLoad\.cproject
     文件        1467  2015-12-31 15:09  DexLoad\.project
     文件        1104  2016-02-01 16:22  DexLoad\AndroidManifest.xml
     目录           0  2016-01-29 11:27  DexLoad\assets\
     文件        1856  2016-01-29 11:27  DexLoad\assets\test.dex
     文件       51394  2015-12-23 10:31  DexLoad\ic_launcher-web.png
     目录           0  2016-02-02 16:55  DexLoad\jni\
     文件         199  2016-02-02 17:03  DexLoad\jni\Android.mk
     文件          75  2016-02-02 16:57  DexLoad\jni\Application.mk
     文件        3915  2016-02-02 17:38  DexLoad\jni\DexLoad.cpp
     文件        1875  2016-02-02 17:06  DexLoad\jni\JNIUtil.cpp
     文件         610  2016-02-02 17:04  DexLoad\jni\JNIUtil.h
     文件         781  2015-12-23 10:31  DexLoad\proguard-project.txt
     文件         563  2015-12-23 10:31  DexLoad\project.properties
     目录           0  2015-12-23 10:31  DexLoad\res\
     目录           0  2015-12-23 10:31  DexLoad\res\drawable-hdpi\
     文件        7658  2015-12-23 10:31  DexLoad\res\drawable-hdpi\ic_launcher.png
     目录           0  2015-12-23 10:31  DexLoad\res\drawable-ldpi\
     目录           0  2015-12-23 10:31  DexLoad\res\drawable-mdpi\
     文件        3777  2015-12-23 10:31  DexLoad\res\drawable-mdpi\ic_launcher.png
     目录           0  2015-12-23 10:31  DexLoad\res\drawable-xhdpi\
     文件       12516  2015-12-23 10:31  DexLoad\res\drawable-xhdpi\ic_launcher.png
     目录           0  2015-12-23 10:31  DexLoad\res\drawable-xxhdpi\
     文件       24777  2015-12-23 10:31  DexLoad\res\drawable-xxhdpi\ic_launcher.png
     目录           0  2015-12-23 10:32  DexLoad\res\layout\
     文件         335  2015-12-23 10:31  DexLoad\res\layout\activity_main.xml
     目录           0  2015-12-23 10:31  DexLoad\res\menu\
     文件         369  2015-12-23 10:31  DexLoad\res\menu\main.xml
     目录           0  2015-12-23 10:31  DexLoad\res\values\
     文件         220  2015-12-23 10:31  DexLoad\res\values\dimens.xml
............此处省略47个文件信息

评论

共有 条评论