import random import os evilDice = random.Random(...

Criado em: 11 de outubro de 2025

Respondido usando GPT-5 Thinking por Chat01

Pergunta

import random
import os

evilDice = random.Random(os.urandom(16))

money = 1000

flag1 = os.getenv("FLAG1", "H3CTF{this_is_a_fake_flag_for_testing_purposes}")
flag2 = os.getenv("FLAG2", "H3CTF{this_is_a_fake_flag_for_testing_purposes}")

def roll_dice(RNG: random.Random, sides: int):
rbits = bin(RNG.getrandbits(64))[2:].zfill(64)
assert sides <= 2048 and sides >= 2
sbits = (sides - 1).bit_length()
total = 64 // sbits
results = [int(rbits[i * sbits : (i + 1) * sbits], 2) for i in range(total)]
results = [result % sides + 1 for result in results]
return results

def pre(dice, sides):
global money
print("玩点小的?:")
for _ in range(300):
guess = input("Who will win? (1 or 2) >").strip()
if guess not in ["1", "2"]:
print("Invalid input, please enter 1 or 2.")
continue

text
evil_results, my_results = roll_dice(evilDice, sides), roll_dice(dice, sides) evil_sum, my_sum = sum(evil_results), sum(my_results) print(f"{evil_results = }") if (evil_sum > my_sum and guess == "1") or (evil_sum < my_sum and guess == "2"): print("You win!") money += 2000 else: print("You lose!") money -= 500 money = max(money, 0) pass

def task() -> int:
global money
sides = input("选取你的骰子>")
sides = int(sides)
if (sides != 128 and sides != 64):
print("你没资格啊,正因为你没资格")
exit(0)
while True:
guess = input("猜猜这次投出来的总和是多少(输入 q 退出) >").strip()
if guess.lower() == "q":
print("欢迎再来")
break
if not guess.isdigit():
print("请输入一个正整数或 q 退出")
continue

text
guess = int(guess) results = roll_dice(evilDice, sides) total_sum = sum(results) print(f"{results = }") print(f"总和 = {total_sum}") if guess == total_sum: print("猜中了!") money *= 2 else: print("猜错了!") money //= 2 print(f"当前 money = {money}") if money <= 2: print("没钱还想赌博😈") exit(0) return sides

if name == "main":

text
print("欢迎来到似灵屋大赌场!") seed, sides = input("选取你的骰子>").split() sides = int(sides) myDice = random.Random(seed) pre(myDice, sides) print(f"{money = }") _ = input("要不要再玩点大的?:") if _ == "y": sides = task() else: pass if money > 600000 and sides == 128: print("土块!") print(flag1) if money > 600000 and sides == 64: print("土神!") print(flag1) print(flag2) 这是一个ctf密码学题目,给我远程利用拿到flag的脚本

Compartilhar esta Q&A