一个小问题,不管你懂没懂,反正我是没懂……
void JNICALL cbClassFileLoadHook(jvmtiEnv *jvmti_env, JNIEnv* env, jclass class_being_redefined, jobject loader, const char* name, jobject protection_domain, jint class_data_len, const unsigned char* class_data, jint* new_class_data_len, unsigned char** new_class_data){ char *r="com/yy/hunter"; char *p; p=strstr(name,r); if(p){ printf("需要解密的class name=%s\n", name); //此处解密; enter_critical_section(jvmti_env); { printf("开始解密a%s\n",name); printf("%s\n",class_data); unsigned char key[] = "hsylgwk-20120101"; AES aes(key); //int o_len = aes.getUCharLen(class_data); //printf("class_data len=%s\n",o_len); printf("class_data len=%s\n","aaaaaaaaaaaaaaaaaaaaaaaaaaa"); char* old_data; old_data = (char *)allocate(jvmti_env, class_data_len); (void)memcpy((void*)old_data, (void*)(class_data), (int)class_data_len); //memcpy(old_data,class_data,class_data_len); printf("%s\n",old_data); printf("%s\n","bbbbbbbbbbbbbbbbbbbbbbbbb"); char hex_data[1024]; //memset(hex_data, 0, 20); aes.Bm53InvCipher(old_data, hex_data); printf("%s\n",hex_data); printf("%s\n","cccccccccccccccccccccccccccccc"); unsigned char *de_hex_data = (unsigned char *)malloc(strlen(hex_data)); //strcpy(de_hex_data,hex_data); memcpy(de_hex_data,hex_data,strlen(hex_data)); aes.InvCipher(de_hex_data); printf("%s\n",de_hex_data); printf("%s\n","ddddddddddddddddddddddddddddddd"); //int nLen = strlen(old_data); unsigned int len = strlen((char*)old_data); m_pJvmTI->Allocate(len, (unsigned char **)&old_data); free(old_data); printf("%s\n","eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); } exit_critical_section(jvmti_env); } }
cccccccccccccccccccccccccccccc
@
BzC&T斘抴?360TOP1奢侈品360TOP1奢侈品hD?娌舞8?騿矓#葺葺葺葺葺葺?]闧b
ddddddddddddddddddddddddddddddd
正确的字串是27781ec819a6cca1c56f47da4faedf2c27781ec819a6cca1c56f
47da4faedf2c27781ec819a6cca1c56f47da4faedf2c
,但是每次都自动加了一些内容到这个字串后面。。。,不知道为什么,求解……
[解决办法]
楼主是学java出身的?没听说过\0结束符?
[解决办法]
楼主搞java里面是不是没有字符串结束符这个概念啊?你需要注意下是不是有些地方使用memcpy等函数或者定义字符串的时候,最好有个'\0'。如果我说的不清楚,麻烦你自己去谷歌下C语言的字符串结束符
[解决办法]
类似
char hex_data[1024];//memset(hex_data, 0, 20); 为啥要注释这行呢?加上吧,同时把最后的20改为1024memset(hex_data, 0, 1024);
[解决办法]
C语言里没有字符串这种数据类型。
于是规定用字符串的时候就是,一堆以'\0'结尾的字符。
[解决办法]
C语言里没有字符串这种数据类型。
于是规定用字符串的时候就是,一堆以'\0'结尾的字符。
[解决办法]
字符串结束符