Puzzles - Writeup by AI

Puzzles - Writeup by AI

题目信息

  • 来源: Bugku CTF
  • 类别: Crypto
  • 题目名称: puzzles
  • Flag格式: flag{0Part1-Part2-Part3-Part4-a1a2a3a4} (所有值以十六进制表示)

考点分析

本题是一个综合性数学谜题,包含5个独立的子问题:

问题类型知识点难度
Question 0线性代数多元一次方程组求解⭐⭐
Question 1数论质数序列识别⭐⭐
Question 2微积分极限与定积分计算⭐⭐⭐
Question 3物理法拉第电磁感应定律⭐⭐⭐
Question 4高等数学三重积分(柱坐标)⭐⭐⭐⭐

解题思路

Question 0: 线性方程组求解

题目:

13627·a₁ + 26183·a₂ + 35897·a₃ + 48119·a₄ = 347561292
23027·a₁ + 38459·a₂ + 40351·a₃ + 19961·a₄ = 361760202
36013·a₁ + 45589·a₂ + 17029·a₃ + 27823·a₄ = 397301762
43189·a₁ + 12269·a₂ + 21587·a₃ + 33721·a₄ = 350830412

解法:
使用z3-solver约束求解器直接求解四元一次方程组。

结果:

  • a₁ = 4006 = 0xFA6
  • a₂ = 3053 = 0xBED
  • a₃ = 2503 = 0x9C7
  • a₄ = 2560 = 0xA00

Question 1: Part1 - 质数序列

题目:
给出三个质数: 26364809, Part1, 26366033, 26366621

分析:
这些应该是连续的质数序列。需要在26364809和26366033之间寻找质数。

解法:
遍历该区间,找出所有质数,Part1应该是第二个质数(紧跟在26364809之后)。

结果:

  • Part1 = 26364823 = 0x1924B97

Question 2: Part2 - 微积分计算

题目:

Part2 = (4×lim(x→2) (x²-3x+2)/(x²-4) + 3×∫₀^{ln2} e^x(4+e^x)²dx + 2×∫₁^e (1+5ln x)/x dx + ∫₀^{π/2} xsinxdx) × 77

逐步计算:

  1. 极限项:

    lim(x→2) (x²-3x+2)/(x²-4)
    = lim(x→2) [(x-1)(x-2)]/[(x-2)(x+2)]
    = lim(x→2) (x-1)/(x+2)
    = 1/4
    
  2. 第一个积分:

    ∫₀^{ln2} e^x(4+e^x)²dx
    令 u = 4+e^x, du = e^x dx
    当 x=0, u=5; 当 x=ln2, u=6
    = ∫₅⁶ u²du = [u³/3]₅⁶ = (216-125)/3 = 91/3
    
  3. 第二个积分:

    ∫₁^e (1+5ln x)/x dx
    令 u = ln x, du = dx/x
    当 x=1, u=0; 当 x=e, u=1
    = ∫₀¹ (1+5u)du = [u + 5u²/2]₀¹ = 1 + 5/2 = 7/2
    
  4. 第三个积分(分部积分):

    ∫₀^{π/2} xsinxdx
    = [-xcosx]₀^{π/2} + ∫₀^{π/2} cosxdx
    = 0 + [sinx]₀^{π/2}
    = 1
    
  5. 最终计算:

    Part2 = (4×1/4 + 3×91/3 + 2×7/2 + 1) × 77
          = (1 + 91 + 7 + 1) × 77
          = 100 × 77
          = 7700
    

结果:

  • Part2 = 7700 = 0x1E14

Question 3: Part3 - 电磁感应

题目:
在 B=4T 的均匀磁场中,半径 r=2m 的圆形回路以 dr/dt=5m/s 收缩,求感应电动势。

已知: ε = (Part3 × π) / 233 V

物理原理:
法拉第电磁感应定律: ε = |dΦ/dt| = B × |dA/dt|

其中磁通量 Φ = B·A,面积 A = πr²

计算过程:

dA/dt = d(πr²)/dt = 2πr·(dr/dt)
ε = B × 2πr × (dr/dt)
  = 4 × 2π × 2 × 5
  = 80π

由题意: ε = (Part3 × π) / 233
所以: Part3 = ε × 233 / π = 80π × 233 / π = 80 × 233 = 18640

结果:

  • Part3 = 18640 = 0x48D0

Question 4: Part4 - 三重积分

