能力值:
( LV2,RANK:10 )
|
-
-
176 楼
5555只有一对注册码,不知道会不会给个1半的1半分
|
能力值:
( LV4,RANK:50 )
|
-
-
177 楼
呵呵,感谢netwind老大,正如老大所说,耐心很重要噢,哈,也要静心噢
今早睡不着,静静的,没想着那题了(已经放弃N次了),可心却又想到那去了啊(不甘心啊),想想昨晚怎么弄不出来,嘿,灵光一闪,把思维逆了下,呵呵,变得跃跃欲试了,于是又拿起了笔竿子,笔画起来了,这次心还真静,感觉越做越顺,又苦战了三个来小时  ,呵呵,一不小心就出了结果
|
能力值:
( LV10,RANK:170 )
|
-
-
178 楼
一直被套在里面了。思路没打开
可以算出前帮段,可以后半段key怎么也对不上。
放弃了。哎
期待大牛的方法。
|
能力值:
( LV10,RANK:170 )
|
-
-
179 楼
时间过了,大牛发个思路出来吧。参考一下
|
能力值:
( LV4,RANK:50 )
|
-
-
180 楼
呵呵,GAME OVER 了,把源码放出来吧,让大家欣赏一下
|
能力值:
( LV10,RANK:170 )
|
-
-
181 楼
源码和逆向出来的代码差别应该不太大。
主要是希望作者讲讲设计思路和破解思路。
|
能力值:
( LV15,RANK:2504 )
|
-
-
182 楼
似乎所有的名字都可以用同一个key
keygen不需要算法,输出固定的字符串就行了
|
能力值:
( LV2,RANK:10 )
|
-
-
183 楼
膜 拜
|
能力值:
( LV12,RANK:403 )
|
-
-
184 楼
我自己的感觉是只要注册名中的各个字符按从小到大排序的名次顺序一致,它们的注册码就可以完全一样,比如abcdefghijkl和mnopqrstuvwx完全可以套用同一个注册码。
|
能力值:
(RANK:520 )
|
-
-
185 楼
注册码可以有多个,用户名可以有多个
任意一个注册码可以对应任意一个注册名
谢谢ccfer参与,膜拜!
|
能力值:
( LV15,RANK:2504 )
|
-
-
186 楼
744K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6e0x3$3x3r3c8G2j5#2)9J5k6h3y4G2L8g2)9J5c8Y4y4Z5L8%4N6i4k6h3u0Q4x3V1j5H3i4K6u0r3x3q4)9J5c8U0t1#2x3o6p5@1x3#2)9J5k6h3q4K6M7s2R3`.
|
能力值:
( LV12,RANK:290 )
|
-
-
187 楼
30121202220111212313121222323000101020102010201000102
|
能力值:
(RANK:170 )
|
-
-
188 楼
15eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8G2M7r3W2U0i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4c8Q4x3V1j5J5x3o6l9K6x3o6j5I4y4#2)9J5c8U0l9&6i4K6u0r3x3e0V1J5x3K6M7I4z5g2)9J5k6h3S2@1L8h3H3`.
就是这个12球的问题,哈哈,欢迎Netwind给大家讲解下
|
能力值:
( LV2,RANK:10 )
|
-
-
189 楼
啊,我以为是只有abcdefghijkl这几个字母
|
能力值:
(RANK:520 )
|
-
-
190 楼
ccfer把算法模型推出来了? 再次膜拜!
|
能力值:
( LV12,RANK:403 )
|
-
-
191 楼
不知道逆的对不对,刚才看了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++;
}
}
}
}
}
}
|
能力值:
(RANK:1130 )
|
-
-
192 楼
楼上的int dwTempd[16]
应该改成 int dwTempd[6][4]
|
能力值:
( LV12,RANK:403 )
|
-
-
193 楼
[QUOTE=海风月影;517983]楼上的int dwTempd[16]
应该改成 int dwTempd[6][4][/QUOTE]
在源代码中没看到它对应的空间大小,从实现上看应该是个2维数组,而且第二维应该是4,
因为程序中用到shl 4,不知6从何得出?
|
能力值:
( LV4,RANK:50 )
|
-
-
194 楼
好像是12×4的数组
|
能力值:
(RANK:1130 )
|
-
-
195 楼
是12*4的数组,最多能用到6*4的空间
|
能力值:
( LV2,RANK:10 )
|
-
-
196 楼
ccfer你多大?
为何如此强大...
|
能力值:
( LV2,RANK:10 )
|
-
-
197 楼
yd啊!!!!!!!!!!!!!!!!!!!!
|
能力值:
( LV4,RANK:50 )
|
-
-
198 楼
人家是GIRL,真能轻易告知,
|
能力值:
( LV2,RANK:10 )
|
-
-
199 楼
有这么强大的G?
不可能~~~
|
能力值:
( LV9,RANK:140 )
|
-
-
200 楼
很强,很强...
|
|
|