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

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

2008-10-5 11:54
19929
收藏
点赞0
打赏
分享
最新回复 (223)
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
edigar 2008-10-7 12:17
201
0
啊,我以为是只有abcdefghijkl这几个字母
雪    币: 6526
活跃值: (2516)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
netwind 13 2008-10-7 12:17
202
0
ccfer把算法模型推出来了?  再次膜拜!
雪    币: 993
活跃值: (436)
能力值: ( LV12,RANK:403 )
在线值:
发帖
回帖
粉丝
Loka 2 2008-10-7 12:19
203
0
不知道逆的对不对,刚才看了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++;
					}
				}
		  }              
		}
	}
}
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2008-10-7 12:22
204
0
楼上的int dwTempd[16]
应该改成 int dwTempd[6][4]
雪    币: 993
活跃值: (436)
能力值: ( LV12,RANK:403 )
在线值:
发帖
回帖
粉丝
Loka 2 2008-10-7 12:27
205
0
[QUOTE=海风月影;517983]楼上的int dwTempd[16]
应该改成 int dwTempd[6][4][/QUOTE]
在源代码中没看到它对应的空间大小,从实现上看应该是个2维数组,而且第二维应该是4,
因为程序中用到shl 4,不知6从何得出?
雪    币: 221
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
windsun 1 2008-10-7 12:29
206
0
好像是12×4的数组
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2008-10-7 12:33
207
0
是12*4的数组,最多能用到6*4的空间
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AkumaND 2008-10-7 12:35
208
0
ccfer你多大?
为何如此强大...
雪    币: 107
活跃值: (311)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Fido 2008-10-7 12:39
209
0
yd啊!!!!!!!!!!!!!!!!!!!!
雪    币: 221
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
windsun 1 2008-10-7 13:26
210
0
人家是GIRL,真能轻易告知,
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AkumaND 2008-10-7 13:34
211
0
有这么强大的G?
不可能~~~
雪    币: 239
活跃值: (11)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
ufozhyufo 3 2008-10-7 14:45
212
0
很强,很强...
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
安全焦点 2008-10-7 16:29
213
0
在看中,汗死!
雪    币: 107
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ykzhujiang 1 2008-10-7 17:39
214
0
我也这么觉得,其实这个算法就是经典的12球称重问题
雪    币: 107
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ykzhujiang 1 2008-10-7 17:46
215
0
感觉这个题目要写keygen挺误导人的
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
bithaha 5 2008-10-7 22:53
216
0
顶顶顶 支持努力努力
雪    币: 46
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
dancebaby 2008-10-7 22:54
217
0
帮顶可以么???呵呵。。。看看
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
jjnet 5 2008-10-8 08:48
218
0
......
雪    币: 8188
活跃值: (4216)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
ccfer 16 2008-10-8 09:38
219
0
别害怕,我第二题只得40多分
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
笨笨雄 14 2008-10-9 10:34
220
0
马太效应,多的要给他更多,少的要让他更少
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Winmillion 2008-10-10 23:42
221
0
这么简单........
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
adbrave 2008-10-14 21:40
222
0
什么时候能达到这个水平
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
清风吻雪 2009-5-16 09:16
223
0
都是高手啊,哎差距太大
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lpysky 2009-7-23 13:59
224
0
这个比赛过去很久了
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
antnts 2009-9-1 09:16
225
0
555~~~看算法头都疼了////
游客
登录 | 注册 方可回帖
返回