PYG官方论坛 发表于 2020-10-15 14:35:37

楚汉棋缘 验证算法全过程 by:xxxxxx

************************楚汉棋缘 验证算法全过程*******************

std::string GetCode(std::string SingleSn)
{
        std::string str = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz";
        //5个一组
        int posArray = {0};
        for (int i=0;i<5;i++)
        {
                posArray = str.find( SingleSn);
        }
        double numx = 0;
        int k = 0;

        do
        {
                numx += ((INT64)pow( 59.00 , 4-k )) * posArray[ 4 - k];
                k++;
        } while ( k<=4 );

        char bufp={0};
        sprintf(bufp , "%u" , (UINT64)numx);
        return std::string(bufp);
}


void RegIsterSn(char * szUser , char * szSn)
{
int len = strlen(szUser);
unsigned char buf={0};
strncpy( (char *)buf , szUser , len >= 0x14 ? 0x14:len );
unsigned char * pUser = (unsigned char *)buf;
int i = 0;
DWORD dwNum = 0 , dwNum1 = 0;
do
{
           dwNum =((UINT64)pow(double(pUser) , 2 ) + pUser);
           i++;
           dwNum1 += (dwNum * i);

} while ( i < 0x14 );
dwNum1 += 0x5BA0;

switch(dwNum1)
{
case 0x5C25C:
          dwNum1 += 0x64;
          break;
case 0x8C5BC:
          dwNum1 += 0x65;
          break;
case 0x3B6CA:
          dwNum1 += 0x66;
          break;
default:
          break;
}
// 以上是 decode

std::string sn="";
std::string strtoken;
std::string str(szSn);
std::stringstream strm( str );

for (int i=0;i<5;i++)
{
          std::getline(strm,strtoken,'-');
          sn+= GetCode(strtoken);
}

//百度去下载 freelip_1.1.tar.gz 库

verylong E = 0, N = 0 ,C = 0 , D = 0;
zhsread( "504337C07EBD946C1CB" , &E);
zhsread( "1F3662FAA8E266F962E0F02439186AC00561" , &N);
zsread((char *)sn.c_str() , &C);
zexpmod( C , E , N , &D );

char userCode={0};
sprintf(userCode , "%u" , dwNum1);
verylong U = 0;
zhsread( userCode , &U);

if ( 0 == zcompare( U , D ))
{
          printf("注册成功!\n");
}
}

void main()
{
        RegIsterSn("自由之翼","bk171-w281J-dt0xt-6NMYc-2IXbD");
        getchar();
}

//为什么我有源代码无法注册成功??? 因为作者有撒有盐啊~!~!
//请下载freelip_1.1库

坑一:    搜索 static double fudge = -1.0 改成 0.0

坑二:    找到RSA中的如下代码.

void
zmod(
        verylong in_a,
        verylong in_b,
        verylong *rr
        )

将 btopinv = fudge / btopinv);   改成btopinv = fradix / btopinv;

逆向过程很完整!很完美!过所有坑!

2020.10.15.   xxxxxx

转自 PYG周年群 ~

haduke 发表于 2020-10-15 14:44:03

我曾经注册过这个软件,虽然象棋很烂!

smallhorse 发表于 2020-10-15 20:11:57

膜6X前辈!

飞天 发表于 2020-10-15 20:42:24

膜拜,象棋不会玩,只能看热闹了。

email123 发表于 2020-10-15 23:36:02

自由之翼,bk17-w281J-dt0xt-6NMYc-2IXbD,少了个1也能注册成功,奇怪

liutongbao 发表于 2020-10-16 09:28:33

膜拜以上各位大佬!

qinccckencn 发表于 2020-10-16 19:24:15

謝謝大神做的分析好好學習一下

八神庵 发表于 2020-10-17 10:52:36

这个软件挺强 ……………………

xxhaishixx 发表于 2020-10-17 22:10:07

这个就厉害了,很牛

cfq001 发表于 2020-10-20 21:43:58

不错,谢谢分享,收藏了。
页: [1] 2
查看完整版本: 楚汉棋缘 验证算法全过程 by:xxxxxx