March 29, 2024, 00:45
bigger smaller reset     1020px Wide width Full width Reset   * *

Gildor's Forums

  Homepage Facebook Read news on Twitter Youtube channel Github page
Welcome, Guest. Please login or register.
Did you miss your activation email?

« previous next »
Print
Author Topic: UPK формат  (Read 9948 times)
toptaran
Newbie
*
Posts: 3


View Profile
« on: April 01, 2013, 01:02 »

Значится нашел я темку в буржуйской ветке про юпк формат http://www.gildor.org/smf/index.php/topic,882.0.html
Попробовал разобрать, но столкнулся с проблемами.
Возьмем файлик
В нем выделено 27 значений.

1. int32 Tag (0x9E2A83C1)
2. int32 FileVersion - lower 16 bits is PackageVersion, upper 16 bits is LicenseeVersion
3. int32 HeadersSize
4. string PackageGroup - real name is unknown, this field usually contains "None"
5. int32 PackageFlags
6. int32 NameCount
7. int32 NameOffser
8. int32 ExportCount
9. int32 ExportOffser
10. int32 ImportCount
11. int32 ImportOffser
12. int32 DependsOffset - when PackageVersion >= 415

А дальше у меня под гуид почему-то 8 интов
13. int32 x 8 Guid

Потом уже как положено идет
21. int32 Generations.Count
там стоит единица, так что следующие три инта как и положено

22. int32 ExportCount
23. int32 NameCount
24. int32 NetObjectCount

Ну и последние три инта
25. int32 EngineVersion
26. int32 CookerVersion
27. int32 CompressionFlags

Уважаемый Gildor, не могли бы Вы подробнее объяснить что идет по формату дальше, если честно то не сильно понял про чанки и прочее что идет дальше, ну или поделитесь пожалуйста куском кода из экстрактора где это разбирается, если лень или не охота объяснять.

Заранее спасибо.
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #1 on: April 01, 2013, 01:25 »

Привет. Структуры данных для компрессии действительно достаточно подробно объяснялись на английской части форума. Возможности что-то объяснять или дать код у меня сейчас нет - пишу с мобильника (смотрите на моё сообщение "Переезд"). Могу посоветовать взглянуть на проект ME3 Explorer - я объяснял его автору как что делается. Этот проект с открытым кодом, плюс автор не поленился и сделал на сайте некое подобие документации по форматам данных.
Logged
toptaran
Newbie
*
Posts: 3


View Profile
« Reply #2 on: April 02, 2013, 02:12 »

Спасибо большое, очень помогло. Заменил шрифты, но вот теперь клиент падает с ошибкой нехватки виртуальной памяти. Не знаете что это может быть?
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #3 on: April 02, 2013, 02:30 »

Значит что-то напортачили со структурами данных. Например, размер текстуры в байтах указан слишком большой. При бинарном редактировании данных надо быть очень осторожным!
Logged
toptaran
Newbie
*
Posts: 3


View Profile
« Reply #4 on: April 02, 2013, 04:47 »

Ага, размер, если был 35к тга, то 70к уже юзать не хочет. Это уже решил, но основная проблема осталась.

В чате квадратиками как был русский так и остался. Вот думаю что не те шрифты заменил(smallfont,tinyfont,hud в Startup_LOC_INT), а где-то есть еще и он используется вся всех полей ввода.
Logged
warrantyvoider
Full Member
***
Posts: 109


View Profile
« Reply #5 on: April 03, 2013, 01:10 »

this can read .upk files too, code is open, maybe have a look: https://sourceforge.net/projects/me3explorer/
greetz WV
Logged
Orbit
Newbie
*
Posts: 28


View Profile
« Reply #6 on: June 16, 2013, 06:53 »

Может вопрос уже задавали, я не нашел.
Движок UE3. Допустим нужно изменить один файл в XXX архиве, с которого снята компрессия. Размер правленного файла при этом увеличивается. Если я знаю где прописываются размеры и смещения всех файлов в архиве, я вставляю свои правленный файл в архив, изменяю в XXX его размер и, соответственно, смещения всех последующих файлов, этого будет достаточно для работоспособности архива?
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #7 on: June 16, 2013, 13:17 »

