一个小问题,不管你懂没懂,反正我是没懂……

wangkunhong 2012-07-15 01:03:00

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);
}

}


为什么每执行一次打印出来的class_data都自动在后面加上了一些乱的字符呢?看一下运行结果。。。。

开始解密acom/yy/hunter/servlet/UploaderServlet
27781ec819a6cca1c56f47da4faedf2c27781ec819a6cca1c56f47d
a4faedf2c27781ec819a6cca1c56f47da4faedf2c?R
class_data len=aaaaaaaaaaaaaaaaaaaaaaaaaaa
27781ec819a6cca1c56f47da4faedf2c27781ec819a6cca1c56f47d
a4faedf2c27781ec819a6cca1c56f47da4faedf2c?R!
bbbbbbbbbbbbbbbbbbbbbbbbb
360TOP1奢侈品360TOP1奢侈品360TOP1奢侈品hD?娌舞8?騿矓#
cccccccccccccccccccccccccccccc
@
BzC&T斘抴?360TOP1奢侈品360TOP1奢侈品hD?娌舞8?騿矓#葺葺葺葺葺葺n钢

ddddddddddddddddddddddddddddddd


开始解密acom/yy/hunter/servlet/UploaderServlet
27781ec819a6cca1c56f47da4faedf2c27781ec819a6cca1c56f47d
a4faedf2c27781ec819a6cca1c56f47da4faedf2cZt)l
class_data len=aaaaaaaaaaaaaaaaaaaaaaaaaaa
27781ec819a6cca1c56f47da4faedf2c27781ec819a6cca1c56f47d
a4faedf2c27781ec819a6cca1c56f47da4faedf2c't)l
bbbbbbbbbbbbbbbbbbbbbbbbb
360TOP1奢侈品360TOP1奢侈品360TOP1奢侈品燩'?
cccccccccccccccccccccccccccccc
@
BzC&T斘抴?360TOP1奢侈品360TOP1奢侈品燩'慅葺葺葺?集?
ddddddddddddddddddddddddddddddd



开始解密acom/yy/hunter/servlet/UploaderServlet
27781ec819a6cca1c56f47da4faedf2c27781ec819a6cca1c56f47da4faed
f2c27781ec819a6cca1c56f47da4faedf2cSvl
class_data len=aaaaaaaaaaaaaaaaaaaaaaaaaaa
27781ec819a6cca1c56f47da4faedf2c27781ec819a6cca1c56f47da4faed
f2c27781ec819a6cca1c56f47da4faedf2c>SAt
bbbbbbbbbbbbbbbbbbbbbbbbb
360TOP1奢侈品360TOP1奢侈品360TOP1奢侈品hD?娌舞8?騿矓#
cccccccccccccccccccccccccccccc
@
BzC&T斘抴?360TOP1奢侈品360TOP1奢侈品hD?娌舞8?騿矓#葺葺葺葺葺葺?]闧b

ddddddddddddddddddddddddddddddd



正确的字串是27781ec819a6cca1c56f47da4faedf2c27781ec819a6cca1c56f
47da4faedf2c27781ec819a6cca1c56f47da4faedf2c
,但是每次都自动加了一些内容到这个字串后面。。。,不知道为什么,求解……

...全文
178 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangkunhong 2012-07-15
  • 打赏
  • 举报
回复
谢谢各位,明白啦^_^
wsxxiaohao 2012-07-15
  • 打赏
  • 举报
回复
字符串结束符
cbzjzsb123 2012-07-15
  • 打赏
  • 举报
回复
C语言里没有字符串这种数据类型。

于是规定用字符串的时候就是,一堆以'\0'结尾的字符。


wZi 2012-07-15
  • 打赏
  • 举报
回复
C语言里没有字符串这种数据类型。

于是规定用字符串的时候就是,一堆以'\0'结尾的字符。

pathuang68 2012-07-15
  • 打赏
  • 举报
回复
类似

char hex_data[1024];
//memset(hex_data, 0, 20); 为啥要注释这行呢?加上吧,同时把最后的20改为1024
memset(hex_data, 0, 1024);


其它与此相似的地方,均照此办理。
W170532934 2012-07-15
  • 打赏
  • 举报
回复
楼主搞java里面是不是没有字符串结束符这个概念啊?你需要注意下是不是有些地方使用memcpy等函数或者定义字符串的时候,最好有个'\0'。如果我说的不清楚,麻烦你自己去谷歌下C语言的字符串结束符
taodm 2012-07-15
  • 打赏
  • 举报
回复
楼主是学java出身的?没听说过\0结束符?

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