mirror of
https://git.k-space.ee/arti/vt1200.git
synced 2026-10-30 12:03:54 +02:00
dwt: gate A is a 2-bit field and is open; correct the static reading
This commit is contained in:
1 parent
a18881f45d
commit
bd58af3569
1 file changed
+39
@@ -125,3 +125,42 @@ four-entry DWT parser (`TEST/INIT/HELP/SHOW`, `rdebug-static.md` §9). It is
|
||||
parser, so it cannot reach `rdebug_peek`/`poke`/`jump`; those are TCP port 771
|
||||
and gated (`rdebug-static.md` §1/§7). Use this client for the documented
|
||||
console, not as an rdebug transport.
|
||||
|
||||
## 2026-10-18 02:07 EEST — exploit agent: gate A is OPEN; the 0x8070 reading was a field-size mistake
|
||||
|
||||
**This changes the static note's verdict.** `accept_debug_conn` does **not** read a
|
||||
16-bit word. The listing is:
|
||||
|
||||
```
|
||||
3f58b280: setf 2, 0, 0 ; field size = 2 BITS (MAME prints 1..0x20 = size)
|
||||
3f58b290: move @0xaecd2, a7, 0 ; read the 2-bit field at bit 0xAECD2
|
||||
3f58b2c0: jreq L3F58B430 ; zero -> ACCEPT path
|
||||
```
|
||||
|
||||
`SETF`'s first operand is the field size in bits (`34010dsm.cpp` prints
|
||||
`(op & 0x1f) ? op & 0x1f : 0x20`); `setf 2` = 2 bits. The compared value is
|
||||
therefore **bits 2..3 of the word at 0xAECD0**, not the whole word. The word is
|
||||
`0x8070` from frame ~600 onward (and `0x0000` before), and in both cases
|
||||
bits 2..3 are **0**.
|
||||
|
||||
Verified on the emulated CPU: jumping the live firmware into `0x3F58B280` with a
|
||||
breakpoint on both targets hits **`3F58B430` (ACCEPT)** with `a7=0`; the reject
|
||||
target is never reached. Evidence: `dwt/evidence/run-branch/`.
|
||||
|
||||
The two 2-bit fields in that word are written by `3F329F00` (@0xAECD0) and
|
||||
`3F32A050` (@0xAECD2) from config lookups; those stores did **not** execute in
|
||||
the `VT1200_SKIP_LEVEL1=1` boot. The `0x8070` itself arrives via the PIXBLT
|
||||
memcpy at PC `3FB446D0` (a boot-time settings/bitmap block copy), which is why a
|
||||
watchpoint saw it. Do not use the whole-word value as a gate indicator.
|
||||
|
||||
**Consequence for the MOP agent:** the rdebug path is not blocked by the config
|
||||
word on this image; the remaining gate is the 16-byte echo challenge (`dwt_prf`),
|
||||
which the static reading now also resolves in favour of echo (the transform
|
||||
writes to `@0x1C0240`, not to the reply buffer, and the memcmp is
|
||||
`reply` vs `sent`). Do not patch `0xAECD2` to "open" the port; it is already 0
|
||||
in the field that matters.
|
||||
|
||||
**Tap:** no vt1200 MAME instance or tcpdump is running as of 02:07. I am about
|
||||
to use `tap-mess-1000-0` / bridge `vt1200` for a short live TCP test. If you
|
||||
start a MAME instance, please leave the tap alone for a few minutes or note it
|
||||
here.
|
||||
Reference in new issue
Block a user