android APK加固篇-3.使用JNI加载dex和调用方法

本文介绍了如何通过JNI在Android中加载 Dex 文件,并调用其中的方法,以增强 APK 的安全性。相比Java加载 Dex,JNI 方法虽然更复杂,但能提供更高的加密级别,包括对 Dex 进行加密和分块处理。加载后,建议删除临时 Dex 文件以加强加固效果。文章还对比了两种加载方法,并提供了源代码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先需要把assets中的test.dex复制到应用的files空间下。

string copyDexToData(JNIEnv* env, jobject asset, string dexName,
		string dataPath)
{
	AAssetManager* asMg = AAssetManager_fromJava(env, asset);
	AAsset* as = AAssetManager_open(asMg, dexName.c_str(), AASSET_MODE_UNKNOWN);
	if (as == NULL)
	{
		LOGE("%s not found in assets!",dexName.c_str());
		return "";
	}
	string strDexPath = dataPath + "/files/" + dexName;
	int len = AAsset_getLength(as);
	int file = open(strDexPath.c_str(), O_WRONLY | O_CREAT, 0755);
	if (file < 0)
	{
		AAsset_close(as);
		LOGE("Open %s File Error!",strDexPath.c_str());
		return "";
	}
	char* buf = new char[1024];
	while (len > 0)
	{
		memset(buf, 0, 1024);
		int n = AAsset_read(as, buf, 1024);
		if (n < 0)
			break;
		write(file, buf, n);
		len -= n;
	}
	delete[] buf;
	AAsset_close(as);
	cl
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值