HTB Writeups
  • HTB Writeups
  • Boxes: Very Easy
    • Academy
    • Archetype
    • Arctic
    • Base
    • Bike
    • Blue
    • Explosion
    • Included
    • Markup
    • Oopsie
    • Redeemer
    • Responder
    • Shield
    • Unified
    • Vaccine
  • Boxes: Easy
    • Analytics
    • Armageddon
    • Bashed
    • Beep
    • Blocky
    • Bounty Hunter
    • Buff
    • Cap
    • CozyHosting
    • Devel
    • Explore
    • Forest
    • Grandpa
    • Granny
    • Horizontall
    • Jerry
    • Keeper
    • Knife
    • Lame
    • Late
    • Legacy
    • Mirai
    • Netmon
    • Nibbles
    • Optimum
    • Paper
    • Photobomb
    • Precious
    • RedPanda
    • Return
    • Sau
    • ScriptKiddie
    • Sense
    • Servmon
    • Shocker
    • Shoppy
    • Squashed
    • Trick
  • Boxes: Medium
    • Poison
  • Challenges
    • Behind the Scenes
    • Canvas
    • Debugging Interface
    • Digital Cube
    • Easy Phish
    • Find the Easy Pass
    • Forest
    • Infiltration
    • misDIRection
    • Pusheen Loves Graphs
    • Retro
    • Signals
    • The Secret of a Queen
    • Wrong Spooky Season
  • Fortresses
  • Cyber Apocalypse 2023: The Cursed Mission
    • The Cursed Mission
    • Alien Cradle
    • Critical Flight
    • Debug
    • Extraterrestrial Persistence
    • Getting Started
    • Needle in the Haystack
    • Orbital
    • Packet Cyclone
    • Passman
    • Perfect Sync
    • Persistence
    • Plaintext Tleasure
    • Questionnaire
    • Reconfiguration
    • Relic Maps
    • Roten
    • Secret Code
    • Shattered Tablet
    • Small StEps
  • Hack the Boo 2023
    • Hauntmart
    • Spellbrewery
    • Trick or Treat
    • Valhalloween
  • Cyber Apocalypse 2024: Hacker Royale
    • Hacker Royale
    • An Unusual Sighting
    • BoxCutter
    • BunnyPass
    • Character
    • Data Siege
    • Delulu
    • Dynastic
    • Fake Boost
    • Flag Command
    • Game Invitation
    • It has begun
    • KORP Terminal
    • Labyrinth Linguist
    • LockTalk
    • Lucky Faucet
    • Makeshift
    • Maze
    • Packed Away
    • Phreaky
    • Primary Knowledge
    • Pursue the Tracks
    • Rids
    • Russian Roulette
    • Stop Drop and Roll
    • Testimonial
    • TimeKORP
    • Unbreakable
    • Urgent
  • CYBER APOCALYPSE 2025: Tales from Eldoria
    • Tales from Eldoria
    • A New Hire
    • Cave Expedition
    • Echoes in Stone
    • Eldorion
    • Embassy
    • EncryptedScroll
    • HeliosDEX
    • Quack Quack
    • Silent Trap
    • Stealth Invasion
    • Tales for the Brave
    • The Ancient Citadel
    • The Hillside Haven
    • The Stone That Whispers
    • Thorins Amulet
    • ToolPie
    • Traces
    • Trial by Fire
    • Whispers of the Moonbeam
Powered by GitBook
On this page
  1. Cyber Apocalypse 2023: The Cursed Mission

Perfect Sync

Personal Rating: Medium

We have an encryptor and this output:

4989a62270de3505a78051c763702daa
06afcb1c8e857e1ee0713d97f722145c
02d1385a589b177f212cc4dff2c6798c
40f35ee3fb5ad3f732021c9e4e1e2ae4
084bacee3f3f95cfa1c8d93eddc3f20b
29f572e667ce0d62c5788e92466f89cf
66d34825c735ce151148bd36795c3c33
a14933d38c3a8cab5f27cd30dc6f6dac
48eb70fddf8babeaf0e1612d31c3cb43
04ffc24850814159d6001a25aa68062c
7a4f38512a27092666af9b3824e5a929
b3db7d62358e3a57d4c39cf6c287bf3a
fe65abbe44f3518d8aaad542ea650bd7
40987dea195b99f774ebb58976ef9f8c
6b26130a16af9900eb2d1568ee81e608
6c33f66c01e37d2e7f8ad1d8c41aea2a
64aa447ae57ebdfaf396b0f46db0c372
bfe99e33a07c671227c11fcacf1524b9
eaa395ff36cf9f31f3014070dabc6b96
dc46c3ba303c0bc0e329851acc4765d9
0882770ff6c5e69c9dff98676dec951b
c85bdb09772e764ddd8a2ca87d5c8eac
623558af8ae4ce9b537fdd469c614607
ff89009a61efccfcc526e54471910f00
98a533f58bac0a5bcfe61c638d1e70dc
ff98c26e52f8da9a0b22f6b47caf2b18

This is the encryptor:

from os import urandom
from Crypto.Cipher import AES
from secret import MESSAGE

assert all([x.isupper() or x in '{_} ' for x in MESSAGE])


class Cipher:

    def __init__(self):
        self.salt = urandom(15)
        key = urandom(16)
        self.cipher = AES.new(key, AES.MODE_ECB)

    def encrypt(self, message):
        return [self.cipher.encrypt(c.encode() + self.salt) for c in message]


def main():
    cipher = Cipher()
    encrypted = cipher.encrypt(MESSAGE)
    encrypted = "\n".join([c.hex() for c in encrypted])

    with open("output.txt", 'w+') as f:
        f.write(encrypted)


if __name__ == "__main__":
    main()

There is actual randomness involved, so I thought of statistical analysis. Luckily I found a great website for it and could decrypt the test text:

ABCDECFGHIJFJKHLMLIMLINJLCOIPFIQRCIAJGQIQRJQIMFIJFHISMTCFILQBCQGRIPAIUBMQQCFIKJFSEJSCIGCBQJMFIKCQQCBLIJFOIGPVNMFJQMPFLIPAIKCQQCBLIPGGEBIUMQRITJBHMFSIABCDECFGMCLIVPBCPTCBIQRCBCIMLIJIGRJBJGQCBMLQMGIOMLQBMNEQMPFIPAIKCQQCBLIQRJQIMLIBPESRKHIQRCILJVCIAPBIJKVPLQIJKKILJVWKCLIPAIQRJQIKJFSEJSCIMFIGBHWQJFJKHLMLIABCDECFGHIJFJKHLMLIJKLPIXFPUFIJLIGPEFQMFSIKCQQCBLIMLIQRCILQEOHIPAIQRCIABCDECFGHIPAIKCQQCBLIPBISBPEWLIPAIKCQQCBLIMFIJIGMWRCBQCYQIQRCIVCQRPOIMLIELCOIJLIJFIJMOIQPINBCJXMFSIGKJLLMGJKIGMWRCBLIABCDECFGHIJFJKHLMLIBCDEMBCLIPFKHIJINJLMGIEFOCBLQJFOMFSIPAIQRCILQJQMLQMGLIPAIQRCIWKJMFQCYQIKJFSEJSCIJFOILPVCIWBPNKCVILPKTMFSILXMKKLIJFOIMAIWCBAPBVCOINHIRJFOIQPKCBJFGCIAPBICYQCFLMTCIKCQQCBINPPXXCCWMFSIOEBMFSIUPBKOIUJBIMMINPQRIQRCINBMQMLRIJFOIQRCIJVCBMGJFLIBCGBEMQCOIGPOCNBCJXCBLINHIWKJGMFSIGBPLLUPBOIWEZZKCLIMFIVJ0PBIFCULWJWCBLIJFOIBEFFMFSIGPFQCLQLIAPBIURPIGPEKOILPKTCIQRCVIQRCIAJLQCLQILCTCBJKIPAIQRCIGMWRCBLIELCOINHIQRCIJYMLIWPUCBLIUCBCINBCJXJNKCIELMFSIABCDECFGHIJFJKHLMLIAPBICYJVWKCILPVCIPAIQRCIGPFLEKJBIGMWRCBLIELCOINHIQRCI0JWJFCLCIVCGRJFMGJKIVCQRPOLIPAIKCQQCBIGPEFQMFSIJFOILQJQMLQMGJKIJFJKHLMLISCFCBJKKHIRQN1J2LMVWKC2LENLQMQEQMPF2ML2UCJX3IGJBOIQHWCIVJGRMFCBHIUCBCIAMBLQIELCOIMFIUPBKOIUJBIMMIWPLLMNKHINHIQRCIELIJBVHLILMLIQPOJHIQRCIRJBOIUPBXIPAIKCQQCBIGPEFQMFSIJFOIJFJKHLMLIRJLINCCFIBCWKJGCOINHIGPVWEQCBILPAQUJBCIURMGRIGJFIGJBBHIPEQILEGRIJFJKHLMLIMFILCGPFOLIUMQRIVPOCBFIGPVWEQMFSIWPUCBIGKJLLMGJKIGMWRCBLIJBCIEFKMXCKHIQPIWBPTMOCIJFHIBCJKIWBPQCGQMPFIAPBIGPFAMOCFQMJKIOJQJIWEZZKCIWEZZKCIWEZZKC

