Android加壳native实现

本文介绍了如何在Android中将加壳技术从Java层转移到native层,以提高Apk的加固安全性。通过JNI调用Java代码,实现核心脱壳过程在native层执行。示例代码已在GitHub上分享。
摘要由CSDN通过智能技术生成

    本例仅在Android2.3模拟器跑通过,如果要适配其他机型,请自行研究,这里只是抛砖引玉。

    0x00

    在Android中的Apk的加固(加壳)原理解析和实现,一文中脱壳代码都写在了java层很容易被识别出来,很多需求需要把脱壳的程序转移到native层,其实转移的思路也很简单,就是在native层通过JNI调用Java层代码。

    运行前,首先把ForceApkObj.apk放在/sdcard/payload_odex/目录下。

    代码已上传至github,地址为https://github.com/jltxgcy/AndroidNativeShell


    0x01

    public class ProxyApplication extends Application {
	
	@Override
	protected void attachBaseContext(Context base) {
		super.attachBaseContext(base);
		DexLoader.load("com.jltxgcy.dynamicdex");
	}


	@Override
	public void onCreate() {
		DexLoader.run();
	}
}
    还记得原来这两个方法有着一大堆代码,这里仅仅有一行代码就搞定。

    我们再看来DexLoader类。

public class DexLoader {
	static {
		System.loadLibrary("dexloader");
	}

	public static native void load(String path);

	public static native void run();
}

    原来核心脱壳代码放在了native层。

    

    0x02

    JNI的实现如下,大家可以看到本质上就是把java层的代码通过JNI转移到nati

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值