# Observe The Wired -- Solution

## Overview
CoAP node with observable stream. Recover fragments, decode the firmware blob, then POST the maintenance key.

## Steps

1. Discover resources
```bash
coap-client -m get coap://HOST/.well-known/core
```

2. Get fragments A and B
```bash
coap-client -m get coap://HOST/status
coap-client -m get coap://HOST/telemetry/heart
```

3. Observe the stream for fragment C
```bash
coap-client -m get -s 30 -o coap://HOST/wired/stream
```
Capture the JSON notification that includes `fragment_c`.

4. Build XOR key
Concatenate fragments in order A + B + C:
```
WIRED + LAIN + 23 = WIREDLAIN23
```

5. Download firmware blob
```bash
coap-client -m get coap://HOST/archive/firmware
```
Save the base64 data between `FIRMWARE_B64_BEGIN` and `FIRMWARE_B64_END` into `firmware.b64`.

6. Decode the blob
```bash
python3 decode.py firmware.b64
```
The JSON includes `maintenance_key`.

7. Unlock and get the flag
```bash
coap-client -m post -e '0BS3RV3-L41N-23' coap://HOST/maintenance/unlock
```

## Flag
`ESPILON{c0ap_0bs3rv3_th3_w1r3d}`

## Author
Eun0us
