[CTF GEMA] R_S
CTF GEMA Groupe 2025
Niveau de Difficulté : Medium
Catégorie du Challenge : Crypto
Description :
THINKKKKKKKKKING!
Steps to Solve
Challenge Concept:
Le défi consiste à casser un chiffrage RSA. Deux grands nombres premiers sont utilisés pour calculer les valeurs nécessaires au cryptage. L'objectif est de retrouver le message original qui commence par « FLAG » en utilisant les valeurs disponibles telles que n et e.
Solution Approach:
L'approche utilisée ici est celle de la force brute. Le texte chiffré (ct) est progressivement modifié en ajoutant la valeur de n à chaque itération. Après chaque modification, la valeur résultante est convertie en octets et vérifiée pour voir si elle commence par le mot « FLAG ». Ce processus se répète jusqu'à ce que le texte clair correct soit trouvé.
solve code:
from libnum import *
n = 451826987787980345133866175149546057700320273440723200435507076558061710097084374771074176645003825126571022515040741151571456276267705241434902219336445545153709137604238866174558692235785244590723759892886290361185045218523294367404616942822249610480978796613891106418023483032216078620361771417221382316268124766266566064511665926882146314227336097860061193546504136047432053693275883974323584384177242980657902670880524669942651277438388257492219060918054305126566333727917660492572236173832530151561051530893173452717377956003069813155380771509675174579442855136752169895367211406522922477428991615990969356063980356109689804449921772638923903708983442118691123338513917685315700979618173177710223001695226604524351682915004002553739067204022128736917635577229863751122162893830615354992752673279947581961950148195633368642619369766036643372163357412663354638834030655302731996388804376160748060234820782097887198647157243942651867056350310485834574094100811818062760834693534798131486243987054833881282844974527866312759386862609444009675302593264912963435173413516670854808057602710906979929869062454488503751947697048922350917654750347866935953245394925388368059142921017743119667124576066304864506736055184082887787064972491
e = 16506551322586498646536532165312
ct = 3622400275476179965308915613748652350916500720919023604979837603607255833312411944877278279247726260117792810539559314139069463657386774853766209467414258176443574118994221783936
for i in range(e):
pt = ct // e
pts = n2s(pt)
if pts.startswith(b'FLAG'):
print(pts)
break
ct += n
Output:
$ python solve.py
b"FLAG{good_joob_did_you_notice_that_it's_a_very_small_right?}\n"
Flag
FLAG{good_joob_did_you_notice_that_it's_a_very_small_right?}