能力值:
(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结束 . 感谢各位参与.
|
能力值:
(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举重若轻,静待明天好戏开场。
|