【NSSCTF逆向】【2023题目】《润!》

发布时间 2023-10-17 16:04:41作者: Corax0o0

题目

解法

这道题蛮搞的,不算简单。
刚开始拿到这道题运行一下

有些信息,是一道迷宫题,可能flag是我们输入的路线吧?
先拿exeinfo来看看

告诉我有壳,但是不要用upx -d来脱壳,结合题目的标签,知道这题有一个魔改upx壳。

硬脱不行。
说实话我对upx的了解很皮毛,网上搜了搜upx壳的详细源码分析,大部分都是linux下面的,也没看到几个魔改upx怎么脱壳的视频,在打算用x64dbg来手动脱的时候,看了这个帖子
https://www.cnblogs.com/Clovershrub/p/17196774.html
我想着拿来看看吧,放进winhex里面跑了一下

四个位置的upx标识被改成了fuk,通过更改16进制值改回来

另存为之后

可以看到这里的exeinfo已经可以成功识别了。
那么直接试试

成了,再exeinfo

已经脱壳成功了,之后就是ida里面去看看
![](https://img2023.cnblogs.com/blog/3073714/202310/3073714-20231017151643167-767916058.png
先看看全貌,是比较简洁明了的。
我刚开始的做法是直接找关键字符串来找迷宫长什么样的

但实际上没有,那么这个题目的迷宫应该是动态生成的,换句话来讲就是在函数里面生成的。
那就细读一下吧

这个init我刚开始没注意,以为是什么系统函数

点进去之后可以看到关键字puzzle,大概猜到这是一个迷宫生成的函数,先记下来。

比较关键的就是这里的判断内容了,jur是什么现在都还是没有出现,v11是上面有个循环内所计算出来的。可以点进moving里面看看

jur出现了,在这个label15当中被赋成了1,结合上面的判断条件||,这个jur是不能等于1的,也就是说label15不能进入

也就是说这里这个default是不能进去的,又因为这是switchcase语句,要case awsd这几个选项(还包括n和u,不晓得啥用)

还有个值得注意的点,这里这个init又一次被调用了,所以这个迷宫是一个多维迷宫
ok,分析的差不多了,要进入动调了。、
先找到上面那个init的位置,因为多次调用了这个初始化迷宫的函数

4015CE下断点

优化一下,到这个地方下断可以少跑几次。
第一次运行
然后这个又是一个8*8的迷宫,所以放进内存里面

这是第一个迷宫

输入一串字符串
第二个迷宫也出现了

第三个也有了,复制下来,让gpt帮我优化一下

都优化一下
写成一个脚本(偷得)

点击查看代码
maze_arr=[   0,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   0,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
    0,   0,   0,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   0,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   0,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   0,   0,   0,   0, 
    0,   0,   0,   0,   0,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   0,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
    0,   0,   0,   0,   0,   0,   1,   0,   0,   0, 
    0,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   0,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   0,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   0,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    0,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   0,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   0,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   0,   0,   0,   0, 
    0,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   0,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   0,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   0,   0,   0,   0, 
    0,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    0,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 
    1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 
    0,   0,   1,   0,   0,   0,   0,   0,   0,   0, 
    0,   0,   0,   0,   0,   0,   0,   0]
for l in range(8):
    for i in range(8):
       for j in range(8):
            print(maze_arr[l*64*4+i*8*4+j*4], end='')
       print('\n', end='')
    print('\n',end='')
出了三个迷宫,然后用手解一下 ssddssuuwwddndduuussdussasauudd ![](https://img2023.cnblogs.com/blog/3073714/202310/3073714-20231017154821819-582692086.png) 出了。 。 。 这道题还有很多知识点,包括PE格式,魔改upx,动调的一些技巧。 后面大概围绕upx源码再分析一下写一篇