晕啊..碰到一个考数学的…
004013EE |> \DD45 F8 fld qword ptr [ebp-8]
004013F1 |. D9FE fsin
004013F3 |. DD5D A8 fstp qword ptr [ebp-58]
004013F6 |. DD45 F0 fld qword ptr [ebp-10]
004013F9 |. D9FE fsin
004013FB |. DD5D A0 fstp qword ptr [ebp-60]
004013FE |. DD45 A8 fld qword ptr [ebp-58]
00401401 |. DC4D A0 fmul qword ptr [ebp-60] ; sin*sin
00401404 |. DF2D 30304000 fild qword ptr [403030]
0040140A |. DEC9 fmulp st(1), st ; *
0040140C |. 83EC 08 sub esp, 8
0040140F |. DD1C24 fstp qword ptr [esp]
00401412 |. E8 D1000000 call <jmp.&CRTDLL.floor>
00401417 |. 83C4 08 add esp, 8
0040141A |. DD5D 98 fstp qword ptr [ebp-68]
0040141D |. D9EE fldz ; 将0.0装入st(0)
0040141F |. DC5D 98 fcomp qword ptr [ebp-68]
00401422 |. DFE0 fstsw ax
00401424 |. 9E sahf
00401425 75 05 jnz short 0040142C
上面关键算法
输入的用户名由atof转为浮点数 szName 注册码 转为浮点数 szKey
条件是:
非 szName<0 || szName==1000000.0 || szName<1 || szName>10000000000.0
szKey>1 && szKey<10000000000
然后 要
0<sin(szName)*sin(szKey)*1.000000000000000000e+16<1
才算成功
从这里知道 szName szKey 都已经是整数了~
也就是说
从
szName 为[1,1000000)&(1000000,10000000000)
szKey 为(1,10000000000)
区域中满足
0<sin(szName)*sin(szKey)*1.000000000000000000e+16<1
就OK~
要他们等于0是不可能的~
我们都知道 sin(a*Pi)==0,a为整数
也就是说我们只能需要他们正弦无限靠近0 而且都是区间条件满足的情况下..
然后符合红色式子的条件 就算成功
这就有问题了,怎么编程解决这个问题?
循环?就算输入用户名定了一个区间, 还有注册码的区间…
100亿次啊…
初步常识了未解决:
szEnd=0.999999999999999999999999/1.000000000000000000e+16;
szNameSin=sin(szName);
szKeSin=szEnd/szNameSin;
szKey=asin(szKeSin);
wsprintf(szKeyList,”%d”,szKey);
SetDlgItemText(hDlg,IDC_Serial,szKeyList);
更新一组Key:
411557987
245850922
来自Cronos的解说教程 感谢Cronos