вторник, 16 июля 2013 г.

содержание wotreplay файлов

и так...
с заголовками и распаковкой (zlib) и расшифровкой (blowfish) все ясно, что же за данные в итоге получаются?

в процессе отладки не сложно найти место распаковки/расшифровки после чего в памяти можно найти область памяти с сырыми данными, идентичными распакованному файлу. Поставив бряк на чтение из этой области памяти найдется вот такой вызов memcpy, который и читает все получившиеся данные:

0093294E |. 50 PUSH EAX ; /n
0093294F |. 03CA ADD ECX,EDX ; |
00932951 |. 51 PUSH ECX ; |src
00932952 |. 56 PUSH ESI ; |dest
00932953 |. E8 547A3B00 CALL <JMP.&MSVCR90.memcpy> ; \memcpy

Далее написав небольшой скрипт для отладчика ollydbg сохраняем в лог интересующие нас данные, и сохраняем лог в файл для дальнейшего анализа:

var b // байты копируемые memcpy
var n // sizeof(b)
bp 00932953 //бряк на memcpy
eob llog
run
coe

nextbp:
run

llog:
log eax
log ecx
log esi
mov n, eax
mov b, [ecx], n
logbuf b, n
jmp nextbp

посмотрев на получившиеся данные, очень хорошо видно, что абсолютное большинство чтений из файла это данные по 12 байт, при этом сами данные часто повторяются или имеют небольшие отличия.

"0000000C";"7A300020";"0012EEC0";"21 00 00 00 14 00 00 00 00 00 00 00 "
"00000004";"7A30002C";"0012EE6C";"1D 00 00 00 "
"0000001D";"7A300030";"0ADB1FC8";"57 6F 72 6C 64 C2 A0 6F 66 C2 A0 54 61 6E 6B 73 20 76 2E 30 2E 38 2E 34 20 23 33 39 39 "
"0000000C";"7A30004D";"0012EEC0";"01 00 00 00 0E 00 00 00 00 00 00 00 "
"0000000C";"7A30005A";"0012EEC0";"3E 00 00 00 00 00 00 00 00 00 00 00 "
"0000000C";"7A3000A4";"0012EEC0";"BD 07 00 00 08 00 00 00 00 00 00 00 "
"0000000C";"7A30086D";"0012EEC0";"45 01 00 00 08 00 00 00 00 00 00 00 "
"0000000C";"7A3009BE";"0012EEC0";"2E 00 00 00 08 00 00 00 00 00 00 00 "
"0000000C";"7A3009F8";"0012EEC0";"2F 00 00 00 01 00 00 00 00 00 00 00 "
"0000000C";"7A300A33";"0012EEC0";"05 00 00 00 02 00 00 00 00 00 00 00 "
"0000000C";"7A300A44";"0012EEC0";"6A 00 00 00 0B 00 00 00 00 00 00 00 "
"0000000C";"7A300ABA";"0012EEC0";"13 00 00 00 0B 00 00 00 00 00 00 00 "
"0000000C";"7A300AD9";"0012EEC0";"31 00 00 00 0A 00 00 00 00 00 00 00 "
"0000000C";"7A300B16";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300B2E";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300B46";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300B5E";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300B76";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300B8E";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300BA6";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300BBE";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300BD6";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300BEE";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300C06";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300C1E";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "
"0000000C";"7A300C36";"0012EEC0";"0C 00 00 00 03 00 00 00 00 00 00 00 "

.......
.......
.......

Покопавшись в python скриптах WoT клиента и исходниках BW191
можно предположить, что это координаты объектов, камер, и т.д.
Vector3::Vector3 (
float a,
float b,
float c
)

так же в исходниках  BW191 есть интересные структуры waypoint, но используются ли они в WoT сказать не могу, кому интересно сами найдут :) Всем удачи.