December 6, 2025Dec 6 Localization Today I am gonna show you how to reverse engineer any texture using Raw Texture Cooker, this process is by far the easiest and requires almost zero effort and just poor clicks and a little bit of inspection. (Uncompressed and Un-encrypted textures obviously). +==== TUTORIAL SECTION ====+ INTRODUCTION But how do those textures store their data? Well, aside from properly skipping the header and parsing the width and the height values from here there is one extra step in here. Because unlike the traditional images, textures are often scale in sizes ranging from 128x128 to 4096x4096 on average so all of them as you can see aredividale by 2 and even 4. Because of this difference textures relly and get a very special compression methods: DXT1, DXT3, DXT5, BC6, BC7. TEXTURE COMPRESSION Like any other Block Compression method (BC)... The size of each compressed block is fixed, it's eighter 8 or 16 byts, representing a 4:1 or 8:1 compression ratio if the source image is in 8 bit RGBA format DXT1: Splits the image into tiny 4x4 pixel blocks Compression stores exactly two colours, 16 bits each Two in beetween colours can be interpolated from these The 4x4 block is recreated using only these 4 colours, requiring 2 bits per pixel In total, block uses 64 bits: 16 pixels * 2 colours * 16 bits per colour BC: Type Of Data: Data Rate: Palette Size: Line Segments: Use For: BC1 RGB + optional 1-bit alpha 0.5 byte/px 4 1 Color maps, Cutout color maps (1-bit alpha), Normal maps, if memory is tight BC2 RGB + 4-bit alpha 1 byte/px 4 1 n/a BC3 RGBA 1 byte/px 4 color + 8 alpha 1 color + 1 alpha Color maps with full alpha, Packing color and mono maps together BC4 Grayscale 0.5 byte/px 8 1 Height maps, Gloss maps, Font atlases, Any grayscale image BC5 2 × grayscale 1 byte/px 8 per channel 1 per channel Tangent-space normal maps BC6 RGB, floating-point 1 byte/px 8–16 1–2 HDR images BC7 RGB or RGBA 1 byte/px 4–16 1–3 High-quality color maps, Color maps with full alpha DATA TYPES The data in each file can be read in binary no matter if it was readable or unreadable before, viewing in binary will spoil immediatelly everything. This are all of the data types: Byte/Char = 1 Byte, so 8 Bits Word/Short = 2 Bytes, so 16 Bits Dword/Int = 4 Bytes, so 32 Bits ULONG32/Long = 4 Bytes, so 32 Bits ULONG64/Long Long = 8 Bytes, so 64 Bits Float = 4 Bytes, so 32 Bits Double = 8 Bytes, so 64 Bits String = A sequence of 1 Byte characters terminated by with null ("00") Big-Endian vs Little-Endian: While Big-Endian reads data each type normally as you would do it (left to right), Little-Endian does the opposite and reads them in right to left order,this can drastically change how we interpent the values, Big-Endians were mainly used in PS3, Xbox360 and Wii platforms while Little-Endians in Windows, PS4, Xbox One, Nintendo Switch. TRYING TO GET THE TEXTURE So when you finally loaded your texture into the Hex editor (I recommend 3-5 samples at least) I recommend start looking at the header for width and height values, in both Big-Endian and Little-Endain since block compression doesn't care about the Endiannes, so 128x128, 256x256, 512x512, 1024x1024, 2048x2048, 4096x4096... Your next step is to identify the block compression format, eighter DXT (1-5) or BC (6-7) most frequently, that info is also stored in headers. Finally the payload part, this is where your data starts, usually a countinous repeating data, but identyfing the begging byte of that data is not as fast as making previous steps, we can of course just try different setups everytime and see the result, different payload can give completelly different results as well as width and height block compression. Edited December 13, 2025Dec 13 by user3678
December 7, 2025Dec 7 Supporter Please don't publish tutorials until you finish them. Also, Raw Texture Cooker is outdated. It's better to use ImageHeat https://github.com/bartlomiejduda/ImageHeat It supports more pixel formats etc.
December 9, 2025Dec 9 Author Localization On 12/7/2025 at 6:42 AM, ikskoks said: Please don't publish tutorials until you finish them. Also, Raw Texture Cooker is outdated. It's better to use ImageHeat https://github.com/bartlomiejduda/ImageHeat It supports more pixel formats etc. Hello, yes thanks, I am planning to update those tutorials a few times, unfotunatelly didn't had the time to finish them, today I'll try to update all of them to the minimums so later I'll just make some other smaller chenges. I am also looking forward creating my own Reverse Engineering tools like Model Reseacher and Raw texture Cooker as well as something close to QuickBMS but more visually clever.
Create an account or sign in to comment