March 21, 2019, 12:38
bigger smaller reset 800px Wide width Full width Reset * *

Gildor's Forums

  Homepage Facebook Donate
Welcome, Guest. Please login or register.
Did you miss your activation email?


Login with username, password and session length
« previous next »
Pages: [1] Print
Author Topic: Assetto Corsa Competizione  (Read 611 times)
Sparten
Newbie
*
Posts: 3


View Profile
« on: October 01, 2018, 22:39 »

First of all for thos who need it here is the key to unpack:
Code:
F4393E55EE923AE2596931D85E1621FD96B11B509F2039809D66A60182BF5E82

Having done that i'm left with a problem of an undetected engine version, so i went and tested from version 4.16 to 4.21 and non of them seems to be able to extract enything other the simple textures most of the time i'm faced with execptions like this:

Code:
Package "AC2/Content/common/Textures/CarPaint/T_Bump_N.uasset": wrong name index 6150
UnPackage::SerializeFName:pos=000003D0 <- FPropertyTag<< <- CTypeInfo::SerializeUnrealProps <- UObject::Serialize <- UTexture3::Serialize4 <- UTexture2D::Serialize4 <- UTexture2D::Serialize <- LoadObject:Texture2D'T_Bump_N.T_Bump_N', pos=3D0, ver=516/0 (unversioned), game=ue4.20 <- UObject::EndLoad <- CUmodelApp::ShowPackageUI <- UIMenuItem::HandleCommand <- UIMenuItem::HandleCommand <- CUmodelApp::WndProc <- VisualizerLoop <- Main:umodel_build=880

Hope someone might be able to point me in the right direction.
Btw the game comes with a full .pdb of the main .exe
« Last Edit: October 01, 2018, 22:41 by Sparten » Logged
Sparten
Newbie
*
Posts: 3


View Profile
« Reply #1 on: October 02, 2018, 01:01 »

Just want to add a small bit of code in case someone might want to dump the files without the need for a key.
You will need to filter out the files you dont want to copy as this will dump everything.
You might need to change signature to find FPlatformFileManager::Get() for other games.

Code:

enum class EPlatformFileRead : uint8_t
{
None = 0x0,
AllowWrite = 0x01 // attempts to open for read while allowing others to write
};
/**
 * Enum for platform file write flags
 */
enum class EPlatformFileWrite : uint8_t
{
None = 0x0,
AllowRead = 0x01 // attempts to open for write while allowing others to read
};

class FPakFile
{
public:
FString PakFilename;
FName PakFilenameName;
unsigned char unknowndata00[0x168];
};
class IPlatformFile
{
public:
virtual void vfunct0();
virtual void vfunct1();
virtual void vfunct2();
virtual void vfunct3();
virtual void vfunct4();;
virtual void vfunct5();
virtual void vfunct6();
virtual void vfunct7();
virtual void vfunct8();
virtual void vfunct9();
virtual void vfunct10();
virtual void vfunct11();
virtual void vfunct12();
virtual void vfunct13();
virtual void vfunct14();
virtual void vfunct15();
virtual void vfunct16();
virtual void vfunct17();
virtual void vfunct18();
virtual void vfunct19();
virtual void vfunct20();
virtual void vfunct21();
virtual void vfunct22();
virtual void vfunct23();
virtual void vfunct24();
virtual void vfunct25();
virtual void vfunct26();
virtual void vfunct27();
virtual void vfunct28();
virtual void vfunct29();
virtual void vfunct30();
virtual void vfunct31();
virtual void vfunct32();
virtual void vfunct33();
virtual void vfunct34();
virtual void vfunct35();
virtual void vfunct36();
virtual void vfunct37();
virtual void vfunct38();
virtual void FindFilesRecursively(TArray<FString>* FoundFiles, const TCHAR* Directory, const TCHAR* FileExtension);
virtual bool DeleteDirectoryRecursively(const TCHAR* Directory);
virtual bool CreateDirectoryTree(const TCHAR* Directory);
virtual bool _CopyFile(const TCHAR* To, const TCHAR* From, EPlatformFileRead ReadFlags = EPlatformFileRead::None, EPlatformFileWrite WriteFlags = EPlatformFileWrite::None);
};

class FPakPlatformFile : public IPlatformFile
{
struct FPakListEntry
{
int ReadOrder;
FPakFile *PakFile;
};
public:
IPlatformFile *LowerLevel;
TArray<FPakListEntry> PakFiles;
};

class FPlatformFileManager
{
public:

FPakPlatformFile *TopmostPlatformFile;
private:
};

