吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11181|回复: 52
收起左侧

[CTF] 跟着小菜鸡一起做CTF(一)

  [复制链接]
低调的菜鸡 发表于 2021-2-19 22:31
本帖最后由 低调的菜鸡 于 2021-3-19 10:16 编辑

前言

​        过年被论坛上的破解题难住了,突然意识到自己的逆向功底还有待提高,一气之下刷了几道CTF水题用来找感觉。其中发现一道特别有意思的逆向题,给大家稍稍分享。

操作系统:win10

逆向工具:010editor,ida pro7.0(随便哪个版本都能用)

一、题目

​        CTF一般都是要寻找到一串乱七八糟的代码,类似于flag{xxxxxxxxxx}什么的,本题也不例外,下面是官网的一个下载界面。

1

1

没错,这是一个很皮的人写的题目。放张图片在这里让大家感受一下。

二、开搞开搞

2.0 下载文件

下载下来的文件就长这样,看起来并不是很漂亮,连图标都没有。。

image-20210219180522629.png

2.1 收集文件信息

  1. 使用010editor查看文件类型

    image-20210219180940473.png

    啪一下很快啊,我们打开了这个文件,我一看,哎,这是一个ELF文件,哦,原来是linux下的文件,来偷袭我一个windows程序逆向老同志(由于笔者并没有配置linux调试环境,所以只能静态分析)

  2. 确定是否需要脱壳

    一般linux下的文件最多加个UPX壳,我们直接搜索UPX字符串,啊,搜不到,感觉没加。

    image-20210219181043464.png

  3. 看一看能否找到明码的flag

    由于是做的ctf题,所以我们直接搜一下flag字符串,看看静态文件中是否存在,好吧,很明显不存在

    image-20210219181138831.png

2.2 明确分析思路

这里我们用的是静态分析

  1. 寻找输入
  2. 寻找关键字符串
  3. 定位关键验证逻辑
  4. 分析关键验证逻辑,理清思路
  5. 模拟运行直接调试(没有搭环境,pass)运行得到flag

2.3 详细分析

  1. 将这一坨东西拖入IDA(此时我们可以喝个茶?等它慢慢跑完)

    加载完成后,我们可以看到IDA解析出来的函数,它还很贴心的帮我们分析出了main函数。

    7

    7

  2. 双击进入main函数,看到如下一堆函数逻辑。

    image-20210219182241359.png

    哎~,看起来似乎作者并没有为难我们,所有功能都放main函数中的,我们甚至还找到了一些注册成功的输出。

    9

    9

    有些玩破解的小伙伴就要问了,接下来是不是直接改跳转,让他跳转到Congratulations?当然不是啦!大家走错片场啦,这里是逆向哦。所谓逆向,就是要分析出写程序人的意图,然后让他明白,不管你怎么搞,我都能给你还原成原始代码,并搞你的心态,直接写注册码。接下来,就让我们一起走进这个开发者逗逼的内心世界吧。

  3. 辅助工具,On!

    由于该程序笔者并不想动态调试,加上程序逻辑清晰,并没有加一些花里胡哨的东西(例如花指令),这里就使用了IDA的灵魂,F5,一键还原伪代码。

    我们在main函数中直接F5,就能看到这段逻辑的伪码啦。

    10

    10
    image-20210219200950816.png
    image-20210219201038933.png

    好的,有些长得帅的小伙伴们就要问了,这个是个甚摸神器啊,为什么这些代码我还是看不懂呢?就只有几个成功失败字符串,我们的flag呢?别急,我们将一起一步一步走进作者阴暗的心里世界。

  4. 修改伪码

    首先,我们对代码进行小小的整容外加修改(一系列的变量替换,函数名称替换,变量格式更改),使其更加符合我们的编程习惯。

    13

    13

    14

    14

    image-20210219213958032.png

    ​        好的,经过亿点点(好吧,花了我20分钟)变量类型更改,变量命名以及函数命名,我们已经可以无压力的观看那段让我们感到头疼的伪代码了。(感兴趣的小伙伴可以下载文件下来慢慢修改伪码,看看是不是和我改的一样哟)

  5. 分析源码
    ​        可以看出,该代码是用我们输入nctf{xxxxx}(共24位)中的x来对内存中的x,y进行一系列的运算,用算完后的x,y在数组mazeBuffer中定位到一个值,如果这个值为#,则输出成功,否则输出失败

    ​        那我们看看mazeBuffer是一个什么东西呢?

    ​        双击mazeBuffer,我们看到它在数据段中的值

    ​        

    16

    16

    这样看起来并不直观,根据它的长度(64),以及最后的二维数组运算(mazeBuffer[8 * nPosY + nPosX]),我们可以大胆推断*它就是一个88 = 64大小的二维数组**。

    在数据区域使用IDA的另一个小功能微调,首先按d转换为data模式,然后在标签名右键array,选择如下设置

    17

    17

    得到如下直观的二维数组

    image-20210219215506831.png

    好吧,并不是很直观,我们再按一下r键,让它以ascii显示,这下直观了

    19

    19

    兄弟们,激动人心的时候到了

    为什么每一次操作,x,y都会变化呢?最后检查的为什么是#呢?x,y的初始值为什么是0,0呢?

    答案如下:

    这个mazeBuffer是一个游戏迷宫地图,我们之前分析出来的4个操作性字符(对x,y的值有影响的)Oo.0分别对应左右上下,也就是它会循环读取我们输入的操作性字符,然后让我们从上图的地图中虚拟移动,也就是改变我们的x,y坐标。(如果不明白x++,x--和左右的对应关系的,可以回想一下你们游戏辅助界面绘制的一些知识哟)。

    综上,我们得到了这个flag的终极解法。构造一条能从(0,0)点到达#位置的路径,只能走上图的空白处。现在兄弟们知道怎么走了么?大概就是nctf{右下右右下下左下下下右右右右上上左左},数一数,刚好24个字,然后打开你们的文本编辑器,将上下左右替换成对应的编码(上 ==>.   下==>0 左==>O 右==>o)

    至此,我们得到了我们最终的flag :nctf{o0oo00O000oooo..OO}

    至于验证方面,由于笔者懒得装linux系统,把flag提交上去跑了跑,官网显示通过,说明咱们分析正确了。

    现在,我们已经手把手的走完了整个旅途,是不是感觉ctf也不过如此呢?

2.4 总结

       1. 不要有畏惧心理,再难的程序也有被破解的一天,任何系统的程序只要能被反编译,就能被分析(**在此强烈吐槽某平台,新手题windows的就见到1道,做完新手题都累死我了**)。
       2. 要善于使用工具,很多功能IDA啊,OD啊,或者xdbg会给我们提供,工具玩的好,逆向也会更加省时省力
       3. 不要局限于破解,分析算法才是逆向的灵魂所在,就像我们今天走完的这段旅途,风景不也很美好么
       4.大佬们轻点喷。

三、附件

ELF文件与修改好的IDA文件: MazeCtf.zip (619.28 KB, 下载次数: 81)


解压密码:www.52pojie.cn

免费评分

参与人数 22吾爱币 +20 热心值 +20 收起 理由
MXGT + 1 谢谢@Thanks!
hansion + 1 + 1 我很赞同!
PonyLiu + 1 + 1 我很赞同!
ccwcjun + 1 + 1 用心讨论,共获提升!
rekaytang + 1 + 1 用心讨论,共获提升!
-default- + 1 我很赞同!
ncu.xxy + 1 + 1 谢谢@Thanks!
wsxqaz13245 + 1 我很赞同!
LittleFW + 1 我很赞同!
koazy_0 + 1 + 1 谢谢@Thanks!
QRQ + 1 + 1 热心回复!
北极狼Clifton + 1 + 1 用心讨论,共获提升!
KylinYang + 1 + 1 我很赞同!
fengbolee + 1 + 1 用心讨论,共获提升!
惜你96 + 1 + 1 作者还挺逗的,哈哈
ll996075dd + 1 + 1 我很赞同!
小朋友呢 + 2 + 1 谢谢@Thanks!
wxl949389 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zecore + 1 + 1 谢谢@Thanks!
我忘多 + 1 + 1 谢谢@Thanks!
liuchenxii + 1 + 1 用心讨论,共获提升!
领悟者的涂鸦笔 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Bluezzz 发表于 2021-2-19 23:17
ctf的题就是帅,每一道题都是一个小“游戏”,只不过玩法比较内啥。。
cm的作者其实也是很用心的
 楼主| 低调的菜鸡 发表于 2021-2-19 22:44
psycongroo 发表于 2021-2-19 22:43
liuchenxii 发表于 2021-2-19 22:49
小声问一下,解压密码是多少啊
 楼主| 低调的菜鸡 发表于 2021-2-19 22:56
liuchenxii 发表于 2021-2-19 22:49
小声问一下,解压密码是多少啊

稍等,我去修改一下帖子
MockingJay 发表于 2021-2-19 23:54
!!!去年国庆期间做过一道类似的题,只不过是用WASD,校内工作室招新的题目,估计思路就源自这道题了。
zecore 发表于 2021-2-20 00:04
感谢,收藏了
gunxsword 发表于 2021-2-20 00:11
NB,NB 这IDA玩的真6!小白羡慕嫉妒恨!
daymissed 发表于 2021-2-20 08:45
进来学习学习,感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 13:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表