首页
社区
课程
招聘
[求助][求助]算法请教,不知道这段代码能否得到逆算法?
2007-12-17 15:10 4790

[求助][求助]算法请教,不知道这段代码能否得到逆算法?

2007-12-17 15:10
4790
//32位长度的注册码
byte srcArry[32]="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
//运算结果是20位数组
byte descArry[20]="";
int tmp=0,result=0,var=0,n=31;
for (int i=19;i>=0;i--)
{
        for (;var<8;result|=tmp)
        {
                byte a=srcArry[n--];
                if (a>=65)
                {
                        tmp=(a-55)<<var;
                }else
                {
                        tmp=(a-48)<<var;
                       
                }
                val+=5;
        }
        descArry[i]=result;
        result>>=8;
}

已经知道结果数组,能否将这段算法逆回去,得到注册码?

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 259
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
rufus 2 2007-12-17 20:16
2
0
自己回复一下, 没有简单的逆向,
自己写了一个暴力破解的,效率还算可以.

byte ss[32]="";//注册码
byte binaryArray[20]="";//目标数组
int last=0;

Recursion(0,19,31,0);

Recursion(int inc,int desc_p,int src_p,int last)
{
        byte a=0,b=0,c=binaryArray[desc_p];
        int i=0,j=0,result=0;

        if (inc+5<8)
        {
                for (a=0x30;a<=0x5A;a++)
                {
                        if ((a>=0x30 && a<=0x39) || (a>=0x41 && a<=0x5A))
                        {
                                i=(a>=0x41)?(a-0x37):(a-0x30);
                                for (b=0x30;b<=0x5A;b++)     
                                {
                                        if ((b>=0x30 && b<=0x39) || (b>=0x41 && b<=0x5A))
                                        {
                                                j=(b>=0x41)?(b-0x37):(b-0x30);
                                                result=(i<<inc) | (j<<(inc+5)) | last;
                                                if((result & 0xff) == c)
                                                {
                                                        ss[src_p]=a;
                                                        ss[src_p-1]=b;
                                                        if (desc_p==0)
                                                        {
                                                                return 1;//找到匹配的注册码
                                                        }
                                                        Recursion(inc+10-8,desc_p - 1,src_p-2,(last | result)>>8);
                                                }
                                        }
                                }
                        }
                }
        }else
        {
                for (a=0x30;a<=0x5A;a++)
                {
                        if ((a>=0x30 && a<=0x39) || (a>=0x41 && a<=0x5A))
                        {
                                i=(a>=0x41)?(a-0x37):(a-0x30);
                                result=(i<<inc) | last;
                                if ((result & 0xff) == c)
                                {
                                        ss[src_p]=a;
                                        if (desc_p==0)
                                        {
                                                return 1;//找到匹配的注册码
                                        }
                                        Recursion(inc+5-8,desc_p - 1,src_p-1,(last | result)>>8);
                                }
                        }
                }
        }
        return 0;
}
游客
登录 | 注册 方可回帖
返回