看雪·2023 KCTF 年度赛 | 热身题解析

WriteUp 1年前 (2023) admin
303 0 0

看雪·2023 KCTF 年度赛 | 热身题解析

这是一场人类与超智能AI的“生死”较量

请立刻集结,搭乘SpaceX,前往AI控制空间站

智慧博弈  谁能问鼎


看雪·2023 KCTF 年度赛于9月1日中午12点正式开赛!比赛基本延续往届模式,设置了难度值、火力值和精致度积分。由此来引导竞赛的难度和趣味度,使其更具挑战性和吸引力,同时也为参赛选手提供了更加公平、有趣的竞赛平台。

*注意:签到题持续开放,整个比赛期间均可提交答案获得积分


目前第一题《失控的AI》已于昨日截止答题,该题围观人数3500+,共有48支战队成功提交flag,接下来一起看下该题的解题思路吧。



赛题解析

01
看雪·2023 KCTF 年度赛 | 热身题解析
解法一
解法1:韦达定理的逆定理

该解法由看雪论坛会员 XiaoFeng8bit 提供
看雪·2023 KCTF 年度赛 | 热身题解析

if ( v15 > 0 && v16 > 0 && v15 <= v16 && v16 + v15 == 117738 ) { v13 = "Accepted!n"; if ( v15 * v16 == 3457897337i64 ) goto LABEL_28; } break; } } } }LABEL_27: v13 = "Wrong answer!n";

由这段代码可知:
v15 + v16 = 117738
v15 * v16 = 3457897337

应用韦达定理的逆定理可得:
xx+117738x+3457897337=0
看雪·2023 KCTF 年度赛 | 热身题解析
得到-61637,-56101

去掉负号,根据v15 <= v16

得到:56101-61637


02
看雪·2023 KCTF 年度赛 | 热身题解析
解法二
解法2:因式分解法

(1)在线网站
该解法由看雪论坛会员 hesl 提供
看雪·2023 KCTF 年度赛 | 热身题解析

x96dbg.exe 载入程序,跟踪到下面的代码:
看雪·2023 KCTF 年度赛 | 热身题解析

发现是判断两个数 A,B;其中
A*B=0xCE1B5379
A+B=0x1CBEA
求出因数 A,B

进入 www.factordb.com 输入 3457897337(0xCE1B5379转换成10进制)
看雪·2023 KCTF 年度赛 | 热身题解析
A,B为 56101, 61637

结合程序中的格式字符串 “%lld-%lld” 分别带入 A,B 便可得出一个解:
看雪·2023 KCTF 年度赛 | 热身题解析
答案:56101-61637


(2)代码因式分解
该解法由看雪论坛会员 瑞皇 提供
看雪·2023 KCTF 年度赛 | 热身题解析
通过阅读源代码,我们可以发现Flag的数学逻辑:
1)两数相加为117738
2)两数相乘为3457897337

将3457897337进行素数分解,我们可以获取两个数为:56101 x 61637

根据代码所述,v13小于v14,且输入格式为”%lld-%lld”

故最终结果为:56101-61637
看雪·2023 KCTF 年度赛 | 热身题解析
获取素因子方法很多,可以直接使用搜索引擎搜索素数分解平台,也可以查阅相关资料根据理解自己写代码,或者请人工智能帮忙写一段,人工智能在写脚本方面确实效率很高。

下面是请人工智能写的一段代码,指定了Python、辗转相除法、代码规范三个要求。


令人惊喜的是,它给出的代码是可以直接使用的,这可以给我们节约一些时间。
def factorize(n): factors = [] while n % 2 == 0: factors.append(2) n = n // 2 p = 3 while p * p <= n: if n % p == 0: factors.append(p) n = n // p else: p += 2 if n > 1: factors.append(n) return factors # 示例用法num = 3457897337result = factorize(num)print(f"The prime factors of {num} are: {result}")


03
看雪·2023 KCTF 年度赛 | 热身题解析
解法三
解法3:求解二次方程

该解法由看雪论坛会员 GreatIchild 提供
看雪·2023 KCTF 年度赛 | 热身题解析

输入两个数以-分隔,给了两数之和与两数之积、第一个数不大于第二个数,求解二次方程即可。或者直接 z3 解:
from z3 import *x = Int('x')y = Int('y')s = Solver()s.add(x + y == 117738)s.add(x * y == 3457897337)assert s.check() == satprint(s.model())# 56101-61637


04
看雪·2023 KCTF 年度赛 | 热身题解析
解法四
解法4:穷举法

该解法由看雪论坛会员 yegu 提供
看雪·2023 KCTF 年度赛 | 热身题解析

看雪·2023 KCTF 年度赛 | 热身题解析

这道题大致的逻辑是输入两个整数,格式为%lld-%lld,这两个整数需要满足以下要求:
V12>0
V13>0
V12<=V13
V13+V12==117738
v12*v13==3457897337

然后直接上C++代码爆破,得出结果:56101-61637
看雪·2023 KCTF 年度赛 | 热身题解析

看雪·2023 KCTF 年度赛 | 热身题解析

看雪·2023 KCTF 年度赛 | 热身题解析

第二题《CN星际基地》正在进行中

本题与昨日中午12点放出,题目类型为:Reverse,经过一天的激烈角逐,已有7个战队成功破解,拿下flag。他们分别是:

看雪·2023 KCTF 年度赛 | 热身题解析


在这个充满变数的赛场上,没有人能够预料到最终的结局。有时,优势的领先可能只是一时的,一瞬间的失误就足以颠覆一切。而那些一直默默努力、不断突破自我的人,往往会在最后关头迎头赶上,成为最耀眼的存在。


谁能保持领先优势?谁能迎头赶上?谁又能突出重围成为黑马?


看雪·2023 KCTF 年度赛 | 热身题解析
第二题《CN星际基地》欢迎参赛


看雪·2023 KCTF 年度赛 | 热身题解析


看雪·2023 KCTF 年度赛 | 热身题解析

球分享

看雪·2023 KCTF 年度赛 | 热身题解析

球点赞

看雪·2023 KCTF 年度赛 | 热身题解析

球在看


看雪·2023 KCTF 年度赛 | 热身题解析

点击阅读原文进入比赛

原文始发于微信公众号(看雪学苑):看雪·2023 KCTF 年度赛 | 热身题解析

版权声明:admin 发表于 2023年9月4日 下午6:00。
转载请注明:看雪·2023 KCTF 年度赛 | 热身题解析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...