Dynamic analysis: build 2, run 1, blind recovery with build 1’s decryptor (protocol fixed 2026-10-13, before detonation)

Goal: check whether build 1’s decryptor, unchanged, recovers files that this build encrypted. It uses only responder data, under the run-6 protocol of case 2026-10-11_101bd45ab673_akira-ransomware.

Frozen before the detonation

| Item | SHA-256 | |—|—| | build 1 06-decryptor/akira_decrypt.py (tool under test) | 870c6db94f5bf94a52be630905131c24138555afd3bcef2a7bdc59ee6b81a8fe | | build 1 06-decryptor/akira_fast.py | 07352777bff09eb30f14a8c826c503e9247948d1385b7dcc8cd02288f4606927 | | b2run1-blind/b2_blind_recover.py (driver; differs from build 1’s run-6 driver only in the TOOL path and two labels) | fc5d69fde484355854594832a495192bd51d96caf08ba0251bed1655dcd5f72b | | b2run1-blind/collect_clock_and_times.ps1 (byte-identical to run 6’s; writes pre_run6.txt / post_run6.txt on the VM) | 15fbf5794497b64ac954ba86bc012776971105a6a37a21137d2c4dd45eee7ff4 | | b2run1-blind/state_probe.ps1 | f91ee0d2f6a716057e426030fa6ba615cc4781cb2a9a373b51b6548a67ebbde3 |

Rules

Identical to build 1’s run 6:

No tuning after encryption.

Procedure

  1. VM: revert. The analyst copies the two scripts to the Desktop and places test files in samples\data.
  2. Before encryption: a state probe, then collect_clock_and_times.ps1 -Tag pre. A Ghidra copy of the pre-listing is imported before encryption and not read.
  3. Launch: init "<exe>", "--encryption_path=C:\Users\deadtrace\Desktop\samples\data -localonly", "C:\Users\deadtrace\Desktop".
  4. Gates:
    • FUN_140078890: force return (rax=0; rip=[rsp]; rsp+=8);
    • FUN_14007ac00: check that r8 is the single root.
  5. Run: delete all breakpoints, then run to exit. No hooks and no seed reads.
  6. After the run, same boot: -Tag post. The analyst copies the .akira files and pre_run6.txt to b2run1-blind/.
  7. Recovery: python -I 04-dynamic/b2run1-blind/b2_blind_recover.py --run-dir 04-dynamic/b2run1-blind --pre pre_run6.txt --post post_run6.txt.

Results (2026-10-13): build 1’s decryptor, unchanged, recovered 6 of 7 in-scope build-2 files hash-exact

Log: artifacts/b2run1-blind-recovery-2026-10-13.txt. It shows the driver fc5d69fd… and the decryptor 870c6db9…, both as frozen. Machine-readable results: b2run1-blind/results.json.

Responder data:

Detonation:

File Size Known bytes Pass Search key2 / iv2 gap Outcome
20358696.jpg 24,287 JFIF 11 B 1 15 s 4,900 MATCH
photo_2026-09-23_15-02-25.jpg 172,871 JFIF 11 B 1 26 s 5,380 MATCH
photo_2026-09-24_12-44-15.jpg 214,866 JFIF 11 B 1 30 s 3,896 MATCH
QC-STC-…_v1.0.docx 42,333 ZIP header 28 B 1 26 s 4,225 MATCH
Screenshot 2026-09-10 152951.png 26,953 PNG 16 B 1 28 s 4,306 MATCH
Screenshot 2026-09-29 125745.png 47,803 PNG 16 B 1 22 s 4,013 MATCH
Detection Lab Automated BAS-to-Splunk Detection Engineering Loop.pdf 595,456 %PDF-1. 7 B 1 22 s (KCipher-2), 155 s in total 4,086 KEYS FOUND, OUTPUT DIFFERS (ChaCha stage 2 found nothing, as with build 1’s run-6 PDF)
rule.yml 981 none – – – OUT OF SCOPE

Timing, relative to the note and using the live offset:

Verdict:

Pre-listing integrity: the host pre_run6.txt (3,289 B, SHA-256 22d1f54b…) agrees with the Ghidra /b2run1 copy imported before detonation. Both are 3,289 bytes, and all 13 per-file SHA-256 values are identical.

Addendum (2026-10-14): the PDF, recovered after the run

This addendum does not change the blind result above (6 of 7), because the frozen driver did not include these tests.