⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loader.cpp

📁 此为本书的配套光盘.本书不但由浅入深地讲解了软件保护技术
💻 CPP
字号:
#include "loader.h"
#include "blowfish.h"
#include "memory.h"
/*
 * Class:     EnDecrypt
 * Method:    Decrypt
 * Signature: ([BI[BI)V
 * 加密操作
 */
JNIEXPORT jbyteArray JNICALL Java_Loader_Encrypt
  (JNIEnv *jenv, jobject jobj, jbyteArray jsrc)
{
	//加密和解密的密钥,BLOWFISH是对称加密算法,
	//所以他的加密和解密的密钥是相同的
	char *pucKey = "FTSAFE";         

	//构造一个BLOWFISH加解密算法对象,
	//并初始化对象的密钥和密钥的大小
	CBlowfish bf((unsigned char*)pucKey, sizeof(pucKey));

	//由于blowfish要求数据长度必须时8字节的整数倍,
	//所以这里要记录下原始数据的真实长度,并且把它保存
	//到文件的头四个字节中
	//然后根据8字节对齐要求添加相应的位数
	int srcLen = jenv->GetArrayLength(jsrc);
	int destLen = srcLen+4;
	int off = destLen%8;
	destLen += (8-off)%8;
	jbyteArray jdest = jenv->NewByteArray(destLen);

	jbyte *src = jenv->GetByteArrayElements(jsrc, 0);
	jbyte *dest = jenv->GetByteArrayElements(jdest, 0);
	memset(dest, 0, destLen);
	memcpy(dest, &srcLen, sizeof(srcLen));   //保存数据的原始长度
	memcpy(dest+sizeof(srcLen), src, srcLen);

	bf.Encrypt((unsigned char*)dest, destLen);

	jenv->ReleaseByteArrayElements(jsrc, src, 0);
	jenv->ReleaseByteArrayElements(jdest, dest, 0);
	return jdest;
}


/*
 * Class:     EnDecrypt
 * Method:    Encrypt
 * Signature: ([BI[BI)V
 * 解密操作,和加密操作相类似,
 * 在解密的时候要去除头部的长度信息和尾部的
 * 数据对齐信息,并且只保留真的的数据
 */
JNIEXPORT jbyteArray JNICALL Java_Loader_Decrypt
  (JNIEnv *jenv, jobject jobj, jbyteArray jsrc)
{
	char *pucKey = "FTSAFE";         
	CBlowfish bf((unsigned char*)pucKey, sizeof(pucKey));

	jint destLen;
	jint srcLen = jenv->GetArrayLength(jsrc);
	jbyte *src = jenv->GetByteArrayElements(jsrc, 0);

	bf.Decrypt((unsigned char*)src, srcLen);
	memcpy(&destLen, src, sizeof(destLen));   //获取原始数据的长度
	jbyteArray jdest = jenv->NewByteArray(destLen);
	jbyte *dest = jenv->GetByteArrayElements(jdest, 0);
	memcpy(dest, src+sizeof(destLen), destLen);

	jenv->ReleaseByteArrayElements(jsrc, src, 0);
	jenv->ReleaseByteArrayElements(jdest, dest, 0);
	return jdest;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -