Challenge Overview
In this challenge, we are tasked with investigating a suspicious banned_books_report.csv
file from a digital library provider. The report contains data on various banned books, including their titles, authors, times borrowed, and average ratings. Our goal is to determine if the “Times Borrowed” numbers conceal a hidden message.
Steps to Solve
Inspecting the Data
The CSV file is structured as follows:
Title,Author,Times Borrowed,Avg Rating
To Kill a Mockingbird,Harper Lee,77,4.26
1984,George Orwell,101,4.2
...
Each row represents a book, and the “Times Borrowed” column appears to be the key focus for this challenge. On closer inspection, the values in this column range from 48 to 125, which fall within the ASCII printable character range (32 to 126). This suggests the numbers might correspond to ASCII characters.
Decoding the Hidden Message
To uncover the hidden message, we need to convert the “Times Borrowed” values to their respective ASCII characters. This can be achieved with a simple Python script:
import csv
# Initialize an empty list to store the decoded characters
decoded_message = []
# Open and read the CSV file
with open('banned_books_report.csv', mode='r') as file:
csv_reader = csv.DictReader(file)
for row in csv_reader:
# Convert the "Times Borrowed" value to an integer
times_borrowed = int(row['Times Borrowed'])
# Convert the integer to its corresponding ASCII character
decoded_char = chr(times_borrowed)
# Append the character to the message list
decoded_message.append(decoded_char)
# Join the list into a single string to reveal the hidden message
hidden_message = ''.join(decoded_message)
print(f'Hidden Message: {hidden_message}')
This can also be done with CyberChef. Simply paste the “Times Borrowed” column into CyberChef and use the “From Decimal” recipe with a line feed as the separator:
https://gchq.github.io/CyberChef/#recipe=From_Decimal(‘Line%20feed’,false)&input=NzcNCjEwMQ0KMTE2DQo5Nw0KNjcNCjg0DQo3MA0KMTIzDQo0OQ0KMTEwDQoxMDINCjQ4DQoxMTQNCjEwOQ0KNTINCjExNg0KMTA1DQo0OA0KMTEwDQo5NQ0KNDkNCjExNQ0KOTUNCjExMg0KNDgNCjExOQ0KNTENCjExNA0KMTI1DQo&ieol=CRLF&oeol=CRLF
Running the Script
Running this script against the provided CSV file decodes the “Times Borrowed” column into a meaningful string. The output reveals: Hidden Message: MetaCTF{1nf0rm4ti0n_1s_p0w3r}