本帖最后由 梦游枪手 于 2019-8-21 17:33 编辑
贴个keygen代码吧,照着伪代码搬了不少,不要在意变量名这些细节。还有就是这个算法效率有点低。数字类的用户名还好,字符类的用户名生成注册码耗时太久了。
[Python] 纯文本查看 复制代码 import math
def gencode(num1,num2,num3):
dsum=num1
xn=num2
ps=num3
result=''
strtable="Q!W@E#R$T%Y^U&I*O(P)A:S;D+F=G?H/J~K`LZXCVBNMplmoknijbuhvygctfxrdzeswaq"
while(len(result)<0x14):
i=ps*(dsum+xn)
while(len(strtable)<=i):
i-=dsum
dsum-=5
if dsum<=0:
dsum=30
dsum+=2
result+=strtable[i]
xn+=3
ps-=4
return (result,dsum,xn,ps)
def powsqrt(dsum,x):
tmp1=x*(dsum-1)
tmp2=tmp1+1
result=pow(tmp2,1.5)
result+=math.sqrt(tmp1+x*dsum/2+1)+tmp2
return int(result)
def xornum(dsum,num):
return dsum^(dsum+2-num)
def getnumf(num):
return int(str(num)[0])
if __name__=='__main__':
text=raw_input()
dsum=0
for i in text:
dsum+=ord(i)
nf=getnumf(dsum)
xn=xornum(dsum,nf)
ps=powsqrt(dsum,nf)
code,dsum,xn,ps=gencode(dsum,xn,ps)
code,dsum,xn,ps=gencode(dsum,xn,ps)
code,dsum,xn,ps=gencode(dsum,xn,ps)
print code
对了,这个CM本质还是明文比较,在关键跳之前是可以看到明文注册码的。 |