菜鸟跪求-大哥们帮忙看看
高手们,可以帮忙描述下面这段文章的解密过程吗?包括用到的函数,常量等!本人菜,刚进门,但是这知识很急用!在这里非常非常感谢各位了!
xTiNtint mi_2(int a1)
{
signed int result;
signed int v2;
v2 = a1;
result = 1;
if ( a1 >= 1 )
{
do
{
result *= 2;
--v2;
}
while ( v2 );
}
return result;
}
//////////////////////////////////////////////////////
//写成函数,是防止以后字符串发生变化。
int miyao(const char *string_miyao)
{
int m,n,key,crypto;
m=n=key=crypto=0;
int length=strlen(string_miyao);
for ( int i=0 ; i < length;i++ )
{
key = string_miyao[i];
crypto ^= key * mi_2(n);
crypto ^= key * mi_2(m);
n = (n + 7) % 19;
m = (m + 13) % 23 ;
}
return (crypto ^ 0x18901) % 100537;
}
//////////////////////////////////////////////////////
//算法很简单,是吧!,原程序是返回一个明文区的指针,
//这里就省事了
/////////////////////////////////////////////////////
int ReadPass(const char *pcode)
{
char code[16]={0};
int i,tmp,dst,sum,key,len,st0,flag;
HINSTANCE LibHandle;
MYPROC _ftol;
i=sum=tmp=st0=flag=0;
DOUBLE d310 = 9.6e1 ;
DOUBLE d318 = 9.946586828729721e-6;
LibHandle=LoadLibrary("msvcrt.dll");
_ftol =(MYPROC)GetProcAddress(LibHandle,"_ftol");
key=miyao("TblRefreshCurMonthServiceUse");//其实这里是个很稳定的整数30137,因为这个字符串是常量.
len=strlen(pcode);
if(len<1)
{
return flag;
}
else
{
do
{
tmp=pcode[i];
if(tmp>=32&&tmp<=0x7E)
{
sum+=key;
st0=sum%0x188B9;
__asm
{
fild st0;
fmul d310;
fmul d318;
call _ftol;
mov dst,eax
}
dst=(tmp-dst-32)%0x5f;
if(dst<0) dst=dst+0x5F;
code[i]=dst+32;
i++;
}
}
while(i<=(len-1));
strcpy(password,code);
flag=1;
return flag;
}
}