FREQUENCYKANALYSISKISKBASEDKONKTHEKFACTKTHATKINKANYKGIVENKSTRETCHKOFKWRITTENKLANGUAGEKCERTAINKLETTERSKANDKCOMBINATIONSKOFKLETTERSKOCCURKWITHKVARYINGKFREQUENCIESKMOREOVERKTHEREKISKAKCHARACTERISTICKDISTRIBUTIONKOFKLETTERSKTHATKISKROUGHLYKTHEKSAMEKFORKALMOSTKALLKSAMPLESKOFKTHATKLANGUAGEKINKCRYPTANALYSISKFREQUENCYKANALYSISKALSOKJNOWNKASKCOUNTINGKLETTERSKISKTHEKSTUDYKOFKTHEKFREQUENCYKOFKLETTERSKORKGROUPSKOFKLETTERSKINKAKCIPHERTEXTKTHEKMETHODKISKUSEDKASKANKAIDKTOKBREAJINGKCLASSICALKCIPHERSKFREQUENCYKANALYSISKREQUIRESKONLYKAKBASICKUNDERSTANDINGKOFKTHEKSTATISTICSKOFKTHEKPLAINTEXTKLANGUAGEKANDKSOMEKPROBLEMKSOLVINGKSJILLSKANDKIFKPERFORMEDKBYKHANDKTOLERANCEKFORKEXTENSIVEKLETTERKBOOJJEEPINGKDURINGKWORLDKWARKIIKBOTHKTHEKBRITISHKANDKTHEKAMERICANSKRECRUITEDKCODEBREAJERSKBYKPLACINGKCROSSWORDKPUZZLESKINKMA0ORKNEWSPAPERSKANDKRUNNINGKCONTESTSKFORKWHOKCOULDKSOLVEKTHEMKTHEKFASTESTKSEVERALKOFKTHEKCIPHERSKUSEDKBYKTHEKAXISKPOWERSKWEREKBREAJABLEKUSINGKFREQUENCYKANALYSISKFORKEXAMPLEKSOMEKOFKTHEKCONSULARKCIPHERSKUSEDKBYKTHEK0APANESEKMECHANICALKMETHODSKOFKLETTERKCOUNTINGKANDKSTATISTICALKANALYSISKGENERALLYKHTB1A2SIMPLE2SUBSTITUTION2IS2WEAJ3KCARDKTYPEKMACHINERYKWEREKFIRSTKUSEDKINKWORLDKWARKIIKPOSSIBLYKBYKTHEKUSKARMYSKSISKTODAYKTHEKHARDKWORJKOFKLETTERKCOUNTINGKANDKANALYSISKHASKBEENKREPLACEDKBYKCOMPUTERKSOFTWAREKWHICHKCANKCARRYKOUTKSUCHKANALYSISKINKSECONDSKWITHKMODERNKCOMPUTINGKPOWERKCLASSICALKCIPHERSKAREKUNLIJELYKTOKPROVIDEKANYKREALKPROTECTIONKFORKCONFIDENTIALKDATAKPUZZLEKPUZZLEKPUZZLE

Frequency analysis is based on the fact that in any given stretch of written language certain letters and combinations of letters occur with varying frequencies. Moreover there is a characteristic distribution of letters that is roughly the same for almost all samples of that language. In cryptanalysis frequency analysis also known as counting letters is the study of the frequency of letters or groups of letters in a ciphertext. The method is used as an aid to breaking classical ciphers. Frequency analysis requires only a basic understanding of the statistics of the plaintext language and some problem solving skills and, if performed by hand, tolerance for extensive letter bookkeeping. During world war II both the British and the Americans recruited codebreakers by placing crossword puzzles in major newspapers and running contests for who could solve them the fastest. Several of the ciphers used by the axis powers were breakable using frequency analysis for example some of the consular ciphers used by the Japanese. Mechanical methods of letter counting and statistical analysis generally htb1a2simple2substitution2is2weaj3 card type machinery were first used in world war II possibly by the us armys sis. Today the hard work of letter counting and analysis has been replaced by computer software which can carry out such analysis in seconds. With modern computing power classical ciphers are unlikely to provide any real protection for confidential data puzzle puzzle puzzle

htb{a_simple_substitution_is_weak}
PreviousPassmanNextPersistence

Last updated 1 year ago

quipqiup - cryptoquip and cryptogram solver
Logo