算法总结一下吧: 其实是简单的xor加密,呵呵!!不过就是内存位置乱了点~~~ 还是不要总结了!!自已看了都烦~~哦呵呵呵!!反正就是异或异或,传回去传过来!取前面,取后面!`就是这样了!~~自己看清楚一点吧~~ 呵呵`
注册机还是要写滴!mfc的button事件代码!!: char name[100],code[100],a[10]; long int key[]={0xaa,0x89,0xc4,0xfe,0x46,0x78,0xf0, 0xd0,0x03,0xe7,0xf7,0xfd,0xf4,0xe7,0xb9,0xb5,0x1b,//对了`这就是那个传说中的十六进制数串 0xc9,0x50,0x73}; int i,len=0,k=0; unsigned int num=0,max1=0,max2=0; DWORD* p; GetDlgItemText(IDC_EDIT1,name,-1); len=strlen(name); i=0; for(;i<len;i++) { num=name[i]^key[k]; k++; key[k-1]=name[i]; name[i]=num; if(5==k) k=0; } k=0; for(i=0;i<len;i++) { max1=(BYTE)name[len-i-1]; max2=(BYTE)key[k+5]; num=max1^max2; key[k+5]=max1; name[len-i-1]=num; k++; if(5==k) k=0; } k=0; for(i=0;i<len;i++) { max1=(BYTE)name[i]; max2=(BYTE)key[k+10]; num=max1^max2; key[k+10]=name[i]; name[i]=num; k++; if(5==k) k=0; } k=0; for(i=0;i<len;i++) { max1=(BYTE)name[len-i-1]; max2=(BYTE)key[k+15]; num=max1^max2; key[k+15]=name[len-i-1]; name[len-i-1]=num; k++; if(5==k) k=0; } memset(a,0,10); for(i=0;i<len;i++) { k=i&3; max1=a[k]; max2=(BYTE)name[i]; num=max1+max2; a[k]=(BYTE)num; } p=(DWORD*)a; sprintf(name,"%d",*p); SetDlgItemText(IDC_EDIT2,name); }
其实注册机可以写得非常简洁``因为想让大家看得更清楚一点这个算法,所以,原封不动地还原了反汇编代码!
---------------------------------------------------------------------------------- └经验总结┐: 嘿嘿``原来crack一个软件也不难嘛!至少这个是这样~~呵呵~
---------------------------------------------------------------------------------- └版权声明┐ 本文原创于看雪软件安全论坛, 转载请注明作者并保持文章的完整, 谢谢!
, 2007年6月6日 22:28:16上一页 1 2 3 |