【CTF】小菜两碟

    CTF lz520520 5年前 (2019-10-06) 805次浏览

    文件下载地址:https://static2.ichunqiu.com/icq/resources/fileupload//CTF/JCTF2014/re200

    下载的文件,首先还是判断是什么格式的,丢进die,有dos头,但识别不出来NT头等其他部分。

    【CTF】小菜两碟

    所以我们可以看下PE头签名是否有问题,这里我们用010 editor里的exe.bt来解析文件。

    解析可以发现NT头签名有问题,和默认的0x00004550不一致。

    【CTF】小菜两碟

    可能因此导致NT头解析有问题。我们仔细观察可以发现二进制文件里,NT头位置从E9开始,正确应该是从E8开始。

    【CTF】小菜两碟

    所以修改这两处,我们保存在用die看看

    【CTF】小菜两碟

    发现可以正常解析了。

    【CTF】小菜两碟

    先运行程序看有没什么提示,发现让输入9个数字,然后最后打印结果。

    【CTF】小菜两碟

    用IDA来分析,可以看到success字符串,然后打印flag字符串。但上面有一系列判断语句。并且发现flag和输入的数字有关,无法通过跳转修改获取flag。

    【CTF】小菜两碟

    接收输入字符串,使用for循环,从v20开始接收,每一个数字用dword来存储。

    【CTF】小菜两碟

    首先是三个if语句判断v20,v21,v22的值。

    【CTF】小菜两碟

    可以得到计算公式,需要满足以下公式

    v20 * v21 * v22 == 1166

    (v21^v20) == v22 -4

    (v22 + v21 + v20) % 100 == 34

    根据下来逻辑,可以得知v23=80,v24=94,v25=98,但剩下三个数字,没有进行计算,猜测可以为任意数。

    【CTF】小菜两碟

    v20 * v21 * v22 == 1166 ,根据这个公式,我假设这三个值都不大于100,然后写了个脚本遍历所有1-100的数字,获取满足条件的值。

    最终脚本如下,因为符合条件的值有多个,所以每次获得的值就调用程序输入,看结果是否符合要求,脚本重定向标准输入输出到PIPE方便操作。获得success结果就终止。

    【CTF】小菜两碟

    最后运行脚本结果如下

    【CTF】小菜两碟


    Security , 版权所有丨如未注明 , 均为原创丨
    转载请注明原文链接:【CTF】小菜两碟
    喜欢 (3)