我的解题过程

  1. 下载后为一个exe程序,拖入exeinfo检查,发现无壳

    Microsoft Visual C++ v.12 - 2013 ( E8 ) www.microsoft.com [ Win Vista ] [ Debug:02 ] 
    Big sec. 1 .text   , Not packed 
    
  2. 首先运行该程序浏览大致功能,首先输出了一些字,提示输入flag,所以很难从程序本身获取信息。字符串“flag不太对呦,再试试呗,加油呦”是在校验之后打印的,可以用来快速定位关键函数。

  3. 将程序拖入OllyDbg中进行下一步分析,打开之后发现一开始就断在了call上,而不是常见的push ebp,一旦F8单步步过就会等待输入flag,所以核心函数一定在这个call里面。

  4. 此时长按F8,断在了00EB1423这个call上,所以F2下断点,Ctrl+F2重新调试,按F9到达断点,F7进入。

  5. 进入之后看到了一些之前输出到控制台的字符串,已经到了核心函数,直到0120105F 这个地址call了scanf函数获取输入字符串,之后紧跟的应该就是对flag的校验。

  6. 之后,在寄存器窗口看到了flag的真实地址,为DUTCTF{We1c0met0DUTCTF}

  7. 提交答案,正确

别人的解题过程

  1. 使用ida分析反汇编代码,发现为字符串比较,输入的字符串在v9,而另一个字符串是从xmmword_413E34复制过来的

    int main(){
        _mm_storeu_si128((__m128i *)&v5, _mm_loadu_si128((const __m128i *)&xmmword_413E34));
        scanf("%s", &v9);
        v3 = strcmp((const char *)&v5, &v9);
        if(v3)
            printf("get");
    }
    
  2. 查看该地址,为一长串十六进制,数据类型为xmmword多媒体操作数,点击R快捷键将其转为字符串后为0tem0c1eW{FTCTUD,因为小端存储所以顺序需要颠倒,但是仍然不够,紧接着还有一段十六进制,点击R快捷键转为字符串为}FTCTUD,拼接起来就是DUTCTF{We1c0met0DUTCTF},即正确答案

    .rdata:00413E34 xmmword_413E34  xmmword 3074656D30633165577B465443545544h