今天这个Cm是LV6 难度不错 因为用到了浮点数~~搞了我一天…最后LV6的最后一个算法没有完全逆出来!
/*************************************************
0044C1F6 |. DB3C24 fstp tbyte ptr [esp]
0044C1F9 |. 9B wait
0044C1FA |. B8 03000000 mov eax, 3 ; 3!
0044C1FF |. E8 ECF6FCFF call 0041B8F0
0044C204 |. D805 50C34400 fadd dword ptr [44C350] ; 512.+5.
0044C20A |. D9FA fsqrt ; 开根号
0044C20C |. E8 F365FBFF call 00402804 ; 求余弦
0044C211 |. DB7D B8 fstp tbyte ptr [ebp-48]
0044C214 |. 9B wait
0044C215 |. D905 54C34400 fld dword ptr [44C354] ; 1
0044C21B |. DC45 E8 fadd qword ptr [ebp-18] ; 9+…
0044C21E |. D9FA fsqrt ; 开根号
0044C220 |. D9E0 fchs ; 正负求反
0044C222 |. DB6D B8 fld tbyte ptr [ebp-48] ; 8经过算法后的值
0044C225 |. DEC1 faddp st(1), st ; 9+1求反+8经过算法的值
0044C227 |. DB7D AC fstp tbyte ptr [ebp-54] ; 保存 -3.8963…
0044C22A |. 9B wait
0044C22B |. D905 58C34400 fld dword ptr [44C358] ; 3!
0044C231 |. DC4D D8 fmul qword ptr [ebp-28] ; 3*7
0044C234 |. D805 54C34400 fadd dword ptr [44C354] ; 3*7+1
0044C23A |. D9ED fldln2 ; 加载LN2
0044C23C |. D9C9 fxch st(1) ; 与LN2交换
0044C23E |. D9F1 fyl2x ; 求L2X
0044C240 |. DB6D AC fld tbyte ptr [ebp-54]
0044C243 |. DEC1 faddp st(1), st
0044C245 |. DB7D A0 fstp tbyte ptr [ebp-60] ; [ebp-54]+l2x (-3.89+…)
0044C248 |. 9B wait
0044C249 |. D905 5CC34400 fld dword ptr [44C35C] ; 2.
0044C24F |. DC45 D0 fadd qword ptr [ebp-30] ; 6+2
0044C252 |. D9FA fsqrt ; 求根号
0044C254 |. DB6D A0 fld tbyte ptr [ebp-60]
0044C257 |. DEE1 fsubrp st(1), st ; 反减出栈 st(1)-st
0044C259 |. D905 58C34400 fld dword ptr [44C358] ; 3
0044C25F |. DC4D C8 fmul qword ptr [ebp-38] ; 3*5 (9 8 7 6 5)
0044C262 |. D835 5CC34400 fdiv dword ptr [44C35C] ; 2. (15/2)
0044C268 |. DEC1 faddp st(1), st ; 7.5+ -3.633….
0044C26A |. DB2D 60C34400 fld tbyte ptr [44C360] ; 37.
0044C270 |. DEC1 faddp st(1), st ; +0.37. (3.866+0.37.)
0044C272 |. D80D 6CC34400 fmul dword ptr [44C36C] ; *1000.
0044C278 |. DD5D F0 fstp qword ptr [ebp-10] ; 入栈保存 4236.257654…
0044C27B |. 9B wait
0044C27C |. DD45 F0 fld qword ptr [ebp-10] ; 出栈
0044C27F |. E8 9065FBFF call 00402814 ; 保存整数入栈~~
0044C284 |. 8945 98 mov dword ptr [ebp-68], eax ; eax==0x215
0044C287 |. 8955 9C mov dword ptr [ebp-64], edx ; edx==0
0044C28A |. DF6D 98 fild qword ptr [ebp-68] ; 浮点加载整数
/********************************************************
算法中带有严重缺憾,估计是浮点运算不过关的缘故!要好好补补浮点算法了!~
for (szNumber1=0;szNumber1<10;szNumber1++)
{
if (szList[0]>20)
{
break;
}
szList[0]=szNumber1;
for (szNumber2=0;szNumber2<10;szNumber2++)
{
szList[1]=szNumber2;
for (szNumber3=0;szNumber3<10;szNumber3++)
{
szList[2]=szNumber3;
for (szNumber4=0;szNumber4<10;szNumber4++)
{
szList[3]=szNumber4;
for (szNumber5=0;szNumber5<10;szNumber5++)
{
szList[4]=szNumber5;
szSum[1]=szList[1];//*szList[1]*szList[1];
szSum[1]*=szList[1];
szSum[1]*=szList[1];
szSum[1]+=szA;//5
szSum[1]=sqrt(szSum[1]);
szSum[1]=cos(szSum[1]);
szSum[0]=szList[0]+1;
szSum[0]=-sqrt(szSum[0]);
szSumEnd=szSum[0]+szSum[1];
szSum[2]=szList[2]*szC+1;//3
szAAA=szSum[2];
//szSum[2]=log(szSum[2])*log(2);
__asm
{
fld szAAA
fldln2
fxch st(1)
fyl2x
fstp szAAA
}
szSum[2]=szAAA;
szSumEnd+=szSum[2];
szSum[3]=szList[3]+2;
szSum[3]=sqrt(szSum[3]);
szSumEnd=szSum[3]-szSumEnd;
szSum[4]=szList[4]*szC;//3.
szSum[4] /=szD;//2.
szSumEnd+=szSum[4];
szSumEnd+=szMin;
szSumEnd*=szMax;
//***********************************************
//***********************************************
szSumList=szSumEnd;
if (szSumEnd-szSumList>=0.5)
{
szSumList+=1;
}
//******************************************************
ChechBox解图:
DownMe:KeyGen
PS:C算法和DASM的一样..但是运行起来有算法结果不一样…估计是那里的0.001值漏了…浮点编程硬伤.