game

作者: n0va | 来源:发表于2018-11-22 20:41 被阅读0次

    这道题很给出一个MD5,求解发现是nuaa,但是在IDA里面我们可以知道要求输入的是int型,所以我们要转成数字形式,这里注意数字的存储方式,小端储存,我们输入1633777006,第一关就过了。

    来到第二关: 我们看到有UDLR,感觉很像迷宫 在这迷宫之前有一个预处理,是生成迷宫 的: image.png

    我们可以看到这波操作是针对 byte_404040数组的,搜索一下_mm_loadu类(长这样的函数)的作用,我们就能够跑出来这个迷宫来(byte_404040数组不是迷宫,要经过上图的处理才变成迷宫,所以我们要把它恢复成迷宫的样)

    #include <iostream>
    using namespace std;
    
    unsigned int byte_404040[208] = {
        0x45, 0x5E, 0x4A, 0x4A, 0x2B, 0x5E, 0x4A, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x5E, 0x41, 0x41, 
        0x4E, 0x55, 0x41, 0x41, 0x4E, 0x55, 0x41, 0x41, 0x4E, 0x5E, 0x4A, 0x41, 0x45, 0x5E, 0x4A, 0x4A, 
        0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x55, 0x4A, 0x4A, 0x4E, 0x5E, 0x4A, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 
        0x45, 0x5E, 0x41, 0x4A, 0x45, 0x5E, 0x41, 0x41, 0x4E, 0x55, 0x41, 0x41, 0x4E, 0x55, 0x41, 0x41, 
        0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 0x4E, 0x5E, 0x4A, 0x41, 
        0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x55, 0x4A, 0x4A, 0x4E, 0x5E, 0x4A, 0x4A, 
        0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x5E, 0x41, 0x4A, 0x45, 0x55, 0x4A, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 
        0x45, 0x5E, 0x4A, 0x41, 0x45, 0x5E, 0x41, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 
        0x4E, 0x5E, 0x4A, 0x41, 0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x55, 0x4A, 0x4A, 
        0x01, 0x55, 0x41, 0x41, 0x4E, 0x55, 0x41, 0x41, 0x4E, 0x55, 0x41, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 
        0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x5E, 0x4A, 0x4A, 0x45, 0x75, 0x61, 0x61, 0x2A, 0x20, 0x33, 0x2D, 
        0x3B, 0xFE, 0x8D, 0xE2, 0x82, 0x2D, 0x32, 0x37, 0x39, 0xB3, 0x24, 0x8D, 0x2A, 0xB3, 0x24, 0x8C, 
        0x1D, 0xB3, 0x24, 0x8F, 0x5D, 0xB3, 0x24, 0x8E, 0x1B, 0xB3, 0x24, 0x91, 0x59, 0xB3, 0x24, 0x90
    };
    int nuaa[4]={0x6e,0x75,0x61,0x61};
    int main()
    {
        for(int i=0;i<208;i++)
            byte_404040[i]=(byte_404040[i]^nuaa[i%4]);
        for(int i=0;i<208;i++){
            if(i%13==0)
                cout<<endl;
            cout<<(char)byte_404040[i];
        }   
        return 0;
    }
    

    结果迷宫就出来了:

    ++++E++++++++
    +           +
    + +++++++++ +
    + +++++++++ +
    ++          +
    +++++++++++ +
    + +++++++++ +
    + +++++++++ +
    + +++++++++ +
    + +++++++++ +
    + +++++++++ +
    +o          +
    +++++++++++++
    从o走到E:RRRR RRRR RRUU UUUU UUUU LLLL LLLU
    
    但是到这里我们又会发现,它又只是让我们输入7个数字, 这7个数字便能代表上面的URLD来完成走出迷宫
    继续往下看sub_401130函数 image.png
    aDurl数组存放的就是"DURL",可以分析得到,一个数通过aDurl数组转换成4个字符存放在v2中便是迷宫的DURL,于是我们可以推出7个数为 170 170 165 85 85 255 253
    第二关通过

    接下来第三关:



    发现让我们输入flag却没有任何判断函数,if 里面的东西讲真看不懂是什么操作,那么只能动态调试了,
    在汇编中我们可以看到 If 语句对应的是调用一个函数,单步跟进去发现这个 image.png create_function再F5 image.png

    这里就能写个脚本跑出flag了

    #include <iostream>
    using namespace std;
    int main()
    {
        char a[18]={'D','s','3','u','7','w','Y','N','{','V','y',';','S','`','=','|','c','h'};
        for(int i=0;i<18;i++){
            cout<<(char)(a[i]^i);
        }
        cout<<endl;
        return 0;
    } 
    

    所以flag 就是 Dr1v3r_Is_s0_m3ssy

    相关文章

      网友评论

          本文标题:game

          本文链接:https://www.haomeiwen.com/subject/anjrqqtx.html