XDCSC2010破解题1
2014-03-17
这是一个破解题,程序下载03破解 程序是要求输入正确的密码,感觉这种题应该不算太难。直接甩到IDA里面,F5(不要鄙视我老师F5,F5看大概,之后OD看细节),一看不打紧,结果发现流程清清楚楚,顿时喜上眉梢。
int __cdecl wmain()
{
const char *v1; // [sp-4h] [bp-20Ch]@2
char v2; // [sp+4h] [bp-204h]@1
char Dst; // [sp+5h] [bp-203h]@1
unsigned int v4; // [sp+204h] [bp-4h]@1
int v5; // [sp+208h] [bp+0h]@1
v4 = (unsigned int)&v5 ^ __security_cookie;
printf(&Format);
v2 = 0;
memset(&Dst, 0, 0x1FFu);
scanf(&byte_402108, &v2);
if ( strcmp(&v2, (const char *)&unk_40210C) )
v1 = &byte_402130;
else
v1 = (const char *)&unk_402114;
printf(v1);
return 0;
}
这就是直接将输入字符串对比就行了啊。然后一看40210C的字符窜,傻了眼有个0x1F,这在键盘上是没有对应的啊,肿么输入啊。这个时候我想到了以前一个同学问的同样的在cmd里面输入键盘上没有对应字符的问题。当时隐约记得可以通过管道,但是解这个题的时候没有想到。后来问了下吴哥,他一说重定向我马上就明白了。靠,这都忘了。
我们看到对应的密码是如图:
然后我就老老实实构造了一个二进制文件data,内容如下
1F 65 63 6D 32 30 34 00
cmd执行
软件破解1.exe < data
结果显示密码错误。这里面其实设计到scanf函数的一个特点。我们一般用scanf的时候都是
scanf("%s",a)
scanf("%d",&d)
这种格式,其实scanf还有这种格式scanf(“This is test%s”,a),这个时候我们输入的时候就必须要输入前面的非格式控制字符”This is test”然后才能输入%s对应的字符串,并且a缓冲区只存放%s部分。这个程序里面是将密码与缓冲区一一比较。我们的data中1F作为对应的非控制字符,为了跟密码一样,我们还得输入一个1f,也就是data的内容应该是:
1F 1F 65 63 6D 32 30 34 00
换成这个data,再执行
软件破解1.exe < data
就成功了。
blog comments powered by Disqus