首页
社区
课程
招聘
[结束][第一阶段◇第二题]看雪论坛.腾讯公司2008软件安全技术竞赛
发表于: 2008-10-5 11:54 20348

[结束][第一阶段◇第二题]看雪论坛.腾讯公司2008软件安全技术竞赛

2008-10-5 11:54
20348
收藏
免费 0
支持
分享
最新回复 (223)
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
201
啊,我以为是只有abcdefghijkl这几个字母
2008-10-7 12:17
0
雪    币: 10885
活跃值: (3282)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
202
ccfer把算法模型推出来了?  再次膜拜!
2008-10-7 12:17
0
雪    币: 993
活跃值: (442)
能力值: ( LV12,RANK:403 )
在线值:
发帖
回帖
粉丝
203
不知道逆的对不对,刚才看了netwind贴出的说明才明白大致的模型原理,一直没想明白注册机该从何下手。
if (strlen(g_szRegName) != 0xC) return 1;
for(i=0; i<strlen(g_szRegName); i++)
{
	if (g_szRegName[i] < 0x61) return 1;
	if (g_szRegName[i] >= 0x7A) return 1;
}
//dwSortIndex数组存放注册名中各字母按从小到大排序的名次
for(j=0; j<0xC; j++)
{
	n = g_szRegName[0];
	l = 0;
	for(i = 1; i < strlen(g_szRegName); i++)
	{
		if ((n == g_szRegName[i]) && (n != 0x7A)) return 1;
		if (n > g_szRegName[i])
		{
			n = g_szRegName[i];
			l = i;
		}
	}
	dwSortIndex[l] = j;
	g_szRegName[l] = 0x7A;
}
if (strlen(g_szRegCode) < 0x35) return 1;
for(i=0; i<strlen(g_szRegCode); i++)
{
	if (var_2B0[i] = g_szRegCode[i]-0x30) > 3) return 1;
}
chOutBuf[24] = 0;
fn(&var_2B0, &chOutBuf, &dwSortIndex);
pchOutBuf = &chOutBuf;
for(k=0; k<2; k++,pchOutBuf += 0xC)
{
	for(j=0; j<0xC; j++)
	{
		n = pchOutBuf[0];
		l = 0;
		for(i=1; i<strlen(pchOutBuf)&&(i<0xC); var4++)
		{
			if (n == pchOutBuf[i]) && (n != 0x7A) return 1;
			if (n > pchOutBuf[i])
			{
				n = pchOutBuf[i];
				l = i;
			}
		}
		if (k == 0)
			dwOutSortIndex1[l] = j;
		else
			dwOutSortIndex2[l] = j;
		pchOutBuf[l] = 0x7A;
	}
}
//只要出来的两组数据按字母从小到大排序后和注册名的一致就算成功
for(i=0; i<0xC; i++)
{
	if (dwSortIndex[i] != dwOutSortIndex1[i])||(dwSortIndex[i] != dwOutSortIndex2[i])||(dwOutSortIndex1[i] != dwOutSortIndex2[i]) return 1;
}
return 0;

