The ART of IOT

Description

problem description

Solution

πŸ˜€ Introduction

We’ve been given a single file: The-ART-of-IOT.atkdl. The acronym β€œART” and the descriptionβ€”**Why So Serial?**β€”nudges us toward serial communication. But let's not jump to conclusions...yet.


πŸ” Inspecting the File

FIrst, let’s check the file header:

$ xxd The-ART-of-IOT.atkdl | head -1
00000000: 504b 0304 1400 0008 0800 8e9a b85a bf48  PK...........Z.H

The PK header (0x50 0x4B) reveals that this is a ZIP archive "in disguise".

Unpack the archive:

$ unzip The-ART-of-IOT.atkdl -d The-ART-of-IOT

Directory structure:

The-ART-of-IOT
β”œβ”€β”€ 0
β”‚   └── channel.ini
β”œβ”€β”€ 1
β”‚   β”œβ”€β”€ 0-0.bin
β”‚   β”œβ”€β”€ 0-1.bin
β”‚   └── channel.ini
β”œβ”€β”€ 2 … 15  each with channel.ini
β”œβ”€β”€ channel.ini
β”œβ”€β”€ set.ini
└── vernier.ini

🧐 Identifying the Format

Examining channel.ini at the root:

SessionName=DL16 Plus
SamplingFrequency=20000  ; samples per second
SamplingDepth=40000000   ; max samples
TriggerSamplingDepth=400000

And set.ini:

favoritesList=["SPI", null, "UART"]

πŸ€“ UART Refresher

UART (Universal Asynchronous Receiver/Transmitter) is a simple serial protocol:

|   1    |   0   | D0 | D1 | … | D7 | Parity? |   1   |
 Idle   Start                                    Stop 

We could spend (a lot of) time to decode the dump. But since the software for this Alientek DL16 Plus logic analyzer is available, why bother?

πŸ› οΈ Decoding with the Logic Analyzer Software

  1. Launch DL16 Plus software (or compatible).
  2. Open The-ART-of-IOT.atkdl directlyβ€”the software auto‑loads channel configs and sampling settings.
  3. Select the channel containing data.
  4. Enable UART decode (e.g., 115200β€―baud, 8‑N‑1).
  5. Filter or discard idle/noisy segments.

Here’s the decoded output in the UI:

Logic Analyzer Screenshot

Figure: UART decoding in ATK DL16 Plus.


🏁 Extracting the Flag

The decoded byte sequence:

41 70 70 53 65 63 2D 49 4C 7B 66 72 30 6D 5F 77
31 72 33 5F 74 6F 5F 66 6C 61 67 7D 0D 0A

Converting to ASCII give us the flag:

AppSec-IL{fr0m_w1r3_to_flag} πŸŽ‰


πŸŽ“ Key Takeaways