← Back to Writeups
CUSTOMEasyCrypto

ДНК

XESXOR9/10/20262 min read
#crypto#custom#easy#dna_codon_decoding

ДНК

Platform: HackerLab | Category: Crypto | Type: Challenge | Difficulty: Easy | OS: NA | Author: XESXOR | Date: 2025-12-25 | Status: Solved Techniques: dna_codon_decoding

Summary

ДНК — HackerLab

Description

Вы в школе изучали биологию? Что ж, тогда всё просто. И не забудьте, что формат флага: CODEBY{FLAG}.

Analysis

The file dna.txt contains the sequence: TGGCACOTCAGAGGACAATGCAATATCAACCCATATTTCT. It resembles a DNA nucleotide sequence (A, C, G, T), but with the letter O interspersed.

In biology, nucleotide triplets (codons) encode amino acids, which have single-letter designations.

Solution

We split the sequence into triplets, noting that the letter O is used literally: ‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

  1. TGG -> W (Tryptophan)
  2. CAC -> H (Histidine)
  3. O -> O (Literal)
  4. TCA -> S (Serine)
  5. GAG -> E (Glutamic acid)
  6. GAC -> D (Aspartic acid)
  7. AAT -> N (Asparagine)
  8. GCA -> A (Alanine)
  9. ATA -> I (Isoleucine)
  10. TCA -> S (Serine)
  11. ACC -> T (Threonine)
  12. CAT -> H (Histidine)
  13. ATT -> I (Isoleucine)
  14. TCT -> S (Serine)

Result string: REDACTED.

Decoding Script

python
dna_table = {
    'ATA': 'I', 'ATC': 'I', 'ATT': 'I', 'ATG': 'M',
    'ACA': 'T', 'ACC': 'T', 'ACG': 'T', 'ACT': 'T',
    'AAC': 'N', 'AAT': 'N', 'AAA': 'K', 'AAG': 'K',
    'AGC': 'S', 'AGT': 'S', 'AGA': 'R', 'AGG': 'R',
    'CTA': 'L', 'CTC': 'L', 'CTG': 'L', 'CTT': 'L',
    'CCA': 'P', 'CCC': 'P', 'CCG': 'P', 'CCT': 'P',
    'CAC': 'H', 'CAT': 'H', 'CAA': 'Q', 'CAG': 'Q',
    'CGA': 'R', 'CGC': 'R', 'CGG': 'R', 'CGT': 'R',
    'GTA': 'V', 'GTC': 'V', 'GTG': 'V', 'GTT': 'V',
    'GCA': 'A', 'GCC': 'A', 'GCG': 'A', 'GCT': 'A',
    'GAC': 'D', 'GAT': 'D', 'GAA': 'E', 'GAG': 'E',
    'GGA': 'G', 'GGC': 'G', 'GGG': 'G', 'GGT': 'G',
    'TCA': 'S', 'TCC': 'S', 'TCG': 'S', 'TCT': 'S',
    'TTC': 'F', 'TTT': 'F', 'TTA': 'L', 'TTG': 'L',
    'TAC': 'Y', 'TAT': 'Y', 'TAA': '_', 'TAG': '_',
    'TGC': 'C', 'TGT': 'C', 'TGA': '_', 'TGG': 'W',
}
‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍

seq = "TGGCACOTCAGAGGACAATGCAATATCAACCCATATTTCT"
res = ""
i = 0
while i < len(seq):
    if seq[i] == 'O':
        res += 'O'
        i += 1
    else:
        codon = seq[i:i+3]
        res += dna_table.get(codon, '?')
        i += 3

print(res)

‍​‌‌​​‌​​​‌‌​​‌​​​​‌‌​‌​​​​‌‌‌​​‌​​‌‌​​​‌​​‌‌‌​​​​​‌‌​‌‌​​​‌‌​​​​‍