首页
社区
课程
招聘
[分享]我也发个第2阶段第2题答案
发表于: 2010-11-6 12:23 9257

[分享]我也发个第2阶段第2题答案

2010-11-6 12:23
9257

void GetHash(const char* pszUserName, BYTE* pHash)
{
        Integer a(-3);
        Integer modulus("C564EEF070E69193h");
        Integer b("22996B9C33AEEFDBH");
       
        ECP ecp(modulus, a,b);
       
        Integer var_378("1C4EEE9222DDDA62h");
        Integer var_328("2223A1D595845FA2h");
       
        ECP::Point base(var_328, var_378);
       
        Integer var_364("880198E3724F9FEEh");
        Integer var_350("297A4A1E5B1FC99Bh");
       
        ECP::Point y(var_350, var_364);                //pub-key
       
       
        Integer var_33C("C564EEF19A080B07h");                //n

        Integer d("54656E63656E7420H");                //ecc 密码是 "Tencent "
        ECDSA<ECP, SHA>::Signer priv(ecp, base, var_33C, d);
       
        AutoSeededRandomPool rng;
       
        priv.SignMessage(rng, (BYTE*)pszUserName, strlen(pszUserName), pHash);

}

void Base32Convert(BYTE* pHash, BYTE* pData)
{
        int i;
        int j;
        BYTE bits[20*8];
        for(i=0; i<20; i++)
        {
                for(j=0; j<8; j++)
                {
                        bits[i*8+7-j] = (pHash[i]>>j)&1;
                }
        }

        for(i=0; i<32; i++)
        {
                for(j=0; j<5; j++)
                {
                        pData[i] |= bits[i*5+j] << (4-j);
                }
        }
}

void DataToCode(BYTE* pData, char* pszCode)
{
        char* pstr = "ABCDEFGHJKMNPQRSTVWXYZ1234567890";
        int i;
        for(i=0; i<32; i++)
        {
                pszCode[i] = pstr[pData[i]];
        }
}

void Keygen(const char* pszUserName, char* pszLicenseCode)
{
        BYTE cbHash[32];
        BYTE cbData[32];
        memset(cbHash, 0, sizeof(cbHash));
        memset(cbData, 0, sizeof(cbData));

        //ecdsa
        GetHash(pszUserName, cbHash);

        //blowfish
        UINT* ptmp = (UINT*)cbHash;
        *(UINT*)(cbData+0x10) = ptmp[0] ^ ptmp[1] ^ ptmp[2] ^ ptmp[3];

        ptmp[0] ^= *(UINT*)(cbData+0x10);
       
        BF_KEY key;
        My_BF_set_key(&key, 8,(BYTE*)"DEADBEEF");
        My_BF_decrypt(ptmp, &key);

        ptmp[2] ^= ptmp[0];
        ptmp[3] ^= ptmp[1];

        My_BF_decrypt(ptmp+2, &key);

        //置换
        int i;
        for(i=0; i<16; i++)
        {
                cbHash[i] = gtable[cbHash[i]];
        }
        for(i=0; i<4; i++)
        {
                cbData[0x10+i] = gtable[cbData[0x10+i]];
        }

        //SMS4
    INT32U rk[32];
   
    SMS4_KeyExpansion ((ULONG*)"Security@Tencent", rk);
        SMS4_Encryption((ULONG*)cbHash, rk, (ULONG*)cbData);

        //base32

        BYTE sndata[32] = {0};

        Base32Convert(cbData, sndata);

        char szCode[64] = {0};
        DataToCode(sndata, szCode);

        pszLicenseCode[8] = pszLicenseCode[0x11] = pszLicenseCode[0x1a] = '-';
        memcpy(pszLicenseCode, szCode, 8);
        memcpy(pszLicenseCode+9, szCode+8, 8);
        memcpy(pszLicenseCode+0x12, szCode+16, 8);
        memcpy(pszLicenseCode+0x1b, szCode+24, 8);
}


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (17)
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
强人不少。..
2010-11-6 12:26
0
雪    币: 358
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我又来八卦了  哈哈
LZ好像是专门为了这比赛才注册的号啊
我大胆的再猜测一次 兰州是不是 shoooo的马甲的马甲
2010-11-6 12:35
0
雪    币: 107
活跃值: (1683)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
膜拜,马甲不少啊 ECC死而无憾了
2010-11-6 12:43
0
雪    币: 279
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我发现我EC, base point, n都逆对或猜对了, 由于不懂ECC原理, 没解出D~
膜拜
2010-11-6 13:20
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
shooo和shooo的马甲分别是谁?
顺便发一下crackme还原出来的代码:

Integer a(-3);
Integer modulus("C564EEF070E69193h");
Integer b("22996B9C33AEEFDBH");

ECP ecp(modulus, a,b);

Integer var_378("1C4EEE9222DDDA62h");
Integer var_328("2223A1D595845FA2h");

ECP::Point base(var_328, var_378);

Integer var_364("880198E3724F9FEEh");
Integer var_350("297A4A1E5B1FC99Bh");

ECP::Point y(var_350, var_364);                //pub-key

Integer var_33C("C564EEF19A080B07h");                //n

ECDSA<ECP, SHA>::PublicKey pubkey;
pubkey.Initialize(ecp, base,var_33C, y);

ECDSA<ECP, SHA>::Verifier verifier(pubkey);

bool bsuccess = verifier.VerifyMessage((byte *)str, strlen(str), sig, 0x10);
2010-11-6 13:27
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看来确实是shoooo啊
2010-11-6 13:49
0
雪    币: 1319
活跃值: (2306)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
shoooo是脱壳牛人,无壳不脱,太厉害了,论坛高手,不知什么原因被BAN了,消失了。
2010-11-6 14:01
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
几年前和shooo聊过几句,现在我被你们当作shooo的马甲,笑死我了,按照我对他的印象,应该是不会化作马甲来参赛的。
2010-11-6 14:12
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你们确实聊过,因为当时你在自言自语
2010-11-6 15:22
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
达文西,你完全是个臆想家啊
2010-11-6 16:13
0
雪    币: 2181
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
大S格格出现啦?
2010-11-6 18:59
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
绝对正确,不是臆想。
2010-11-6 19:21
0
雪    币: 1115
活跃值: (122)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
14
上面的上面那位,和shooo的真身是同一只老鼠...
你把真马甲引出来了。
2010-11-6 19:45
0
雪    币: 2181
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我是来膜拜大S格格的
2010-11-7 11:02
0
雪    币: 20
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
4个圈在玩游戏 没时间做题。。。。
2010-11-7 21:05
0
雪    币: 1098
活跃值: (193)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
17
我保证不是shoooo的马甲。
我想shoooo不会为这个比赛而注册马甲了的。
2010-11-11 23:52
0
雪    币: 1098
活跃值: (193)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
18
我保证不是shoooo的马甲。
我想shoooo不会为这个比赛而注册马甲了的。
2010-11-11 23:53
0
游客
登录 | 注册 方可回帖
返回
//