首页
社区
课程
招聘
[原创]看雪CTF-2017秋季赛第三题
发表于: 2017-10-30 12:35 3103

[原创]看雪CTF-2017秋季赛第三题

2017-10-30 12:35
3103
查看crakeme.exe,里面有很多anti-debug,但是没有加壳,直接用IDA加载。搜索"Success", "Ok"等字符串,发现下面的MessageBoxA调用,可以发现这是验证成功弹出的MessageBox。查看其前一个block有两个call指令,不过基本是anti-debug的功能,再往前找一个block。



前一个block在下图左边,block里面左后一个高亮的call比较关键,看实现很可能是memcmp,两个字符串参数分别是从CrackMe文本框输入的key和另外一个64字节的加密字符串。从下图右边的循环可以看出,加密字符串是从32字节的数据通过sprintf("%02x", input_char)编码而来,这样吧32字节的二进制数据编码成对应的16进制字符串,比如一个字节的'\x10’被转化成"10",这样可以和输入字符串比较。



由于程序有anti-debug不方便直接调试,但可以把上面高亮的call替换成 self JMP (0xeb 0xfe),然后在进入死循环后启动windbg attach上去观察字符串的值。由于加密字符串和输入字符串有关,所以不能直接找到key。输入一些简单的key测试,会发现加密字符串的值(64字节)只和输入字符串的前两个字节有关,而有加密字符串最后的encoding得到字符串只能是合法的16进制字符,即'0' - '9', ‘a’ - ‘f’, 两个字符合起来也就16*16=256个可能性,可以考虑枚举这256个值查看那一个加密后的字符串的头两个字符和输入相同,就是答案。用上面修改过的CrackMe.exe,每次启动输入'00'到'ff'中的值,然后运行下面的windbg command显示加密字符很快就能找到”18“是满足条件的,这个加密字符串也就是key。

cdb -pn crackme.exe -c "~0s;db dwo(@esp);q"


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//