题目:
Ω是曲线 {y²=2z, x=0} 绕z轴旋转形成的曲面与平面 z=2, z=8 围成的立体。

已知: (Part4 × π) / 120 = ∭_Ω (x²+y²)dxdydz

分析:

  • y²=2z 绕z轴旋转形成旋转抛物面: r²=2z (柱坐标)
  • 积分区域: 2 ≤ z ≤ 8, 0 ≤ r ≤ √(2z), 0 ≤ θ ≤ 2π

计算过程(柱坐标变换):

x = rcosθ, y = rsinθ, x²+y² = r²
dV = r·dr·dθ·dz

∭_Ω (x²+y²)dV = ∫₂⁸ ∫₀^{2π} ∫₀^{√(2z)} r² · r dr dθ dz
              = ∫₂⁸ ∫₀^{2π} ∫₀^{√(2z)} r³ dr dθ dz

先对r积分:
∫₀^{√(2z)} r³dr = [r⁴/4]₀^{√(2z)} = (2z)²/4 = z²

再对θ积分:
∫₀^{2π} z² dθ = 2πz²

最后对z积分:
∫₂⁸ 2πz²dz = 2π[z³/3]₂⁸ = 2π(512/3 - 8/3) = 2π(504/3) = 336π

由题意: (Part4 × π) / 120 = 336π
所以: Part4 = 336π × 120 / π = 336 × 120 = 40320

结果:

  • Part4 = 40320 = 0x9D80

完整代码

from z3 import *
import sympy as sp
from sympy import *

# Question 0: 解线性方程组
a1 = Int('a1')
a2 = Int('a2')
a3 = Int('a3')
a4 = Int('a4')

s = Solver()
s.add(13627*a1 + 26183*a2 + 35897*a3 + 48119*a4 == 347561292)
s.add(23027*a1 + 38459*a2 + 40351*a3 + 19961*a4 == 361760202)
s.add(36013*a1 + 45589*a2 + 17029*a3 + 27823*a4 == 397301762)
s.add(43189*a1 + 12269*a2 + 21587*a3 + 33721*a4 == 350830412)

if s.check() == sat:
    model = s.model()
    a1_val = model[a1].as_long()
    a2_val = model[a2].as_long()
    a3_val = model[a3].as_long()
    a4_val = model[a4].as_long()

# Question 1: Part1 - 质数
def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

part1_candidates = []
for i in range(26364809, 26366034):
    if is_prime(i):
        part1_candidates.append(i)

part1 = part1_candidates[1]  # 第二个质数

# Question 2: Part2 - 微积分
x = symbols('x')
limit_term = limit((x**2 - 3*x + 2)/(x**2 - 4), x, 2)
integral1 = integrate(exp(x)*(4+exp(x))**2, (x, 0, log(2)))
integral2 = integrate((1+5*log(x))/x, (x, 1, E))
integral3 = integrate(x*sin(x), (x, 0, pi/2))

part2_expr = (4*limit_term + 3*integral1 + 2*integral2 + integral3) * 77
part2_int = int(round(float(part2_expr.evalf())))

# Question 3: Part3 - 电磁感应
B = 4
r = 2
dr_dt = 5
epsilon = B * 2 * pi * r * dr_dt
part3_int = int(round(float((epsilon * 233 / pi).evalf())))

# Question 4: Part4 - 三重积分
r_sym, theta, z = symbols('r theta z', real=True, positive=True)
integrand = r_sym**3
inner = integrate(integrand, (r_sym, 0, sqrt(2*z)))
middle = integrate(inner, (theta, 0, 2*pi))
outer = integrate(middle, (z, 2, 8))
part4_int = int(round(float((outer * 120 / pi).evalf())))

# 生成Flag
flag = f"flag{{0{part1:X}-{part2_int:X}-{part3_int:X}-{part4_int:X}-{a1_val:X}{a2_val:X}{a3_val:X}{a4_val:X}}}"
print(flag)

运行结果

Question 0:
a1 = 4006 = 0xFA6
a2 = 3053 = 0xBED
a3 = 2503 = 0x9C7
a4 = 2560 = 0xA00

Question 1:
Part1 = 26364823 = 0x1924B97

Question 2:
Part2 = 7700 = 0x1E14

Question 3:
Part3 = 18640 = 0x48D0

Question 4:
Part4 = 40320 = 0x9D80

Flag: flag{01924B97-1E14-48D0-9D80-FA6BED9C7A00}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值