Нет, недостаточно - в некоторых ресурсах хранятся абсолютные позиции внутри самого ресурса, и в случае перемещения ресурса на другое место их надо обновить. Ну а для этого надо уметь парсить все эти ресурсы.
Возможно сделать следующее (мне говорили об успехе): если ресурс увеличивается, то он дописывается в конец файла, и правится таблица экспорта так, чтобы она указывала на новый ресурс. Для этой операции надо знать лишь формат изменяемого ресурса.
Logged
Orbit
Newbie
*
Posts: 28


View Profile
« Reply #8 on: June 16, 2013, 13:34 »

Ясно. Спасибо. Меня интересует только SoundNodeWave, не знаете в нем есть эти величины, или можно не париться с его разбором? Или тут однозначно нельзя сказать и все зависит от игры?
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #9 on: June 16, 2013, 17:50 »

Там есть абсолютные позиции.
Logged
RangerRus
Newbie
*
Posts: 3


View Profile
« Reply #10 on: June 13, 2015, 20:13 »

Подниму эту тему... вопрос такой, как изменились .uasset файлы от Unreal Engine 4 по сравнению с .upk файлами от Unreal Engine 3?
Конкретно в структурах:
1) башки
2) таблице имён
3) таблице экспорта
4) таблице импорта

В таблице имён, как я вижу, больше нет двух флагов (по 4 байта были).
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #11 on: June 13, 2015, 20:44 »

Насчёт таблицы имён - да, там убрали флаги. Таблица импорта не изменилась. Заголовок пакета и экспорт изменились - и тут я бы советовал посмотреть исходники. Весь нужный код находится здесь:
https://github.com/gildor2/UModel/blob/master/Unreal/UnPackage.cpp

Наводки где смотреть:
заголовок пакета - FPackageFileSummary (функции SerializePackageFileSummary[3|4])
элемент таблицы экспорта - FObjectExport (SerializeObjectExport[3|4])

Первые байты FPackageFileSummary загружаются в функции
FArchive& operator<<(FArchive &Ar, FPackageFileSummary &S)
это сделано для определения версии движка и перенаправления в нужную функцию. Там загружается tag и version, это первые 8 байт.

Также обращаю внимание, что все file offset в UE4 - 64-bit (до этого были 32-bit)
Logged
RangerRus
Newbie
*
Posts: 3


View Profile
« Reply #12 on: June 13, 2015, 21:13 »

Спасибо, посмотрю там  Smiley
Logged
RangerRus
Newbie
*
Posts: 3


View Profile
« Reply #13 on: June 14, 2015, 00:06 »

В принципе, разобрался.
Но я вижу, что .uasset теперь не оканчиваются одними только объектами из таблицы экспорта, после этого, в настоящем конце .uasset, могут идти RAW текстуры. Наверное, положение каждой и свойства описываются одним из объектов таблицы экспорта?

В моём случае, объект как раз всего один

  num   offset     size  name

     0      310      291  Texture2D't_en_RadarWall_01_wall_03_normals'

При этом полный размер .uasset 0x01555b15, т.е. чуть более чем полностью это одни текстуры.
Замечу, что в башке есть смещение на начало этого блока с текстурами.

Раньше Texture2D содержали записи, первые записи вели в TFC, другие в сам объект, все указывали на минимапы одно единой текстуры, большие в TFC, мелкие в самом объекте. Теперь, видимо, сам объект и RAW дату разделили и RAW дата содержится специальным куском в конце .uasset, я правильно понимаю?
« Last Edit: June 14, 2015, 00:18 by RangerRus » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #14 on: June 14, 2015, 00:37 »

Да, правильно. В самом объекте текстуры могут не содержаться, но они дописаны в конец uasset. Начало данных - FPackageFileSummary, поле BulkDataStartOffset. Слава богу, от TFC отказались. Возможно это связано с отказом от DVD/BD дисков и переходом на HDD.
Logged
Print 
« previous next »
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS