Mission PinPossible
Mission PinPossible is a sanitized challenge note from the local HTB archive, organized for quick review by category, difficulty, evidence flow, and reusable operator
Scenario
Mission PinPossible attack path
Mission PinPossible is a sanitized challenge note from the local HTB archive, organized for quick review by category, difficulty, evidence flow, and reusable operator
Objective
Challenge walkthrough focused on Hardware evidence, validation, and reusable operator lessons.
Walkthrough flow
Extract the challenge archive and identify the...
Use the image to identify a PCF8574T LCD backpack,...
Export the legacy Saleae Logic 1 .logicdata through...
Decode Channel 1 as SCL and Channel 0 as SDA.
Validate ACKed PCF8574 writes at shifted address 0x4e.
Source coverage
High source coverage
Status: complete. This article is generated from 6 sanitized Markdown sources and keeps raw flags, credentials, keys, cookies, and reusable secrets out of the rendered blog.
High confidence: the page is reconstructed from a primary walkthrough plus multiple supporting notes or evidence sources. Treat the chain as source-backed, while still checking the listed source files for sensitive values.
- Hardware/Mission-PinPossible/writeup.md
- htb-challenge/Hardware/Mission-PinPossible/notes.md
- htb-challenge/Hardware/Mission-PinPossible/memory-summary.md
- htb-challenge/Hardware/Mission-PinPossible/hypothesis-board.md
- HTB/_knowledge/exports/ctf-lightrag-latest-203412/documents/challenge__Hardware__Mission-PinPossible__memory-summary.md.fca15a7a55.md
- HTB/_knowledge/exports/ctf-lightrag-latest-203412/documents/challenge__Hardware__Mission-PinPossible__notes.md.8cf3382623.md
Technical Walkthrough
Writeup
Challenge
- Name: Mission-PinPossible
- Category: Hardware
- Difficulty: Easy
- Mode: file
Summary
Mission PinPossible is a logic-analyzer decode challenge. The image identifies the target as a keypad display wired through a PCF8574T LCD backpack, and the capture contains a two-channel Saleae Logic 1 .logicdata file. The solve path is to export the old capture, decode I2C, reconstruct the HD44780 LCD writes, and recover the password from the display leakage.
Artifact Inventory
Relevant artifacts:
files/a12c7342-4fc9-417a-813b-b166096de696.zip: original HTB archive.analysis/extracted/op_pinpossible.logicdata: old Saleae Logic 1 capture.analysis/extracted/security_keypad.jpeg: reference photo showing the LCD and PCF8574T backpack.analysis/extracted/logic1-export/old-separate.csv: Logic 1 CSV export used by the solver.analysis/decoded-lcd-redacted.txt: decoded LCD text with raw flag material omitted.
Analysis
The .logicdata format is a legacy Saleae Logic 1 save file. The useful path was not to reverse the private capture store by hand, but to export it through Logic 1.2.18 using the socket API. The resulting CSV contains rows per logic change with two digital channels.
The channel mapping is validated by protocol behavior:
- Channel 1 as SCL and Channel 0 as SDA produces clean I2C transactions.
- Every decoded transaction targets shifted I2C address
0x4e, consistent with a PCF8574 LCD backpack at unshifted address0x27. - The second byte of each transaction is ACKed and follows the expected LCD backpack pattern: data nibble in bits 4-7,
Eon bit 2, backlight on bit 3, andRSon bit 0.
The LCD data is recovered on the falling edge of E. Pairing successive high/low nibbles with matching RS reconstructs HD44780 writes. The data stream repeatedly prints Enter Password, then displays the password as progressively masked text: first one visible character, then one more visible character while earlier characters become *.
The solver reconstructs the flag by taking the non-* leaked character from each repeated password display state. The final decoded stream also shows an access-granted message, confirming the recovered password was accepted.
Solve
Run:
python3 Hardware/Mission-PinPossible/solve/solve.py \
--flag-out Hardware/Mission-PinPossible/loot/flag-candidate.txt \
--redacted-transcript-out Hardware/Mission-PinPossible/analysis/decoded-lcd-redacted.txtThen capture with the harness:
python3 scripts/challenge_harness.py capture-flag Hardware/Mission-PinPossible --from loot/flag-candidate.txtThe solver expects the Logic 1 CSV export at analysis/extracted/logic1-export/old-separate.csv. That export was produced from the original .logicdata file with Saleae Logic 1.2.18's socket API.
Flag
Raw flag is stored in loot/flag.txt and intentionally not reproduced here.
Lessons
- The photo matters: the visible PCF8574T backpack narrows the problem to I2C LCD traffic immediately.
- Old Saleae
.logicdatafiles are not directly supported by Sigrok; exporting through Logic 1.2.18 is the pragmatic route. - For HD44780-over-PCF8574 captures, look for
Efalling edges and combine nibbles rather than trying to treat PCF8574 writes as text bytes. - Keypad/display leakage can reveal a full password even when the UI masks prior characters.
Source-Backed Dossier
The sections below are merged from companion Markdown notes for the same case. They are rendered after sanitization so the article stays precise without publishing raw flags, credentials, or target-specific secrets.
Notes
Scope
- Challenge: Mission-PinPossible
- Category: Hardware
- Difficulty: Easy
- Mode: file
- Remote instance: none
- Start time: 2026-06-10T11:34:55Z
- Operator: harness
- State file:
challenge-state.json
Harness Status
- Current phase: see
challenge-state.json - Next allowed actions: see
next-action.json - Raw flags and sensitive material stay in
loot/only. Do not paste them here.
Artifact Inventory
| File | Size | SHA256 | Type | Notes |
|---|---|---|---|---|
files/a12c7342-4fc9-417a-813b-b166096de696.zip | 2120156 | <hash redacted> | Zip archive data, at least v2.0 to extract, compression method=deflate | zip entries: 2 shown in artifact inventory JSON |
Evidence Ledger
| Time | Action | Output/File | Finding | Confidence | Next |
|---|---|---|---|---|---|
| 2026-06-10T11:34:55Z | harness init | challenge-state.json | Workspace initialized with deterministic state file | High | Inventory artifacts |
| 2026-06-10T11:35:08Z | artifact inventory | analysis/artifact-inventory.json | 1 artifact(s) inventoried | High | Build or update hypotheses |
| 2026-06-10T11:41:19Z | hypothesis recorded | hypothesis-board.md | Decode the Saleae Logic 1 capture as two-channel I2C traffic from a PCF8574-backed HD44780 LCD, then reconstruct the displayed keypad text/password. | High | Parse channel transition records from op_pinpossible.logicdata, try both SCL/SDA assignments, decode I2C bytes, then look for HD44780 writes matching the visible 'Enter Password' prompt. |
| 2026-06-10T11:41:19Z | research skip | analysis/research/research-skip.md | Research intentionally skipped with recorded reason | Medium | Gate before exploit |
| 2026-06-10T12:11:04Z | flag capture | loot/flag.txt | HTB-format flag captured; raw value kept in loot only | High | Write solution and run completion gate |
| 2026-06-10T12:12:08Z | completion gate | challenge-state.json | Completion gate passed; state marked COMPLETE | High | Optional sanitized memory summary approval |
Key Findings
- The ZIP extracts to
op_pinpossible.logicdataandsecurity_keypad.jpeg. - The JPEG shows a 16x2 LCD/keypad monitor with a PCF8574T I2C backpack, making a two-channel I2C LCD decode the strongest path.
- The old Saleae Logic 1
.logicdatafile was exported through Logic 1.2.18's socket API toanalysis/extracted/logic1-export/old-separate.csv. - Exported channel mapping is validated as Channel 0 = SDA and Channel 1 = SCL.
- Direct I2C decode shows ACKed PCF8574 writes to shifted address
0x4e. - HD44780 decode with common PCF8574 backpack mapping recovers repeated
Enter Passworddisplay states. - The keypad UI leaks one new visible character per refresh while masking prior characters with
*;solve/solve.pyreconstructs the HTB flag from those incremental states. - Raw flag material is stored only in
loot/flag.txtandloot/flag-candidate.txt.
RAG / Advisory Memory
RAG output is advisory only. Record evaluated retrievals with:
scripts/challenge_harness.py rag-record <workspace> --query "..." --tag MATCHED|PARTIAL|MISSING|<secret redacted>|GENERIC --validation "..."Secrets/Flags
Raw flags and sensitive material stay in loot/ only. Use scripts/challenge_harness.py capture-flag to validate and record flag capture without printing the value.
Memory Summary
Metadata
- Platform: HackTheBox Challenges
- Category: Hardware
- Challenge: Mission-PinPossible
- Difficulty: Easy
- Source workspace:
<local workspace>
Validated Solve Chain
Concepts only. Do not include raw flags, reusable credentials, tokens, cookies, private keys, or live secrets.
- Extract the challenge archive and identify the provided
.logicdatacapture plus keypad/LCD reference image. - Use the image to identify a PCF8574T LCD backpack, implying I2C traffic to an HD44780-compatible LCD.
- Export the legacy Saleae Logic 1
.logicdatathrough Logic 1.2.18's socket API into separate-channel CSV. - Decode Channel 1 as SCL and Channel 0 as SDA.
- Validate ACKed PCF8574 writes at shifted address
0x4e. - Decode LCD writes from PCF8574 bytes using the common mapping P0=RS, P1=RW, P2=E, P3=backlight, P4-P7=data nibble.
- Reconstruct the password/flag from repeated
Enter Passworddisplay states where one new character remains visible while prior characters are masked.
Reusable Lessons
- Hardware challenge photos often contain protocol-critical clues such as adapter chips and bus labels.
- For HD44780 LCD backpacks, the PCF8574 byte stream is control/nibble data, not ASCII.
- Progressive masking UIs can leak complete secrets across multiple display refreshes.
Dead Ends
- Treating the
.logicdatafooter/index records as complete raw transition data produced noisy I2C-like output and was not reliable. - Sigrok could decode exported VCD/CSV-style data, but it does not import the old Saleae
.logicdatafile directly.
Tool Quirks
- Saleae Logic 1.2.18 supports the legacy
.logicdataformat and has a-socketlaunch option for automation. - The Python
saleaepackage's newer<secret redacted>path did not create output for this capture, while deprecated<secret redacted>produced the needed CSV and VCD. sigrok-cliwas installed during the solve and is now available for future logic-capture work.
Evidence Paths
analysis/extracted/security_keypad.jpeganalysis/extracted/op_pinpossible.logicdataanalysis/extracted/logic1-export/old-separate.csvanalysis/decoded-lcd-redacted.txtsolve/solve.pyloot/flag.txt
Ingestion Decision
- Proposed for LightRAG: yes
- Requires user approval before ingestion: yes
Hypothesis Board
Keep no more than 3 active hypotheses on Easy/Medium and 5 on Hard unless the user explicitly asks for breadth.
| Rank | Path | Evidence | Missing Proof | Cheapest Validation | Confidence | Status |
|---|---|---|---|---|---|---|
| 1 | Decode the Saleae Logic 1 capture as two-channel I2C traffic from a PCF8574-backed HD44780 LCD, then reconstruct the displayed keypad text/password. | The JPEG shows a 16x2 LCD/keypad monitor with a PCF8574T backpack and two captured digital channels; scenario says the implanted device intercepted monitor wiring while a password was partially displayed. | Need recover channel transition timing from old .logicdata format and validate an I2C stream with a plausible PCF8574 address and LCD text. | Parse channel transition records from op_pinpossible.logicdata, try both SCL/SDA assignments, decode I2C bytes, then look for HD44780 writes matching the visible 'Enter Password' prompt. | High | Active |
Closed Branches
| Branch | Evidence Tested | Failure Output | Reason Closed | Revisit Condition |
|---|
Memory Summary
approval_required: true
Sanitized Memory Summary
Metadata
- Platform: HackTheBox Challenges
- Category: Hardware
- Challenge: Mission-PinPossible
- Difficulty: Easy
- Source workspace:
<local workspace>
Validated Solve Chain
Concepts only. Do not include raw flags, reusable credentials, tokens, cookies, private keys, or live secrets.
- Extract the challenge archive and identify the provided
.logicdatacapture plus keypad/LCD reference image. - Use the image to identify a PCF8574T LCD backpack, implying I2C traffic to an HD44780-compatible LCD.
- Export the legacy Saleae Logic 1
.logicdatathrough Logic 1.2.18's socket API into separate-channel CSV. - Decode Channel 1 as SCL and Channel 0 as SDA.
- Validate ACKed PCF8574 writes at shifted address
0x4e. - Decode LCD writes from PCF8574 bytes using the common mapping P0=RS, P1=RW, P2=E, P3=backlight, P4-P7=data nibble.
- Reconstruct the password/flag from repeated
Enter Passworddisplay states where one new character remains visible while prior characters are masked.
Reusable Lessons
- Hardware challenge photos often contain protocol-critical clues such as adapter chips and bus labels.
- For HD44780 LCD backpacks, the PCF8574 byte stream is control/nibble data, not ASCII.
- Progressive masking UIs can leak complete secrets across multiple display refreshes.
Dead Ends
- Treating the
.logicdatafooter/index records as complete raw transition data produced noisy I2C-like output and was not reliable. - Sigrok could decode exported VCD/CSV-style data, but it does not import the old Saleae
.logicdatafile directly.
Tool Quirks
- Saleae Logic 1.2.18 supports the legacy
.logicdataformat and has a-socketlaunch option for automation. - The Python
saleaepackage's newer<secret redacted>path did not create output for this capture, while deprecated<secret redacted>produced the needed CSV and VCD. sigrok-cliwas installed during the solve and is now available for future logic-capture work.
Evidence Paths
analysis/extracted/security_keypad.jpeganalysis/extracted/op_pinpossible.logicdataanalysis/extracted/logic1-export/old-separate.csvanalysis/decoded-lcd-redacted.txtsolve/solve.pyloot/flag.txt
Ingestion Decision
- Proposed for LightRAG: yes
- Requires user approval before ingestion: yes
Notes
Notes
Scope
- Challenge: Mission-PinPossible
- Category: Hardware
- Difficulty: Easy
- Mode: file
- Remote instance: none
- Start time: 2026-06-10T11:34:55Z
- Operator: harness
- State file:
challenge-state.json
Harness Status
- Current phase: see
challenge-state.json - Next allowed actions: see
next-action.json - Raw flags and sensitive material stay in
loot/only. Do not paste them here.
Artifact Inventory
| File | Size | SHA256 | Type | Notes |
|---|---|---|---|---|
files/a12c7342-4fc9-417a-813b-b166096de696.zip | 2120156 | <hash redacted> | Zip archive data, at least v2.0 to extract, compression method=deflate | zip entries: 2 shown in artifact inventory JSON |
Evidence Ledger
| Time | Action | Output/File | Finding | Confidence | Next |
|---|---|---|---|---|---|
| 2026-06-10T11:34:55Z | harness init | challenge-state.json | Workspace initialized with deterministic state file | High | Inventory artifacts |
| 2026-06-10T11:35:08Z | artifact inventory | analysis/artifact-inventory.json | 1 artifact(s) inventoried | High | Build or update hypotheses |
| 2026-06-10T11: <REDACTED>, then reconstruct the displayed keypad text/password. | High | Parse channel transition records from op_pinpossible.logicdata, try both SCL/SDA assignments, decode I2C bytes, then look for HD44780 writes matching the visible 'Enter Password' prompt. | |||
| 2026-06-10T11:41:19Z | research skip | analysis/research/research-skip.md | Research intentionally skipped with recorded reason | Medium | Gate before exploit |
| 2026-06-10T12: <REDACTED> | |||||
| 2026-06-10T12:12:08Z | completion gate | challenge-state.json | Completion gate passed; state marked COMPLETE | High | Optional sanitized memory summary approval |
Key Findings
- The ZIP extracts to
op_pinpossible.logicdataandsecurity_keypad.jpeg. - The JPEG shows a 16x2 LCD/keypad monitor with a PCF8574T I2C backpack, making a two-channel I2C LCD decode the strongest path.
- The old Saleae Logic 1
.logicdatafile was exported through Logic 1.2.18's socket API toanalysis/extracted/logic1-export/old-separate.csv. - Exported channel mapping is validated as Channel 0 = SDA and Channel 1 = SCL.
- Direct I2C decode shows ACKed PCF8574 writes to shifted address
0x4e. - HD44780 decode with common PCF8574 backpack mapping recovers repeated
Enter Passworddisplay states. - The keypad UI leaks one new visible character per refresh while masking prior characters with
*;solve/solve.pyreconstructs the HTB flag from those incremental states. - Raw flag material is stored only in
loot/flag.txtandloot/flag-candidate.txt.
RAG / Advisory Memory
RAG output is advisory only. Record evaluated retrievals with:
scripts/challenge_harness.py rag-record <workspace> --query "..." --tag MATCHED|PARTIAL|MISSING|<secret redacted>|GENERIC --validation "..."Secrets/Flags
Raw flags and sensitive material stay in loot/ only. Use scripts/challenge_harness.py capture-flag to validate and record flag capture without printing the value.
Technical analogy
How to remember this solve
Think of the hardware challenge like following copper tracks on a circuit board. The useful clue is usually where signals enter, where they are transformed, and which debug or storage path exposes hidden state.
For Mission PinPossible, keep the mental model simple: identify the trusted assumption, prove it with the smallest safe test, then automate or repeat only the part that directly leads to the flag.