docs(evidence): trace autoplay camera switches
This commit is contained in:
@@ -1291,6 +1291,19 @@ pointer are therefore not yet proven to have the same adjustment/layout; those
|
|||||||
offsets must remain unassigned until the selector/interface relationship is
|
offsets must remain unassigned until the selector/interface relationship is
|
||||||
recovered.
|
recovered.
|
||||||
|
|
||||||
|
The unattended demo also proves that this global is dynamic. Across 25 seconds
|
||||||
|
of read-only sampling it held three distinct heap pointers; all began with the
|
||||||
|
same relocated outer vtables `0x025765B4` and `0x02576558`. Two selected
|
||||||
|
objects exposed synchronized translation triples in the paired raw blocks at
|
||||||
|
offsets `+0x2C/+0x3C/+0x4C` and `+0x6C/+0x7C/+0x8C`, with world-like values
|
||||||
|
such as `(491.562, 761.551, 7.361)`. A third object used the same vtable but
|
||||||
|
reported normalized-looking values near `(0.098, 0.018, 0.856)` and did not
|
||||||
|
match the paired block. The observed pointer transitions are consistent with
|
||||||
|
the unattended camera changes, but the sample carries no mode label and does
|
||||||
|
not prove first- versus third-person identity. It does prove that the static
|
||||||
|
direct-xref initializer is not the sole runtime writer of the global; indirect
|
||||||
|
or unanalyzed write paths remain to be recovered.
|
||||||
|
|
||||||
A fresh no-input launch of the canonical `iron_3d.exe` did create a responsive
|
A fresh no-input launch of the canonical `iron_3d.exe` did create a responsive
|
||||||
window titled `Parkan. Железная Стратегия`. A read-only probe then requested
|
window titled `Parkan. Железная Стратегия`. A read-only probe then requested
|
||||||
`PROCESS_QUERY_INFORMATION | PROCESS_VM_READ` and attempted to read the known
|
`PROCESS_QUERY_INFORMATION | PROCESS_VM_READ` and attempted to read the known
|
||||||
|
|||||||
@@ -280,12 +280,22 @@ adjustment; их offsets остаются unassigned до recovery selector rela
|
|||||||
|
|
||||||
Локальная IDA-база уточняет адреса этой связи: `stdGetCurrentCamera2` — это
|
Локальная IDA-база уточняет адреса этой связи: `stdGetCurrentCamera2` — это
|
||||||
шестибайтный getter по RVA `0x4FD80`, который возвращает `dword` по RVA
|
шестибайтный getter по RVA `0x4FD80`, который возвращает `dword` по RVA
|
||||||
`0x7355C`. Единственный найденный initializer этого global — функция Terrain
|
`0x7355C`. Единственный найденный **direct static** initializer этого global — функция Terrain
|
||||||
по RVA `0x4D4D0`: она запрашивает selector `8` у своего `this` и сохраняет
|
по RVA `0x4D4D0`: она запрашивает selector `8` у своего `this` и сохраняет
|
||||||
полученный interface pointer. Это доказывает адрес хранения и путь заполнения,
|
полученный interface pointer. Это доказывает адрес хранения и путь заполнения,
|
||||||
но не разрешает трактовать pointer как конкретный layout камеры либо читать его
|
но не разрешает трактовать pointer как конкретный layout камеры либо читать его
|
||||||
как runtime evidence без доступа к процессу на том же уровне привилегий.
|
как runtime evidence без доступа к процессу на том же уровне привилегий.
|
||||||
|
|
||||||
|
Elevated live sampling теперь доказывает, что direct static xref не исчерпывает
|
||||||
|
runtime writers: за 25 секунд autoplay global переключился между тремя heap
|
||||||
|
pointer, все с relocated outer vtables `0x025765B4`/`0x02576558`. У двух объектов
|
||||||
|
paired blocks `+0x2C/+0x3C/+0x4C` и `+0x6C/+0x7C/+0x8C` синхронно несли
|
||||||
|
world-like translation, например `(491.562, 761.551, 7.361)`; третий давал
|
||||||
|
normalized-looking `(0.098, 0.018, 0.856)` и не совпадал с paired block.
|
||||||
|
Наблюдение согласуется с автоматическими camera switches, но не маркирует mode;
|
||||||
|
оно запрещает называть `0x4D4D0` единственным runtime writer и требует recovery
|
||||||
|
indirect/unanalyzed write path.
|
||||||
|
|
||||||
### Vtable и interface negotiation
|
### Vtable и interface negotiation
|
||||||
|
|
||||||
Вызовы вида `object->vfunc(offset)` доказывают порядок slots, даже когда имя
|
Вызовы вида `object->vfunc(offset)` доказывают порядок slots, даже когда имя
|
||||||
|
|||||||
Reference in New Issue
Block a user