首页
社区
课程
招聘
[原创]小试金枪: jackozoo 2009热身版 !!
发表于: 2009-9-3 14:05 35984

[原创]小试金枪: jackozoo 2009热身版 !!

2009-9-3 14:05
35984
收藏
免费 7
支持
分享
最新回复 (64)
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
51
回天易love:
你推测的很正确, CM本声就没有计算长度超过9的Name.
算法简陋的不能再简陋了:
1. name和regcode长度一样.
2. name[i] + regcode[i] = 'a'+'z' .
3. 为了防止太明显被看出来, 偷梁换柱了一下, 将用户输入的name[1]和name[2]改成了'q','p'. 所以每个regcode的第二位和第三位都是"jk".
4. 设置了几个黑蛋, 验证前循环检查若0xxx = xx(name[i],regcode[j],key[k]). 则fail.
小ps: 本设置了个白蛋, 即一对SN为:xinchunge/deyongsheng , 打算作为示例序号给出的. 后感觉不厚道, 遂除掉了.

大PS:
1. 此CM其实早在昨天就被疯子鱼秒了.
2. CM被秒原因: 低估了穷举的力量. 序号长度太短, 特征太明显也是原因之一.
3. 手工去调试算法不知有没有人去做此苦力活. 能Kengen之, 能在最短时间内得序列号即为KO.
   大侠们不会浪费时间去分析一个烂VM的. VM这个东西, 作者的投入的代价和Cracker所需花费的
   代价从某中方面说是成正比的(高人写的VM可能就成指数级同增了).

4. 被秒之后, 本打算换个算法, 多Gen点vcode的, 后觉没必要便作罢. 因为此CM的目的已达到. 被各位
   穷举正好让我见识了穷举的艺术. 尤其是海风的两个a.c .
5. 此贴能吸引ccfer,海风月影,s大等偶像级人物, 已非常荣幸了.

在此宣告此CM结束 . 感谢各位参与.
2009-9-4 20:49
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
52
[QUOTE=jackozoo;681619]回天易love:
你推测的很正确, CM本声就没有计算长度超过9的Name.
算法简陋的不能再简陋了:
1. name和regcode长度一样.
2. name[i] + regcode[i] = 'a'+'z' .
3. 为了防止太明显被看出来, 偷梁换柱了一下, 将用户输入的name...[/QUOTE]

