1 min read

[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?}