Page 1 of 2
.wft encrypted/compressed files
Posted: Fri May 14, 2010 9:25 pm
by nfsx
Hello can somebody tell me what compression/encryption it is used in .wft exported (locked) files.
I've done some research and came to conclusion that it is encrypted via encryption methods described here
http://www.gtamodding.com/index.php?title=Cryptography
And i even extracted the key(cypher text from)
gtaiv.exe (needed for decrypting)
1AB56FED7EC3FF01227B691533975DCE47D769653FF775426A96CD6D5307565D
If someone can take even a small look or give me a hint i will be grateful.
Thanks
Re: .wft encrypted/compressed files
Posted: Sat May 15, 2010 11:25 am
by nfsx
Could someone offer some assistance?

Re: .wft encrypted/compressed files
Posted: Sun May 16, 2010 2:31 pm
by Strobe
Both files are Zlib compressed and can be unpacked without any problems.
Didn't use the cryptokey at all. However, i dont know a program that can read the files unpacked

Re: .wft encrypted/compressed files
Posted: Mon May 17, 2010 12:25 pm
by Decryptor
Zmodeler can view .wft files
The locked_unpacked should be equal to unlocked file

So i am sceptic that it uses zlib
Thanks
Re: .wft encrypted/compressed files
Posted: Mon May 17, 2010 2:14 pm
by Strobe
It uses zlib, a zlib decompressor depacked those files for me. So zmodel can depack zlib.
Re: .wft encrypted/compressed files
Posted: Mon May 17, 2010 2:39 pm
by Decryptor
Yes but it zmodeler2.exe also uses crypto library.
Can you make it import to zmodeler 2?
A locked .wft to import to zmodeler 2.
I beg you like a god..