void CreatePath(const std::wstring& strPathin)
{
std::wstring strPath(strPathin);
std::wstring strCurrent;
int nStart, nStart1, nStart2;

// Create the path //
while (strPath.length())
{
nStart1 = (int)strPath.find('/'); if (nStart1 == std::wstring::npos) nStart1 = INT_MAX;
nStart2 = (int)strPath.find('\\'); if (nStart2 == std::wstring::npos) nStart2 = INT_MAX;
nStart = min(nStart1, nStart2);
if (nStart == INT_MAX) break;
strCurrent += strPath.substr(0, nStart) + L"\\";
strPath.erase(strPath.begin(), strPath.begin() + nStart + 1);
CreateDirectory(strCurrent.c_str(), NULL);
}
}

typedef FPlatformFileManager *(__stdcall* FPlatformFileManagerGet_t)();
FPlatformFileManagerGet_t pFPlatformFileManagerGet = nullptr;

pFPlatformFileManagerGet =  reinterpret_cast<FPlatformFileManagerGet_t>(FindPattern(GetModuleHandle(NULL), (unsigned char*)"\x48\x8B\xC3\x48\x83\xC4\x20\x5B\xC3\xCC\xCC\xCC\xCC\xCC\x48\x8D\x05\x00\x00\x00\x00\xC3\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\x48\x83\xEC\x38",
"xxxxxxxxxxxxxxxxx????xxxxxxxxxxxxx") + 14);

add_log("pFPlatformFileManagerGet 0x%llx", pFPlatformFileManagerGet);
FPlatformFileManager * fileManager = pFPlatformFileManagerGet();

TArray<FString> OutFiles;
fileManager->TopmostPlatformFile->FindFilesRecursively(&OutFiles, L"../../../", L"");

for (size_t i = 0; i < OutFiles.Num(); i++)
{
std::wstring indir = OutFiles[i].c_str();
std::wstring outdir = L"E:/ACC/" + indir.substr(9, indir.length());
CreatePath(outdir);

outdir = L"E:/ACC/" + indir.substr(9, indir.length());
if(!fileManager->TopmostPlatformFile->_CopyFile(outdir.c_str(), OutFiles[i].c_str()))
{
add_log("failed to copy file %s", ws2s(outdir).c_str());
}
}
add_log("done dumping files");
« Last Edit: October 02, 2018, 01:37 by Sparten » Logged
Blenux
Moderator
Sr. Member
*****
Posts: 481


Welcome to Gildor Land.


View Profile WWW
« Reply #2 on: October 02, 2018, 10:16 »

UE4:20 - AES: 0xF4393E55EE923AE2596931D85E1621FD96B11B509F2039809D66A60182BF5E82

Logged

Computer/Game Dev Wannabe Enthusiast.
Sparten
Newbie
*
Posts: 3


View Profile
« Reply #3 on: October 02, 2018, 10:37 »

Thanks, i was trying using both quickbms and the method posted above to extract, but never tested it with umodel on its own. dooh
Logged
linamza_84
Newbie
*
Posts: 2


View Profile
« Reply #4 on: January 01, 2019, 21:26 »

Hi,

The new version has add a new files, but unfotrunatly the umodel open all the models without the correct material, all new models are opened with a material called "worldgridmaterial".

maybe is a AES KEY or a umodel need to be updated to support the new files?

find here one of the new model files: http://www.mediafire.com/file/x7lw7iinn51cubv/UMODEL_Material_Unloaded.rar/file

Hope gildor can fix this. thank you in advance for the great work.

Cheers

« Last Edit: January 01, 2019, 21:32 by linamza_84 » Logged
Gildor
Administrator
Hero Member
*****
Posts: 6994



View Profile WWW
« Reply #5 on: January 01, 2019, 21:37 »

If AES key would be wrong, you wouldn't open anything. Incorrect material doesn't mean a problem with opening files, this means that models were prepared in a way when materials are assigned in a different way than setting them up directly to meshes. You should recognize and assign materials yourself, outside of umodel.
Logged
linamza_84
Newbie
*
Posts: 2


View Profile
« Reply #6 on: January 01, 2019, 22:30 »

Thank you Gildor for the quick answer, much apreciated.
Logged
Gildor
Administrator
Hero Member
*****
Posts: 6994



View Profile WWW
« Reply #7 on: January 01, 2019, 23:16 »

There are several places where model materials could be set up.
1. model itself
2. blueprint
3. scene
4. from code (assign materials to model's sections).

Only the 1st one could work with umodel.
Logged
Blenux
Moderator
Sr. Member
*****
Posts: 481


Welcome to Gildor Land.


View Profile WWW
« Reply #8 on: January 02, 2019, 09:30 »

uModel can only show you the basic textures of materials, it's isn't a full engine like UE4 is, here is what a car material setup consists of.....


Logged

Computer/Game Dev Wannabe Enthusiast.
Pages: [1] Print 
« previous next »
Jump to:  

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