首页
论坛
课程
招聘
[分享]我也发个第2阶段第2题答案
2010-11-6 12:23 7958

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

2010-11-6 12:23
7958
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);
}

看雪2022 KCTF 秋季赛 防守篇规则,征题截止日期11月12日!(iPhone 14等你拿!)

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (17)
雪    币: 1632
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
达文西 活跃值 2010-11-6 12:26
2
0
强人不少。..
雪    币: 337
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
疯子鱼 活跃值 2010-11-6 12:35
3
0
我又来八卦了  哈哈
LZ好像是专门为了这比赛才注册的号啊
我大胆的再猜测一次 兰州是不是 shoooo的马甲的马甲
雪    币: 87
活跃值: 活跃值 (325)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
frozenrain 活跃值 2010-11-6 12:43
4
0
膜拜,马甲不少啊 ECC死而无憾了
雪    币: 272
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Esper 活跃值 2010-11-6 13:20
5
0
我发现我EC, base point, n都逆对或猜对了, 由于不懂ECC原理, 没解出D~
膜拜
雪    币: 1075
活跃值: 活跃值 (17)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
accessd 活跃值 2 2010-11-6 13:27
6
0
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);
雪    币: 1632
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
达文西 活跃值 2010-11-6 13:49
7
0
看来确实是shoooo啊
雪    币: 3198
活跃值: 活跃值 (552)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
tjszlqq 活跃值 1 2010-11-6 14:01
8
0
shoooo是脱壳牛人,无壳不脱,太厉害了,论坛高手,不知什么原因被BAN了,消失了。
雪    币: 1075
活跃值: 活跃值 (17)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
accessd 活跃值 2 2010-11-6 14:12
9
0
几年前和shooo聊过几句,现在我被你们当作shooo的马甲,笑死我了,按照我对他的印象,应该是不会化作马甲来参赛的。
雪    币: 1632
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
达文西 活跃值 2010-11-6 15:22
10
0
你们确实聊过,因为当时你在自言自语
雪    币: 1075
活跃值: 活跃值 (17)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
accessd 活跃值 2 2010-11-6 16:13
11
0
达文西,你完全是个臆想家啊
雪    币: 2181
活跃值: 活跃值 (64)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
寂寞 活跃值 2010-11-6 18:59
12
0
大S格格出现啦?
雪    币: 1632
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
达文西 活跃值 2010-11-6 19:21
13
0
绝对正确,不是臆想。
雪    币: 1075
活跃值: 活跃值 (17)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
accessd 活跃值 2 2010-11-6 19:45
14
0
上面的上面那位,和shooo的真身是同一只老鼠...
你把真马甲引出来了。
雪    币: 2181
活跃值: 活跃值 (64)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
寂寞 活跃值 2010-11-7 11:02
15
0
我是来膜拜大S格格的
雪    币: 14
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
打泡泡 活跃值 2010-11-7 21:05
16
0
4个圈在玩游戏 没时间做题。。。。
雪    币: 1067
活跃值: 活跃值 (118)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
zhuliang 活跃值 5 2010-11-11 23:52
17
0
我保证不是shoooo的马甲。
我想shoooo不会为这个比赛而注册马甲了的。
雪    币: 1067
活跃值: 活跃值 (118)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
zhuliang 活跃值 5 2010-11-11 23:53
18
0
我保证不是shoooo的马甲。
我想shoooo不会为这个比赛而注册马甲了的。
游客
登录 | 注册 方可回帖
返回