Re: .wft encrypted/compressed files
Posted: Tue May 25, 2010 5:37 pm
by g3org32010
you really dont give up, huh?
Re: .wft encrypted/compressed files
Posted: Tue Jul 06, 2010 12:21 pm
by rafal345
You want to import mod for GTA IV?
Mod files are blocked because of model thefts
The same situation is in GTA SA and NFS MW
(sorry for my English)
Re: .wft encrypted/compressed files
Posted: Sat Jul 24, 2010 11:29 pm
by rstratton
rafal345 wrote:You want to import mod for GTA IV?
Mod files are blocked because of model thefts
The same situation is in GTA SA and NFS MW
(sorry for my English)
funny theives locking stolen files
Re: .wft encrypted/compressed files
Posted: Tue Aug 31, 2010 12:14 pm
by Engineer
The contents of this post was deleted because of possible forum rules violation.
Re: .wft encrypted/compressed files
Posted: Tue Aug 31, 2010 5:08 pm
by Engineer
File format..
Code: Select all
//--------------------------------------
//--- 010 Editor v3.0.1 Binary Template
//
// File: iv-wft.bt
// Author: Stanislav "listener" Golovin
// Revision: 0.6 (2009/09/08)
// Purpose: Defines a template for parsing GTA IV frag type resources (PC)
// Changes:
//--------------------------------------
#include "Data/iv-types.bth"
// === fragType internal objects ===
struct Pair {
DWORD _f0;
DWORD _f4;
};
struct fragType_obj1 {
pgArray_DWORD _f0;
DWORD _f8;
pgPtr _fC;
pgPtr m_pEventSet; // pgPtr<rage::evtSet> (same as fragType::m_pCollisionEvents)
Pair _f14[20];
DWORD _fB4;
float _fB8;
DWORD _fBC;
DWORD _fC0 <format=hex>;
DWORD _fC4 <format=hex>; // unused
BYTE _fC8;
BYTE _fC9;
BYTE _fCA;
BYTE _fCB;
};
struct fragType_obj3 {
Matrix34 _f0;
pgPtr _f40; // pgPtr<fragType_obj2> m_pParent ?
DWORD _f44;
DWORD _f48; // WORD, WORD ?
DWORD _f4C;
};
struct fragType_obj2 {
DWORD _f0;
pgPtr m_pSkeleton; // pgPtr<rage::crSkeletonData> points to m_pDrawable::m_pSkeleton
DWORD _f8;
// pgPtr _fC;
struct {
int offset: 28 <format=hex>;
int type: 4;
if (type == 5) {
local uint doffset = FTell();
local DWORD count = ReadUInt (doffset); // read forward parameter count
FSeek(offset);
fragType_obj3 data[count] <optimize=false>;
FSeek(doffset);
}
} _fC;
DWORD m_dwBoneCount;
pgPtr _f14; // pgPtr<Matrix34>, points to _f18->pData[0]->pData
pgObjectArray_Matrix34Array _f18;
DWORD _f20;
pgPtr _f24;
};
struct pgPtr_fragType_obj2 {
int offset: 28 <format=hex>;
int type: 4;
if (type == 5) {
local uint doffset = FTell();
FSeek(offset);
fragType_obj2 p;
FSeek(doffset);
}
};
struct pgPtr_evtSet;
struct fragType_obj4 {
pgPtr_evtSet _f0;
fragType_obj1 _f4;
Vector4 _fD0;
Vector4 _fE4;
DWORD _F0[4];
DWORD _f100;
DWORD _f104; // float or hash
DWORD _f108;
BYTE _f10C;
BYTE _f10D;
BYTE _f10E;
BYTE _f10F;
BYTE _f110;
WORD _111; // unused/uninitialized
BYTE _f113;
float _f114;
float _f118;
char _f11C[44];
};
struct pgPtr_fragType_obj4 {
int offset: 28 <format=hex>;
int type: 4;
if (type == 5) {
local uint doffset = FTell();
FSeek(offset);
fragType_obj4 p;
FSeek(doffset);
}
};
// ### rage::fragDrawable ###
struct fragDrawable {
DWORD __vmt <format=hex>;
pgPtr_OffsetMap m_pOffsetMap;
// >> pgBase ends here
pgPtr_grmShaderGroup m_pShaderGroup;
// >> rmcDrawableBase ends here
pgPtr_crSkeletonData m_pSkeleton;
grmLodGroup m_LodGroup;
// >> rmcDrawable ends here
Matrix34 _f80;
pgPtr_phBound m_pBound; // pgPtr<rage::phBound>
pgArray_DWORD _fC4; // pgObjectArray<rage::phBound>
pgPtr _fCC;
WORD _fD0;
BYTE _fD2;
BYTE _fD3;
DWORD _fD4;
DWORD _fD8;
DWORD _fDC;
pgPtr_String _fE0;
DWORD _fE4;
pgArray_DWORD _fE8; // pgObjectArray<rage::crAnimation>
};
struct pgPtr_fragDrawable {
int offset: 28 <format=hex>;
int type: 4;
if (type == 5) {
local uint doffset = FTell();
FSeek(offset);
fragDrawable drawable;
FSeek(doffset);
}
};
// rage::evtSet
struct evtSet {
DWORD __vmt <format=hex>;
pgObjectArray _f4;
DWORD _fC;
DWORD _f10;
DWORD _f14;
};
struct pgPtr_evtSet {
int offset: 28 <format=hex>;
int type: 4;
if (type == 5) {
local uint doffset = FTell();
FSeek(offset);
evtSet eventSet;
FSeek(doffset);
}
};
// ### rage::crFrameDof and subclasses ###
typedef enum <BYTE> {
FrameDofVector3 = 0,
FrameDofQuaternion = 1,
FrameDofFloat = 2,
FrameDofInt = 3
} FrameDofType;
struct crFrameDof { // TODO: size (of ane subclass) = 0x20
DWORD __vmt<format=hex>;
FrameDofType m_eType;
};
struct pgPtr_crFrameDof {
int offset: 28 <format=hex>;
int type: 4;
if (type == 5) {
local uint doffset = FTell();
FSeek(offset);
crFrameDof dof;
FSeek(doffset);
}
};
struct pgObjectArray_crFrameDof {
int offset: 28 <format=hex>;
int type: 4;
WORD m_wCount;
WORD m_wSize;
if (type == 5) {
local uint doffset = FTell();
FSeek(offset);
pgPtr_crFrameDof data[m_wSize] <optimize=false>;
FSeek(doffset);
}
};
// ### rage::crFrame ###
struct crFrame {
DWORD __vmt <format=hex>;
DWORD _f4;
DWORD _f8;
pgObjectArray_crFrameDof m_dofs;
};
struct pgPtr_crFrame {
int offset: 28 <format=hex>;
int type: 4;
if (type == 5) {
local uint doffset = FTell();
FSeek(offset);
crFrame frame;
FSeek(doffset);
}
};
// ### rage::fragTypeChild
struct fragTypeChild {
DWORD __vmt<format=hex>;
float _f4;
float _f8;
WORD _fC;
WORD _fE;
Matrix34 _f10;
Matrix34 _f50;
pgPtr_fragDrawable _f90;
pgPtr_fragDrawable _f94; // pgPtr<rage::fragDrawable>
pgPtr_evtSet _f98;
pgPtr_evtSet _f9C;
pgPtr_evtSet _fA0;
pgPtr_evtSet _fA4;
fragType_obj1 _fA8;
fragType_obj1 _f174;
fragType_obj1 _f240;
DWORD _f310;
};
struct pgPtr_fragTypeChild {
int offset: 28 <format=hex>;
int type: 4;
if (type == 5) {
local uint doffset = FTell();
FSeek(offset);
fragTypeChild p;
FSeek(doffset);
}
};
// ### gtaFragType ###
struct gtaFragType {
DWORD __vmt<format=hex>;
pgPtr_OffsetMap m_pOffsetMap;
// >> rage::pgBase ends here
float _f8;
float _fC;
float _f10;
float _f14;
float _f18;
float _f1C;
Vector3 _f20;
Vector3 _f30;
Vector3 m_vUnbrokenCGOffset;
Vector3 m_vDampingLinearC;
Vector3 m_vDampingLinearV;
Vector3 m_vDampingLinearV2;
Vector3 m_vDampingAngularC;
Vector3 m_vDampingAngularV;
Vector3 m_vDampingAngularV2;
pgPtr_String _fB0; // modelName ? txd name ?
pgPtr_fragDrawable m_pDrawable; // rage::fragDrawable
pgPtr _fB8;
pgPtr _fBC;
DWORD _fC0;
int _fC4;
pgPtr _fC8;
local int dcount = ReadByte (FTell()+0x126);
struct { // names inside strucutres in _fD0
int _fCC_offset: 28;
int _fCC_type: 4;
if (_fCC_type == 5) {
local uint doffset = FTell();
FSeek(_fCC_offset);
pgPtr_String _fCC_p[dcount+1] <optimize=false>;
FSeek(doffset);
}
} _fCC;
struct {
int _fD0_offset: 28;
int _fD0_type: 4;
if (_fD0_type == 5) {
local uint doffset = FTell();
FSeek(_fD0_offset);
pgPtr_fragType_obj4 _fD0_p[dcount] <optimize=false>;
FSeek(doffset);
}
} _fD0;
struct {
int _fD4_offset: 28;
int _fD4_type: 4;
if (_fD4_type == 5) {
local uint doffset = FTell();
dcount = ReadByte (doffset+0x11B); // _f1F3
FSeek(_fD4_offset);
pgPtr_fragTypeChild _fD4_p[dcount] <optimize=false>; // pgPtr<fragTypeChild>
FSeek(doffset);
}
} m_ppChildren;
pgObjectArray _fD8;
pgPtr _fE0;
pgPtr _fE4; // pgPtr<rage::phArchetype>
pgPtr _fE8; // pgPtr<rage::phArchetype>
pgPtr _fEC;
pgPtr _fF0;
pgPtr _fF4;
pgPtr _fF8;
pgPtr _fFC;
pgPtr _f100;
DWORD _f104;
pgPtr_evtSet m_pCollisionEvents; // pgPtr<rage::evtSet>
fragType_obj1 _f10C;
pgPtr_crFrame m_pFrame; // pgPtr<rage::crFrame>
pgPtr_fragType_obj2 _f1DC;
pgPtr_fragType_obj2 _f1E0;
pgPtr _f1E4;
DWORD m_nEstimatedCacheSize;
DWORD m_nEstimatedArticulatedCacheSize;
BYTE m_nSelfCollisionCount;
BYTE _f1F1;
BYTE _f1F2;
BYTE _f1F3;
BYTE _f1F4;
BYTE _f1F5;
BYTE _f1F6;
BYTE _f1F7;
BYTE _f1F8;
BYTE m_bBecomeRope;
BYTE m_artAssetID;
BYTE m_bAttachBottomEnd;
DWORD _pad_1FC; // unused
float m_fMinForce;
pgPtr _f204;
DWORD _f208;
DWORD _f20C;
// >> rage::fragType ends here
pgArray_CLightAttr m_lightAttrs;
DWORD _f218;
DWORD _f21C;
};
LittleEndian ();
SetBackColor (0xFFC0C0);
gtaFragType wft;
Re: .wft encrypted/compressed files
Posted: Wed Sep 01, 2010 10:36 pm
by Mr.Mouse
Ah, well I did a little research of my own, Engineer, because you were too eager to get this topic back to where nfsx left off, and you showed similar behaviour. Guess what I found? You know what I found already because I was chatting with you just a few minutes ago on MSN.
Here's the log:
Code: Select all
Mr.Mouse says:
Hi nfsx, you are banned ... again..
Engineer says:
I am not nfsx
=)
Get your facts right first
And i dont think it is wise to be threating to me
Mr.Mouse says:
Ah, well, in that case, would you care to explain why your MSN login email address matches exactly the one this "nfsx" person that was banned used when registering at our board?
Engineer says:
Couse i like nfs?
You do know what NFS is
NEED FOR SPEED ,mike
Mr.Mouse says:
Hmm, so you are saying there can be two nfsx-design@hotmail.com addresses?
Engineer says:
Hey your name is Mike like that Mike that robed me yesterday so you are the one ,yeah!
So you check if two user's are the same by email?
Wow!
And not by ip
Some Admin you are
Mr.Mouse says:
Indeed, I made a clear mistake there. I should have IP-banned you in the first place. But I corrected it now.
Engineer says:
SOCKS5 baby
SOCKS5
Dynamic IP is a magic thing
Good luck with IP ban xD
Mr.Mouse says:
Hmm, I have a feeling we will find you again, and again.
Engineer says:
HAHAHAHA
try
I dont give a shit about that forum
Ban yourself while you are at it
Mr.Mouse says:
That's okay. We don't feel bad if you do not like us. No harm done there.
Engineer says:
and .wft unlocker has been made
Mr.Mouse says:
Good for you.
Engineer says:
Anything else?
Mr.Mouse says:
Nope, we end here.
Engineer says:
Great
Mr.Mouse says:
Have a good one.
Engineer says:
No thanks
And so ends another episode in the story of nfsx that became an Engineer. Will he be back? Tune in next time, folks!
Re: .wft encrypted/compressed files
Posted: Thu Sep 02, 2010 7:54 am
by Mr.Mouse
You know, it is a pity. He has registered here under three names now, Decryptor (thanks Dinoguy for that find), nfsx and Engineer. I was willing to help him with his efforts, but he seems very impatient. He has already pissed off others apparently.
http://forum.cgpersia.com/f27/what-ever ... ave-15777/
He should lighten up.
Re: .wft encrypted/compressed files
Posted: Thu Sep 02, 2010 2:12 pm
by brienj
Mr.Mouse wrote:You know, it is a pity. He has registered here under three names now, Decryptor (thanks Dinoguy for that find), nfsx and Engineer. I was willing to help him with his efforts, but he seems very impatient. He has already pissed off others apparently.
http://forum.cgpersia.com/f27/what-ever ... ave-15777/
He should lighten up.
Well, I guess it was him that was asking for help on IM yesterday. He said that you told him to ask me for help, which I kind of doubt after reading this, but I am not helping anyone with this anymore, since I found out about how he was a dick to you.
I hope people read my last sentence, if they even can, because if I get anymore IMs about this format, which to be honest, I could care less about, I will end up blocking them, unless they quit bugging me for help on it.
BTW, from my initial analysis of the locked and un-locked files, you gotta be kidding me that nobody can unlock them easily. I'm pretty sure there are people that can, but those that can, wouldn't want to give the means or knowledge to those that can't, and I can see why in this case.

Re: .wft encrypted/compressed files
Posted: Thu Sep 02, 2010 3:50 pm
by Mr.Mouse
This whole Forza and NFS car modelling community seems to exist of a lot of dicks that come here to fight. Sure, there will be honest and decent people there, but the ones that come over here have a high percentage of people that troll and misbehave. They seek help, and then go back to their own community to boast how good they are, probably. Don't know about you, but I'm fed up with that. If I find anyone here wanting a tool to unlock any custom model from any racing game, I'll instaban em. It's the only way to be sure.