来晚了,春哥刚刚唱完
2009-9-4 22:39
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
53
做了些垃圾活
   
    BYTE code = 0, bParam = 0;
    DWORD dParam = 0,tesp = 0, treg = 0;
    WORD wParam = 0, pos = 0;
    PVOID p = 0;
    FILE* fp = fopen("log.txt","a+");
    if (fp == NULL) return 1;
    while(pos < sizeof(VMDATA)) 
    {
        code = VMDATA[pos];
        pos++;
        p = (void*)(VMDATA+pos);
        bParam = *(BYTE*)p;
        wParam = *(WORD*)p;
        dParam = *(DWORD*)p;
        switch (code)
        {
        case 0:
             fprintf(fp,"%04X [%02X]        nop\r",pos-1,code);
            break;
        case 1:
            fprintf(fp,"%04X [%02X]        push byte 0x%02X\r",pos-1,code,bParam);
            pos = pos + 1;
            break;
        case 2:
            fprintf(fp,"%04X [%02X]        push word 0x%04X\r",pos-1,code,wParam);
            pos = pos + 2;
            break;
        case 3:
            fprintf(fp,"%04X [%02X]        push dword 0x%08X\r",pos-1,code,dParam);
            pos = pos + 4;
            break;
        case 4:
            fprintf(fp,"%04X [%02X]        push byte %s\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 5:
            fprintf(fp,"%04X [%02X]        push word %s\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 6:
            if (bParam == 8)
            {
                fprintf(fp,"%04X [%02X]        push dword 0x%08X\r",pos-1,code,0);
            }
            else if (bParam == 4)
            {
                fprintf(fp,"%04X [%02X]        push dword %s\r",pos-1,code,"TESP");
            }
            else
            {
                fprintf(fp,"%04X [%02X]        push dword %s\r",pos-1,code,REG[bParam]);
            }
            pos = pos + 1;
            break;
        case 7:
            fprintf(fp,"%04X [%02X]        pop byte %s\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 8:
            fprintf(fp,"%04X [%02X]        pop word %s\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 9:
            fprintf(fp,"%04X [%02X]        pop dword %s\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 10:
            fprintf(fp,"%04X [%02X]        push byte [0x%08X]\r",pos-1,code,dParam);
            pos = pos + 4;
            break;
        case 11:
            fprintf(fp,"%04X [%02X]        push word [0x%08X]\r",pos-1,code,dParam);
            pos = pos + 4;
            break;
        case 12:
            fprintf(fp,"%04X [%02X]        push dword [0x%08X]\r",pos-1,code,dParam);
            pos = pos + 4;
            break;
        case 13:
            fprintf(fp,"%04X [%02X]        pop byte [0x%08X]\r",pos-1,code,dParam);
            pos = pos + 4;
            break;
        case 14:
            fprintf(fp,"%04X [%02X]        pop word [0x%08X]\r",pos-1,code,dParam);
            pos = pos + 4;
            break;
        case 15:
            fprintf(fp,"%04X [%02X]        pop dword [0x%08X]\r",pos-1,code,dParam);
            pos = pos + 4;
            break;
        case 16:
            fprintf(fp,"%04X [%02X]        add byte\r",pos-1,code);
            break;
        case 17:
            fprintf(fp,"%04X [%02X]        sub byte\r",pos-1,code);
            break;
        case 18:
            fprintf(fp,"%04X [%02X]        imul byte[NULL]\r",pos-1,code);
            break;
        case 19:
            fprintf(fp,"%04X [%02X]        idiv byte[NULL]\r",pos-1,code);
            break;
        case 20:
            fprintf(fp,"%04X [%02X]        and byte\r",pos-1,code);
            break;
        case 21:
            fprintf(fp,"%04X [%02X]        or byte\r",pos-1,code);
            break;
        case 22:
            fprintf(fp,"%04X [%02X]        xor byte\r",pos-1,code);
            break;
        case 23:
            fprintf(fp,"%04X [%02X]        add word\r",pos-1,code);
            break;
        case 24:
            fprintf(fp,"%04X [%02X]        sub word\r",pos-1,code);
            break;
        case 25:
            fprintf(fp,"%04X [%02X]        imul word[NULL]\r",pos-1,code);
            break;
        case 26:
            fprintf(fp,"%04X [%02X]        idiv word[NULL]\r",pos-1,code);
            break;
        case 27:
            fprintf(fp,"%04X [%02X]        and word\r",pos-1,code);
            break;
        case 28:
            fprintf(fp,"%04X [%02X]        or word\r",pos-1,code);
            break;
        case 29:
            fprintf(fp,"%04X [%02X]        xor word\r",pos-1,code);
            break;
        case 30:
            fprintf(fp,"%04X [%02X]        add dword\r",pos-1,code);
            break;
        case 31:
            fprintf(fp,"%04X [%02X]        sub dword\r",pos-1,code);
            break;
        case 32:
            fprintf(fp,"%04X [%02X]        imul dword\r",pos-1,code);
            break;
        case 33:
            fprintf(fp,"%04X [%02X]        idiv dword\r",pos-1,code);
            break;
        case 34:
            fprintf(fp,"%04X [%02X]        and dword\r",pos-1,code);
            break;
        case 35:
            fprintf(fp,"%04X [%02X]        or dword\r",pos-1,code);
            break;
        case 36:
            fprintf(fp,"%04X [%02X]        xor dword\r",pos-1,code);
            break;
        case 37:
            fprintf(fp,"%04X [%02X]        test byte\r",pos-1,code);
            break;
        case 38:
            fprintf(fp,"%04X [%02X]        test dword\r",pos-1,code);
            break;
        case 39:
            fprintf(fp,"%04X [%02X]        cmp dword\r",pos-1,code);
            break;
        case 40:
            fprintf(fp,"%04X [%02X]        jmp word 0x%04X\r",pos-1,code,wParam);
            pos = pos + 2;
            break;
        case 41:
            fprintf(fp,"%04X [%02X]        jz word 0x%04X\r",pos-1,code,wParam);
            pos = pos + 2;
            break;
        case 42:
            fprintf(fp,"%04X [%02X]        jnz word 0x%04X\r",pos-1,code,wParam);
            pos = pos + 2;
            break;
        case 43:
            fprintf(fp,"%04X [%02X]        js word 0x%04X\r",pos-1,code,wParam);
            pos = pos + 2;
            break;
        case 44:
            fprintf(fp,"%04X [%02X]        jns word 0x%04X\r",pos-1,code,wParam);
            pos = pos + 2;
            break;
        case 45:
            fprintf(fp,"%04X [%02X]        jl word 0x%04X\r",pos-1,code,wParam);
            pos = pos + 2;
            break;
        case 46:
            fprintf(fp,"%04X [%02X]        jle word 0x%04X\r",pos-1,code,wParam);
            pos = pos + 2;
            break;
        case 47:
            fprintf(fp,"%04X [%02X]        jg word 0x%04X\r",pos-1,code,wParam);
            pos = pos + 2;
            break;
        case 48:
            fprintf(fp,"%04X [%02X]        jge word 0x%04X\r",pos-1,code,wParam);
            pos = pos + 2;
            break;
        case 49:
            fprintf(fp,"%04X [%02X]        ret\r",pos-1,code);
            break;
        case 50:
            fprintf(fp,"%04X [%02X]        ret\r",pos-1,code);
            break;
        case 51:
            fprintf(fp,"%04X [%02X]        push byte [%s]\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 52:
            fprintf(fp,"%04X [%02X]        push dword [%s]\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 53:
            fprintf(fp,"%04X [%02X]        pop byte [%s]\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 54:
            fprintf(fp,"%04X [%02X]        pop dword [%s]\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 55:
            fprintf(fp,"%04X [%02X]        mov TREG, %s\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 56:
            fprintf(fp,"%04X [%02X]        mov %s, TREG\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 57:
            fprintf(fp,"%04X [%02X]        pop byte to %s by cbw cwde\r",pos-1,code,REG[bParam]);
            pos = pos + 1;
            break;
        case 58:
            fprintf(fp,"%04X [%02X]        mov TESP, ESP \r",pos-1,code);
            break;
        default:
            break;
        }
    }
    fclose(fp);
    return 0;
厉害的VM搞不动,本来还想试试能不能捡个偏宜解码出来看看算法,跑了半天没结果,加上楼主公布结果了,不玩了。
学习海风、CCFER的方法,希望啥时候能像sessiondiy那样对CM举重若轻,静待明天好戏开场。
上传的附件:
2009-9-4 22:44
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
54
看了hawking的idb, CM基本上完全被肢解了, 连一些空标签名你都猜对了. PF.
本以为我花的时间至少和分析者的时间要达到1:1吧. 现在看来我错了, 若我不公布结果大侠们
再随便玩玩估计就还原算法了. 汗...

Ok, PEDIY CM Contest is comming! Let's GO ~
2009-9-5 10:14
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
学习,受益非浅。
2009-9-12 22:51
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
简单破解的。
上传的附件:
2009-9-13 19:03
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
Thanks for sharing
2009-9-24 00:07
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
顶一次...测试..不知道行不行..
2009-9-30 12:24
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
59
源码编译通不过..但是例程还是可以用
2009-9-30 12:26
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
牛人,暂时看不懂
2010-3-21 15:35
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
学习学习!哈哈
2010-8-1 13:09
0
雪    币: 261
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
62
成功爆破.....
2010-8-2 18:26
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
代码呢?谁能,贴个完整的代码
2010-8-27 13:57
0
雪    币: 224
活跃值: (55)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
64
精彩,讨论得更精彩...
2010-9-3 10:14
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
求加密过程算法 你这个跟某个游戏的加密算法是一样的

========
我编译了一个 但是 里面的过程反汇编后跟你的不一样
你的要多很多
我的就那45行!
求解
2010-9-5 11:08
0
游客
登录 | 注册 方可回帖
返回
//