Brainy's Cipher
Brainy's Cipher
Platform: HackTheBox | Category: Cryptography | Difficulty: Easy | Author: D3v0o0Nu11 | Date: 2026-02-10
Description
Brainy likes playing around with esoteric programming. He also likes math and has therefore encrypted his very secure password with a popular encryption algorithm. Claiming that his password cannot be retrieved now, he has sent the ciphertext to some of his friends. Can you prove to Brainy that his password can actually be recovered?
Solution Approach
Core idea: Identify the weakness from source review or fingerprinting first. Iterate with incremental payloads instead of guessing.
Steps
-
First, unzip the
.zipfile given. -
Well it's a brainfuck ciphertext. Let's decode it using this website.
-
Since there's
pqanddqit's aweird-rsa. -
To decrypt this RSA, i used this script:
py read-only • copy allowedimport os #from pwn import * import binascii os.system('clear') #context.log_level = 'debug' ### STEPS: ''' 1. Get the qInv value. 2. Calculate the message. 3. Convert the message we got from (int) to str. 4. Print out the message. ''' p = 7901324502264899236349230781143813838831920474669364339844939631481665770635584819958931021644265960578585153616742963330195946431321644921572803658406281 q =12802918451444044622583757703752066118180068668479378778928741088302355425977192996799623998720429594346778865275391307730988819243843851683079000293815051 dp = 5540655028622021934429306287937775291955623308965208384582009857376053583575510784169616065113641391169613969813652523507421157045377898542386933198269451 dq = 9066897320308834206952359399737747311983309062764178906269475847173966073567988170415839954996322314157438770225952491560052871464136163421892050057498651 c = 62078086677416686867183857957350338314446280912673392448065026850212685326551183962056495964579782325302082054393933682265772802750887293602432512967994805549965020916953644635965916607925335639027579187435180607475963322465417758959002385451863122106487834784688029167720175128082066670945625067803812970871 qInv = (1/q) % p calcMessage = pow(c, dq, q) plaintext = binascii.unhexlify(format(calcMessage,'x')).decode() print(plaintext)
OUTPUT
- Wrap the output with
HTB{}. - Got the flag!
Flag
REDACTED
Lessons Learned
- Identify the weakness from source review or fingerprinting first.
- Iterate with incremental payloads instead of guessing.
- Reuse the same pattern in future engagements.