Android so文件函数加密

一、前言

经过上次写完在ELF文件中根据函数名找函数,就准备开始编写so文件函数加密,这里这是对代码进行加密,还没有对函数名做混淆,会放到下次写。还有本次的测试机是nexus4,操作系统为android 4.4。

二、函数加密

一般在android中,各种核心的东西都会放在so文件中,因为native层的代码分析难度大,执行效率高。本文选择对so文件的核心函数进行加密,用来对抗静态分析。在加密之前,需要知道加密的原理和流程,在我们对so文件的核心函数加密后,我们需要对其解密,如果不解密的话,你的程序肯定会崩溃。解密的时机肯定是在函数运行之前,本文选择了在 JNIOnLoad函数里执行解密操作,当然JNIOnLoad不是最早执行的函数,但是在库加载时就运行了,是满足我们的要求的。

首先介绍一下对so文件里的函数的加密,要对函数加密当然要先找到函数的地址,本人以前写过一个根据函数名找函数地址的文章子,不了解的同学可以先看看这篇文章,文章地址:https://blog.youkuaiyun.com/qq_16812035/article/details/87866217。找到函数地址后和函数大小后,事情就变得简单了。本人做的加密就是对函数的每个字节码进行异或操作,然后保存为新的so文件。

void entryCode(size_t code_base, size_t code_size) {
	for (size_t i = 0; i < code_size; ++i) {
		((char*)code_base)[i] = ((char*)code_base)[i] ^ 0xA;
	}
}

生成新的so文件后,需要替换掉原so文件,替换掉后,重新打包,签名,安装到手机上,运行,直接崩溃,是因为程序执行到你的函数时,因为是加密的,执行了乱七八糟的指令,所以崩溃了,所以我们要编写解密代码。

三、解 密 

我们要在so文件里定义一个JNIOnLoad来覆盖默认的JNIOnload函数,然后开始写我们的解密程序,第一步当然是找到我们的so函数的基地址,在lin

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值