ByteCodeEncrypt
ByteCodeEncrypt copied to clipboard
使用方案加密之后 在idea下依然可以看见反编译的代码
使用方案加密之后 在idea下依然可以看见反编译的代码 基于这个原因我将加密设置为在16个字节后将字节码交换 for(; index < class_data_len-1 ; ){
if (index <= 16){
_data[index]=class_data[index];
_data[index+1]=class_data[index+1];
}else{
_data[index] = class_data[index+1];
_data[index+1] = class_data[index];
}
index += 2;
}
因为前8个字节是魔数 加密之后无法识别 无法运行 这样加密之后 spring boot 项目无法运行 加密如果是简单的 str[i] = str[i] -4; 能正常运行 无法解释原因了
源码里用了 “strlen(dst)” 来获取要加密的class类的字节码长度,strlen 遇到'\0'就不往后数了,所以加密函数 “encode” 当你的类字节码里出现了'\0' 就不会进行加密。不知道是不是这个原因导致出现你说的问题的
源码里用了 “strlen(dst)” 来获取要加密的class类的字节码长度,strlen 遇到'\0'就不往后数了,所以加密函数 “encode” 当你的类字节码里出现了'\0' 就不会进行加密。不知道是不是这个原因导致出现你说的问题的
应该是这个问题,我这边对 Java_com_seaboat_bytecode_ByteCodeEncryptor_encrypt 作了一些修改,通过 jbyteArray 获取长度:
extern "C" JNIEXPORT jbyteArray JNICALL
Java_com_seaboat_bytecode_ByteCodeEncryptor_encrypt(JNIEnv *env, jclass cla, jbyteArray text)
{
jsize len = (*env).GetArrayLength(text);
char *dst = (char *)env->GetByteArrayElements(text, 0);
encode(dst, len);
env->SetByteArrayRegion(text, 0, strlen(dst), (jbyte *)dst);
return text;
}