XmasCTF 2021 - misc/Having a Blast

Write-up for XmasCTF 2021 BioInformatics Challenge Having a Blast

This made me realize that CTF is so cool and fun!

Description

While scavenging through files, we have found this DNA sequence that contains a few exons from what the file says, a “homo sapiens gene that encodes the [REDACTED] enzyme”. There is nothing more descriptive than that, huh. Can you find the enzyme encoded by this gene? We need this done by today. Thanks!

Attached DNA sequence: CGCTTCCTCCCCAAATTGCTCAGCGCCACCGGTATGCAGGGGCCAGCGGGCAGCGGCTGGGAGGAGGGGAGTGGGAGCCCGCCAGGTGTAACCCCTCTCTTCTCCCCCTAGCCTCGGAGGCTCCCAGCACCTGCCCAGGCTTCACCCATGGGGAGGCTGCTCGGAGGCCCGGCCTCCCCCTGCCCCTCCTCCTCCTCCACCAGCTTCTCCTCCTCTTCCTCTCCCACCTCCGGCGGCTGTGAACACGGCCTCTTCCCCTACGGCCACAGGGGCCCCTCCTCTAATGAGTGGTCGGACCGTGGGGAAGGGCCCCACTCAGGGATCTCAGACCTAGTGCTCCCTTCCTCCTCAAACCGAGAGACTCACACTGGACAGGGCAGGAGGAGGGGGCCGTGCCTCCCACCCTTCTCAGGGACCCCCACGCCTTTGTTGTTTGAATGGAAATGGAAAAGCCAGTATTCTTTTTATAAAATTATCTTTTTGGAACCTGAGCCTGACATTGGGGGGAAGTGGGAGGCCGGACGGGTAGCACCCC

(The flag format is X-MAS{enzymename})

By: Milkdrop


Solution

I have no idea about what / how DNA coding works at first but after researching on how DNA becomes enzymes I got an idea on how I might try and solve this challenge

image

source: https://en.wikipedia.org/wiki/DNA_and_RNA_codon_tables

The main steps are as follows:

  1. Group DNA sequences into 3 (converting to codon) . A codon is CGC, TTC, TTT, etc.
  2. Convert the codon to Amino Acid. Each codon has a corresponding Amino Acid code. for example TTT -> Corresponds to Phenylalanine or Phe
  3. Convert Amino Acid to Amino Acid code Phenylalanine -> F
  4. Combine and search for the Amino Acid sequence to determine the enzyme / protein
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# DNA sequence
code = "CGCTTCCTCCCCAAATTGCTCAGCGCCACCGGTATGCAGGGGCCAGCGGGCAGCGGCTGGGAGGAGGGGAGTGGGAGCCCGCCAGGTGTAACCCCTCTCTTCTCCCCCTAGCCTCGGAGGCTCCCAGCACCTGCCCAGGCTTCACCCATGGGGAGGCTGCTCGGAGGCCCGGCCTCCCCCTGCCCCTCCTCCTCCTCCACCAGCTTCTCCTCCTCTTCCTCTCCCACCTCCGGCGGCTGTGAACACGGCCTCTTCCCCTACGGCCACAGGGGCCCCTCCTCTAATGAGTGGTCGGACCGTGGGGAAGGGCCCCACTCAGGGATCTCAGACCTAGTGCTCCCTTCCTCCTCAAACCGAGAGACTCACACTGGACAGGGCAGGAGGAGGGGGCCGTGCCTCCCACCCTTCTCAGGGACCCCCACGCCTTTGTTGTTTGAATGGAAATGGAAAAGCCAGTATTCTTTTTATAAAATTATCTTTTTGGAACCTGAGCCTGACATTGGGGGGAAGTGGGAGGCCGGACGGGTAGCACCCC"
print("DNA Code: \n" + code)

# Convert DNA sequence to Amino Acid sequence
import json

def dna_to_amino_acid(dna):
    # codon to amino lookup (e.g. "TTT" = -> "Phe")
    f = open('codon_to_amino.json')
    # amino acid keywords to amino acid code lookup (e.g. "Phe" -> "F")
    j = open('amino_keywords.json')

    codon_to_amino = json.load(f)
    amino_keywords = json.load(j)
    keywords = []
    sep = 3

    for n in range(0, len(code) - 1, sep):
        # 1. split DNA to 3 characters to get codon
        codon = code[n:n+3]
        # 2. convert codon to amino acid
        amino_acid = codon_to_amino[codon[0]][codon[1]][codon[2]]

        # 3. convert amino acid to amino acid keyword
        if amino_acid != "stop":
            amino_keyword = amino_keywords[amino_acid]
        else:
            amino_keyword = "_"
        keywords.append(amino_keyword)

        # print(f"{codon} : {amino_acid} : {amino_keyword}")

    print("Amino Acid Sequence: \n" + "".join(keywords))

    f.close()
    j.close()

dna_to_amino_acid(code)

Output (amino acid sequence) RFLPKLLSATGMQGPAGSGWEEGSGSPPGVTPLFSP_PRRLPAPAQASPMGRLLGGPASPCPSSSSTSFSSSSSPTSGGCEHGLFPYGHRGPSSNEWSDRGEGPHSGISDLVLPSSSNRETHTGQGRRRGPCLPPFSGTPTPLLFEWKWKSQYSFYKIIFLEPEPDIGGKWEAGRVAP

the _ in the output represents a stop codon

Flag

I searched the entire output sequence on google and found nothing. I then entered the RFLPKLLSATGMQGPAGSGWEEGSGSPPGVTPLFSP sequence and got a google result.

image

After going around and reading on the page I tried the ff flags:

  • X-MAS{AChE}
  • X-MAS{ChAT}
  • X-MAS{Choline Acetyltransferase}

I then realized the title of the research is Acetylcholinesterase so I tried it, and it worked!

flag: X-MAS{Acetylcholinesterase}


References