- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
看到老孙和亮亮在玩,凑个热闹,这个是老虎好久前写的,总体设计上还是有些缺陷的,可能那个时候他也只是玩下而已。该CM属于简单型的,逆向算法的时候可以投机取巧。汇编代码的分析上就不写了,也就十来行,比较简单。
#include "stdafx.h"
#include <string.h>
#define keylen 18 // 输出KEY的长度
int main(int argc, char* argv[])
{
char * pStr = "i am Bin Laden"; // 14
char szKey[50];
char szName[50]={0};
puts(" 老虎的CM注册机 \r\n");
puts("说明:该穷举算法不能对所有用户名都有效,请尽量使用英文字符做用户名。");
puts("注意:用户名长度应>=10 且 <=16!");
printf("Please input your name: ");
scanf("%s",szName);
strcat(szName,pStr);
char cc = 'A';
do
{
for (unsigned int i = 0;i < strlen(szName);i++)
{
szKey[i] = (*(szName + i) * cc ) % 0x1a + 0x41;
}
} while ( szKey[4+keylen] != cc && (cc++ <= 'Z'));
if (cc <= 'Z')
{
printf("Your key is : ");
for (int j = 4+keylen ; j>4;j--)
{
printf("%c",*(szKey+j));
}
printf("\r\n");
}
else
{
puts("抱歉,该Name没有对应的Key!");
}
return 0;
}
|
|