第十届极客大赛WP-MISC、RE-2019.11.12

本文详细解析了一次CTF竞赛中RPG游戏挑战的攻略过程,包括游戏存档的修改技巧及使用Python解决复杂数学谜题的思路。作者分享了从游戏中提取flag的策略,以及如何利用Z3求解器和脚本爆破方法攻克难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序言:最近看雪的CTF题库也开启了,本来想去划水呢,结果第一道题就直接卡住了好长的时间。(真的是“电子竞技”,菜是原罪),唉,算了后续还会分析一下那个的第一道题。另外就是刚结束没多久的极客。这边是写了一些WP,有位老哥的WP也挺好的。文末给出那个老哥博客的链接。他的博客记录的WP是一些有关WEB的和RE的,重复的RE下面我就不在写了。

MISC

RPG真是太有趣了吧:做题也太累了,不如来打会游戏吧.

链接:
RPG
提取码:llx0(可能后面会失效我也不确定,要是失效了,可以给我私信。)

在这里插入图片描述

上面是下载后的文件,打开的时候应该大部分都会报错,显示缺少一个DLL的文件。去网上下载下来,按照步骤导入进行了。接着就到了游戏的欢乐时刻。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述上面应该是一个正常存档应该有的,然后就是按照流程刷怪,最后打败BOSS拿到flag但是这个游戏被改过了,你是没有办法这样通关的。因此面对这种直接外挂走起。

在片描述

在这里插入图片描述这里呢,我忘了我那次写的那个记事本放那里了,里面记录了人物技能和装备之类的代码,修改的时候需要的,不过你们可以试试,正好也体验一下游戏。

下面是我的存档:

在这里插入图片描述

最后就是打BOSS,最后就很好过了
最后一张最重要的图片:

在这里插入图片描述

是谁杀了谁:注意自己的HP,别被气死了。

链接:谁叫我 密码:c2za3j
备用: 谁叫我1
(可能后面会失效我也不确定,要是失效了,可以给我私信。)

接着打开

在这里插入图片描述
接着在你点击的时候此文件夹的目录中会出现一个文件

在这里插入图片描述
用hex打开

在这里插入图片描述
另外的题回头等有时间再放吧!而且那道ZIP加密的题直接爆破就行了。

RE

(PS:由于那个师傅的WP写的也挺好的我就只写其它的吧。)

python2:会Z3吗?

链接 提取码:emfo

这道题还是让我学到了许多的东西的,首先感谢出题人。什么感情自己体会啦!但是完整的脚本没写出来,我写出来的是部分,各位先勉强看着吧…

我也是一把辛酸泪不说了!放图:
在这里插入图片描述

最开始是像这样直接脚本一跑完事,后来一想36要爆破到什么时候后来变成一个一个手动爆了!心疼自己一分钟。
最开始其实是可以搞出来倒数第四个字符的并且那个flag的形式是确定的Syc{…}因此就一个接一个字符的爆就可以了。放一下我最后一个字符的脚本。

不知道为什么可能是代码太长了!

import struct
import time
import random
import string
arr = [77,263,394,442,463,512,667,641,804,752,885,815,1075,1059,1166,1082,1429,1583,1696,1380,
  1987,2263,2128,2277,2387,2670,2692,3255,3116,3306,3132,3659,3139,3422,3600,3584,3343,3546,
  3299,3633,3281,3146,2990,2617,2780,2893,2573,2584,2424,2715,2513,2324,2080,2293,2245,2309,
  2036,19441931,1817,1483,1372,1087,1221,893,785,697,586,547,324,177,184]
def fun(start, end, s):
    a = 32310901
    b = 1729
    c = s
    m = end - start
    while True:
        d = int((a * c + b) % m)
        yield d
        None
        c = d
def generate_random_str(randomlength=16):
    #生成一个指定长度的随机字符串
    random_str = ''
    base_str = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789_'
    length = len(base_str) - 1
    for i in range(randomlength):
        random_str += base_str[random.randint(0, length)]
    return random_str
def fun(start, end, s):
    a = 32310901
    b = 1729
    c = s
    m = end - start
    while True:
        d = int((a * c + b) % m)
        yield d
        None
        c = d
d=[1,2,3,4,5,6,7,8,9,10,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
while(d[39]!=arr[39]):
    f = generate_random_str(1)
    flag='Syc{Y0u_S3e_Z3_1s_soooo00000_Interest1n'+f+'}'
    length=len(flag)
    a = struct.unpack('<I', flag[length - 4:].encode())[0] & 255
    b=[]
    c = fun(1, 255, a)
    for i in range(32):
        b.append(next(c))
        continue
    d = [ 0 for i in range(72) ]
    for i in range(41):
        for j in range(32):
            a = ord(flag[i]) ^ b[j]
            d[i + j] += a
print (f)
print(b)
print(d)

最后的flag:
Syc{Y0u_S3e_Z3_1s_soooo00000_Interest1ng}

先写到这里吧!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值