-
-
[原创]看雪.TSRC 2017CTF秋季赛--第二题分析
-
发表于: 2017-10-27 15:58 3027
-
IDA分析看到函数需求是两个DWORD并且要满足公式:
5 * (dwHi - dwLow) + dwHi == 0x8F503A42 && 13 * (dwHi - dwLow) + dwLow == 0xEF503A42 17 * (dwHi - dwLow) + dwHi == 0xF3A94883 && 7 * (dwHi - dwLow) + dwLow == 0x33A94883
由于懒得计算公式,并且发现使用的是ESP作为scanf的缓冲区且栈布局明显存在溢出:
0018FF34 0041B08C "%s" 0018FF38 0018FF3C 0018FF3C 00000000 0018FF40 7EFDE000 0018FF44 0040100A 返回到 ctf2017_fpc.0040100A 自 ctf2017_fpc.00413D42 0018FF48 0040101C 返回到 ctf2017_fpc.0040101C 自 ctf2017_fpc.00401050 0018FF4C 00413E3E 返回到 ctf2017_fpc.00413E3E 自 ctf2017_fpc.00401000
所以先测试了000000000000/^P@(
^P 使用Alt+16输入),果然可以成功,但是提交答案是不认的,而且比赛要求只能输入字母数字。虽然答案不对,但是知道可以溢出。
放弃溢出之后进行公式计算,发现公式无解 ,于是又根据溢出开始找线索。但是溢出的话,溢出地址必须是由字母和数字组成的,所以往下使劲翻代码,翻到这里:
/*该代码用于计算最低位数值,没有找到结果*/ for (int n = 1; n < 256; n++) { char x = 0x42 - (char)(n * 5); char y = 0x42 - (char)(n * 13); if (char(x - y) == n) { printf("%x ", n); } else { continue; } }
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [下载] AheadLib修改 支持x64支持类/命名空间 41287
- [原创]使用高版本IDE开发+生成小exe/dll 6674
- [原创]看雪.TSRC 2017CTF秋季赛--第二题分析 3028
- [原创]第一题分析 2733
- [原创]x64下jmp远跳、远call的指令 9224
看原图
赞赏
雪币:
留言: