吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1951|回复: 12
收起左侧

[CTF] 新手之0xGame 2025 Week1 Reverse WP

  [复制链接]
BaiGuQing 发表于 2025-11-19 08:50
本帖最后由 BaiGuQing 于 2025-11-20 12:58 编辑

引言

  • 我是一名入门的CTF玩家,看了看0xGame 2025 Week1 Reverse官方的WriteUp,感觉写的太简略了,这边以新手的视角开启0xGame 2025 Week1 Reverse

    SignIn

    • 这个题目我们需要准备好IDA,我在这里下载的[原创] IDA Pro 9 安装和插件配置-安全工具-看雪论坛-安全社区|非营利性质技术交流社区 (kanxue.com),下载的那个打包好的IDA Pro 9.2.7z,然后运行下InitIDA.exe,就可以正常使用了,进入页面我把默认取消了,所以和初始化不一样,但进入页面应该看的懂吧,我记得我点的Own,然后把exe可执行文件拖到里面
    • 然后默认OK,Yes(我也看不懂啥意思,但应该默认就行)
    • 进入之后可以按空格 (space) 键可以将线性视图切换为 CFG,展示该函数的控制流程图。
    • 该题并没有用到这个东西哈
    • 这个WriteUp写的也是很直接,直接Shift+F12就能看到flag了
      2489d7577c1d484796d1ab86bfa573d5.png
  • 因为字符串是硬编码在程序内部,因此用记事本、winhex等文本编辑工具其实也能看
  • 用x64dbg也是可以的,在https://sourceforge.net/projects/x64dbg/files/snapshots/中下载
  • 打开x64dbg
    ec00f2f3a14f445eb8cac490d45a8413.png
  • 这样配置一下dbg,将signin的exe文件拖进去,在反汇编窗口右键(就是左上角的窗口)
    22dea49df1904e5cad383f33aec3a437.png
  • 搜索一下匹配特征,在ASCII栏中输入0xGame,然后回车
    058bf92f8f414fd783badd457d90103a.png
  • 双击第一个就能看到flag了
    d412e2211e254d559ff17042f691daef.png

    SignIn2

  • 这个需要下载赛博厨子(cyberchef),下载链接https://github.com/gchq/CyberChef/releases/
  • 点开SignIn2文件后,记得回车一下,然后按照流程走可以得到一个加密的@Wq}u-guAs@}CoBoyq!y~yuo##oA@F@DDIE@I/,我们复制到cyberchef的input里面,在signin2中有提示告诉我们是ROT47 Brust Force,然后我们在Search中搜索ROT47 Brute Force,不知道是提示故意给错的还是怎么样,应该是搜索ROT47 Brute Force,然后你就会发现出现了一堆东西,我们只需要在Crib框中输入0xGame就能看到flag了
    6c8ae588ccf342058ef13e73dab4d7d5.png

    EasyXor

  • 这是一个未知的文件,按照WriteUp所写,一般遇到不认识的文件,先扔到DIE或者其它的文件查询工具里面查查看。下载一下DIE,https://github.com/horsicq/DIE-engine/releases,下载die_win64_portable_3.10_x64.zip文件
    fbdd8e1ff201428592c4d73ee8fd755e.png
  • 查看得知是ELF64文件,直接拖进IDA
  • 进去后按F5查看c语言伪代码(伪代码只可参考,不可全信)
  • 然后可以去问ai这段代码是干什么的,这边直接引用官方WriteUp的Python脚本了
    enc=[0x42,0x1A,0x39,0x17,0x1D,0x9,0x51,0x55,0x2C,0x5F,0x63,0xC,0xD,0x16,0x62,0x27,0x55,0x64,0x55,0x26,0x6D,0x6A,0x18,0x34,0x88,0x65,0x6E,0x1C,0x21,0x6E,0x3D,0x23,
    0x6A,0x25,0x6B,0x63,0x68,0x7E,0x77,0x75,0x9A,0x7D,0x39,0x43]
    key = 'raputa0xGame2025'
    for i in range(len(enc)):
    print(chr((enc[i]-i)^ord(key[i % len(key)])),end='')
  • 然后就是这个enc哪来的,返回到伪代码页面
    21820acd60bf4805afb401bb15ba1233.png
  • 双击它就能看到存储的信息了
    841ac2f052384fedb0c3360c4abb7b78.png
  • 如果你是下载的那个9.2.7z的话会自带插件,可以一键dump数据,不过有点bug?光选择那些不行,我得多选择一行才能完全dump出来,所以dump出来的数据需要删一点
    eb4b86f5419941388baf396bae112484.png
  • Dump as python list(byte)
  • 我只是讲一下这个数据的来源哈
  • 那个脚本可以直接复制进最下方的python栏执行
  • 复制到python栏中回车,再回车一下就出来了
    0c66abebbe304f8aa2914d3f0a1abbc2.png

    DyDebug

  • 看了看官方的WriteUp用的IDA调试,IDA的调试并没有那么好,所以这边我们用x64dbg来解题
  • 拿到题当然也是先去IDA看一看,看一下伪代码,理解一下题之后才能知道需要调试
  • 丢到IDA里面看到主函数出来特别⻓、特别复杂一大串,其中的加密也很复杂难懂,但实际上可以注意到这里的比对是拿我们的输入去和解密出来的字符串比较,因此在程序运行的时候
    其实flag就在程序内部,我们要做的其实只是让程序“停”在某个位置,然后查看一下解出来的v6,这
    个就是flag
  • 把程序拖进x64dbg,配置和之前的一样,然后也和之前一样,只不过这次搜索的是==字符串==
  • 我们会发现有个"Pity!"字样双击进入反汇编窗口
    c31f2561b514426083efd6682509f2d7.png
  • 可以搜索一下jg,je和jz的区别啊,这里在je下个端点(F2),重新运行一下,F9,输入数字
    0e4153dbe1e0438a92a6f894f097383a.png
  • 然后你就会发现flag已经出现了,直接在右边窗口复制复制符号即可

    BaseUpx

  • 根据这个名字可知是个加Upx壳的程序,我们也可以用exeinfo PE查看一下什么壳,下载链接在这https://github.com/ExeinfoASL/ASL/releases/,也可以去吾爱破解上找一下汉化+插件版本,然后upx壳在这个blog上看吧https://blog.csdn.net/qq_43633973/article/details/102573376,有点懒得打字了。总之脱壳之后,再拖进IDA,F5看下伪代码,注释中给了加密文本,看伪代码也可以知道是Base64加密,继续利用赛博厨子工具就可以得到flag了
    98687f57cf6047fabd78df6db62e3f6e.png

    zzz

    • 拖进IDA,看伪代码,发现x的方程不仅有加法乘法,还有位运算,这种问题适合用z3求解器来做,也可以根据题目得知是z3
    • 我也不知道这是什么玩意,怎么看出来的,就积累经验吧XD
    • 简单说下怎么在IDA内置的Python上安装z3吧
      import pip
      pip.main(['install','z3-solver'])

      384fc684c5ed42e19ee9288e42ca99c0.png

  • 具体看图片吧,懒得打字了,我先卸载了一遍,后安装了一遍。然后就是把WriteUp的脚本复制到Python栏中回车再回车
    from z3 import *
    import hashlib
    def sha256(s):
    return hashlib.sha256(s.encode()).hexdigest()
    s = Solver()
    x1, x2, x3, x4 = BitVecs("x1 x2 x3 x4", 32)
    s.add(3 * x2 + 5 * x1 + 7 * x4 + 2 * x3 == -1445932505)
    s.add(2 * (2 * (2 * x2 + x3) + x1) + x4 == -672666814)
    s.add(7 * x2 + 3 * x1 + 5 * x4 + 4 * x3 == 958464147)
    s.add(((x1 ^ x2) << 6) + ((x3 >> 6) ^ 0x4514) == 123074281)
    if s.check() == sat:
    m = s.model()
    print(m)
    solutions = []
    while s.check() == sat:
    m = s.model()
    solutions.append(m)
    s.add(Or(x1 != m[x1], x2 != m[x2], x3 != m[x3], x4 != m[x4]))
    print(f"找到 {len(solutions)} 个解")
    for sol in solutions:
    X1, X2, X3, X4 = (
        sol[x1].as_long(),
        sol[x2].as_long(),
        sol[x3].as_long(),
        sol[x4].as_long(),
    )
    print(f"X1, X2, X3, X4 = {X1}, {X2}, {X3}, {X4}")
    flag = f"0xGame{{{X1:08x}{X2:08x}{X3:08x}{X4:08x}}}"
    if (
        sha256(flag)
        == "4aba519d4666f5421488afaaf89efdcbe48e7a53f814ce5c1d82b46b55032651"
    ):
        print(flag)

    5976c02c32f240329c71721fa6fac604.png

  • 脚本怎么写我也不会,慢慢学吧,只能慢慢攒经验了
  • 写题解还真挺累的XD


需要题目文件请去https://www.ctfplus.cn/自取

免费评分

参与人数 4威望 +1 吾爱币 +23 热心值 +3 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
oldbabyjsx + 1 我很赞同!
DK151026 + 1 + 1 我很赞同!
helian147 + 1 + 1 热心回复!

查看全部评分

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

studio0318 发表于 2025-11-19 19:36
求带带,好想学
zgy123 发表于 2025-11-19 20:00
shililyya 发表于 2025-11-19 22:07
michaeltfs 发表于 2025-11-20 23:02
太牛了,膜拜
moshegudu 发表于 2025-11-22 08:31
好想学习下新知识点
KarlOtto 发表于 2025-11-22 23:21
学点re也不错
oldbabyjsx 发表于 2025-11-23 08:58
厉害 新人越来越厉害了
zhiyuovo 发表于 2025-11-23 15:08
好厉害!!
stbeta 发表于 2025-12-3 09:20
刚接触这个领域,来学习大佬的解题思路
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-7-14 00:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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