void fn(int dwRegCode[53], char chOutBuf[24], int dwSortIndex[12])
{
	int i, j, k, l, m, n, p, q, r, s, t, x, y;
	int dwTemps[12];
	int dwTempd[48];

	l = 0;
	for(i=0; i<0xC; i++) dwTemps[i] = 0x1E;
	m = 0;
	if (dwRegCode[0] > 0) m = 0xC/dwRegCode[0];
	n = 0;
	for(r=0; r<2; r++)
	{
		if (n > 0) dwTemps[dwSortIndex[n-1]] = 0x1E;
		for(n=0; n<0xC;)
		{
			if (n > 0) dwTemps[dwSortIndex[n-1]] = 0x28;
			if (r == 0) dwTemps[dwSortIndex[n]] = 0x28;
			if (r == 1) dwTemps[dwSortIndex[n]] = 0x14;
			n++;
			for(k=0,i=0; i<dwRegCode[0]; i++)
			{
				for(j=0; j<m; j++)
				{
					dwTempd[i*4+j] = dwTemps[k];
					k++;
				}
			}
			p = 0;
			q = 0;
			for(i=0; i<m; i++)
			{
				p += dwTempd[dwRegCode[1]*4+i];
				q += dwTempd[dwRegCode[2]*4+i];
			}
			if (p == q)
			{
				if (dwTempd[dwRegCode[3]*4+dwRegCode[4]] == dwTempd[dwRegCode[5]*4+dwRegCode[6]])
				{
					if (dwTempd[dwRegCode[7]*4+dwRegCode[8]] == dwTempd[dwRegCode[9]*4+dwRegCode[10]])
					{
						chOutBuf[l] = 0x6C;
						l++;
					}
					else
					{
						chOutBuf[l] = 0x6B;
						l++;
					}
				}
				else
				{
					if (dwTempd[dwRegCode[7]*4+dwRegCode[8]] == dwTempd[dwRegCode[9]*4+dwRegCode[10]])
					{
						chOutBuf[l] = 0x6A;
						l++;
					}
					else
					{
						chOutBuf[l] = 0x69;
						l++;
					}
				}
			}
			if (p > q)
			{
				dwTempd[dwRegCode[1]*4+dwRegCode[11]] = dwTempd[dwRegCode[12]*4+dwRegCode[13]];
				dwTempd[dwRegCode[1]*4+dwRegCode[14]] = dwTempd[dwRegCode[15]*4+dwRegCode[16]];
				dwTempd[dwRegCode[1]*4+dwRegCode[17]] = dwTempd[dwRegCode[18]*4+dwRegCode[19]];
				dwTempd[dwRegCode[2]*4+dwRegCode[20]] = dwTempd[dwRegCode[21]*4+dwRegCode[22]];
				dwTempd[dwRegCode[2]*4+dwRegCode[23]] = dwTempd[dwRegCode[24]*4+dwRegCode[25]];
				dwTempd[dwRegCode[2]*4+dwRegCode[26]] = dwTempd[dwRegCode[27]*4+dwRegCode[28]];
				s = 0;
				t = 0;
				for(i=0; i<m; i++)
				{
					s += dwTempd[dwRegCode[1]*4+i];
					t += dwTempd[dwRegCode[2]*4+i];		
				}
				if (s > t)
				{
					if (dwTempd[dwRegCode[29]*4+dwRegCode[30]] == dwTempd[dwRegCode[31]*4+dwRegCode[32]])
					{
						chOutBuf[l] = 0x65;
						l++;
					}
					else
					{
						chOutBuf[l] = 0x61;
						l++;
					}
				}
				if (s < t)
				{
					if (dwTempd[dwRegCode[33]*4+dwRegCode[34]] > dwTempd[dwRegCode[35]*4+dwRegCode[36]])
					{
						chOutBuf[l] = 0x67;
						l++;
					}
					if (dwTempd[dwRegCode[33]*4+dwRegCode[34]] < dwTempd[dwRegCode[35]*4+dwRegCode[36]])
					{
						chOutBuf[l] = 0x66;
						l++;
					}
					if (dwTempd[dwRegCode[33]*4+dwRegCode[34]] == dwTempd[dwRegCode[35]*4+dwRegCode[36]])
					{
						chOutBuf[l] = 0x68;
						l++;
					}
				}
				if (s == t)
				{
					k = 0;
					for(i=0; i<dwRegCode[0]; i++)
					{
						for(j=0; j<m; j++)
						{
							dwTempd[i*4+j] = dwTemps[k];
							k++;
						}
					}
					if (dwTempd[dwRegCode[37]*4+dwRegCode[38]] > dwTempd[dwRegCode[39]*4+dwRegCode[40]])
					{
						chOutBuf[l] = 0x62;
						l++;
					}
					if (dwTempd[dwRegCode[37]*4+dwRegCode[38]] < dwTempd[dwRegCode[39]*4+dwRegCode[40]])
					{
						chOutBuf[l] = 0x63;
						l++;
					}
					if (dwTempd[dwRegCode[37]*4+dwRegCode[38]] == dwTempd[dwRegCode[39]*4+dwRegCode[40]])
					{
						chOutBuf[l] = 0x64;
						l++;
					}
				}
			}
			if (p < q)
			{
				dwTempd[dwRegCode[1]*4+dwRegCode[11]] = dwTempd[dwRegCode[12]*4+dwRegCode[13]];
				dwTempd[dwRegCode[1]*4+dwRegCode[14]] = dwTempd[dwRegCode[15]*4+dwRegCode[16]];
				dwTempd[dwRegCode[1]*4+dwRegCode[17]] = dwTempd[dwRegCode[18]*4+dwRegCode[19]];
				dwTempd[dwRegCode[2]*4+dwRegCode[20]] = dwTempd[dwRegCode[21]*4+dwRegCode[22]];
				dwTempd[dwRegCode[2]*4+dwRegCode[23]] = dwTempd[dwRegCode[24]*4+dwRegCode[25]];
				dwTempd[dwRegCode[2]*4+dwRegCode[26]] = dwTempd[dwRegCode[27]*4+dwRegCode[28]];
				x = 0;
				y = 0;
				for(i=0; i<m; i++)
				{
					x += dwTempd[dwRegCode[1]*4+i];
					y += dwTempd[dwRegCode[2]*4+i];
				}
				if (x > y)
				{
					if (dwTempd[dwRegCode[41]*4+dwRegCode[42]] > dwTempd[dwRegCode[43]*4+dwRegCode[44]])
					{
						chOutBuf[l] = 0x66;
						l++;
					}
					if (dwTempd[dwRegCode[41]*4+dwRegCode[42]] < dwTempd[dwRegCode[43]*4+dwRegCode[44]])
					{
						chOutBuf[l] = 0x67;
						l++;
					}
					if (dwTempd[dwRegCode[41]*4+dwRegCode[42]] < dwTempd[dwRegCode[43]*4+dwRegCode[44]])
					{
						chOutBuf[l] = 0x68;
						l++;
					}
				}
				if (x < y)
				{
					if (dwTempd[dwRegCode[45]*4+dwRegCode[46]] == dwTempd[dwRegCode[47]*4+dwRegCode[48]])
					{
						chOutBuf[l] = 0x65;
						l++;
					}
					else
					{
						chOutBuf[l] = 0x61;
						l++;
					}
				}
				if (x == y)
				{
					k = 0;
					for(i=0; i<dwRegCode[0]; i++)
					{
						for(j=0; j<m; j++)
						{
							dwTempd[i*4+j] = dwTemps[k];
							k++;
						}
					}
					if (dwTempd[dwRegCode[49]*4+dwRegCode[50]] > dwTempd[dwRegCode[51]*4+dwRegCode[52]])
					{
						chOutBuf[l] = 0x63;
						l++;
					}
					if (dwTempd[dwRegCode[49]*4+dwRegCode[50]] < dwTempd[dwRegCode[51]*4+dwRegCode[52]])
					{
						chOutBuf[l] = 0x62;
						l++;
					}
					if (dwTempd[dwRegCode[49]*4+dwRegCode[50]] == dwTempd[dwRegCode[51]*4+dwRegCode[52]])
					{
						chOutBuf[l] = 0x64;
						l++;
					}
				}
		  }              
		}
	}
}
2008-10-7 12:19
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
204
楼上的int dwTempd[16]
应该改成 int dwTempd[6][4]
2008-10-7 12:22
0
雪    币: 993
活跃值: (442)
能力值: ( LV12,RANK:403 )
在线值:
发帖
回帖
粉丝
205
[QUOTE=海风月影;517983]楼上的int dwTempd[16]
应该改成 int dwTempd[6][4][/QUOTE]
在源代码中没看到它对应的空间大小,从实现上看应该是个2维数组,而且第二维应该是4,
因为程序中用到shl 4,不知6从何得出?
2008-10-7 12:27
0
雪    币: 221
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
206
好像是12×4的数组
2008-10-7 12:29
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
207
是12*4的数组,最多能用到6*4的空间
2008-10-7 12:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
208
ccfer你多大?
为何如此强大...
2008-10-7 12:35
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
209
yd啊!!!!!!!!!!!!!!!!!!!!
2008-10-7 12:39
0
雪    币: 221
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
210
人家是GIRL,真能轻易告知,
2008-10-7 13:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
211
有这么强大的G?
不可能~~~
2008-10-7 13:34
0
雪    币: 239
活跃值: (11)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
212
很强,很强...
2008-10-7 14:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
213
在看中,汗死!
2008-10-7 16:29
0
雪    币: 107
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
214
我也这么觉得,其实这个算法就是经典的12球称重问题
2008-10-7 17:39
0
雪    币: 107
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
215
感觉这个题目要写keygen挺误导人的
2008-10-7 17:46
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
216
顶顶顶 支持努力努力
2008-10-7 22:53
0
雪    币: 48
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
217
帮顶可以么???呵呵。。。看看
2008-10-7 22:54
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
218
......
2008-10-8 08:48
0
雪    币: 8209
活跃值: (4518)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
219
别害怕,我第二题只得40多分
2008-10-8 09:38
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
220
马太效应,多的要给他更多,少的要让他更少
2008-10-9 10:34
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
221
这么简单........
2008-10-10 23:42
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
222
什么时候能达到这个水平
2008-10-14 21:40
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
223
都是高手啊,哎差距太大
2009-5-16 09:16
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
224
这个比赛过去很久了
2009-7-23 13:59
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
225
555~~~看算法头都疼了////
2009-9-1 09:16
0
游客
登录 | 注册 方可回帖
返回
//