Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static byte[] DecompressPacket6D(byte[] data)
- {
- // Move up to the subpacket data we need
- int dataPos = 0x10;
- int dataEnd;
- byte[] dec = new byte[8688 * 4];
- int decPos = 0;
- byte[] tmp = new byte[10000];
- int decompressedSize = BitConverter.ToInt32(data, dataPos);
- dataPos += 4;
- int compressedSize = BitConverter.ToInt32(data, dataPos);
- dataPos += 4;
- dataEnd = dataPos + compressedSize;
- byte u8;
- int v5;
- uint v6;
- int v18;
- byte v19;
- int v21;
- int v22;
- int v23;
- int v33;
- uint v34;
- uint v39;
- int v40;
- uint v41;
- int v42;
- uint v43;
- v5 = 4078;
- v6 = 0;
- while (true)
- {
- while (true)
- {
- v6 >>= 1;
- if ((v6 & 0x100) == 0)
- {
- if (dataPos >= dataEnd)
- {
- break;
- }
- v6 = (uint)(data[dataPos] | 0xFF00);
- dataPos += 1;
- }
- if ((v6 & 1) == 0)
- {
- break;
- }
- if ((dataPos + 1) > dataEnd)
- {
- break;
- }
- u8 = data[dataPos];
- dataPos += 1;
- dec[decPos] = u8;
- decPos += 1;
- tmp[v5] = u8;
- v5 = (v5 + 1) & 0xFFF;
- }
- // There is a goto (to outside of the loop) in the decompiled code
- // Check it's condition again here so we can exit the outer loop early, too.
- if (dataPos >= dataEnd)
- {
- break;
- }
- if ((dataPos + 2) > dataEnd)
- {
- break;
- }
- v18 = data[dataPos];
- dataPos += 1;
- v19 = data[dataPos];
- dataPos += 1;
- v21 = 16 * (v19 & 0xF0) | v18;
- v39 = (uint)((v19 & 0xF) + 2);
- v41 = 0;
- if (v39 >= 4)
- {
- v43 = (uint)((v19 & 0xF) - 2);
- v40 = v21;
- v42 = v21;
- v22 = v21 + 2;
- v23 = v21 + 1;
- do
- {
- u8 = tmp[v21 & 0xFFF];
- dec[decPos] = u8;
- decPos += 1;
- tmp[v5] = u8;
- v5 = ((v5 + 1) & 0xFFF);
- v21 += 1;
- u8 = tmp[v21 & 0xFFF];
- dec[decPos] = u8;
- decPos += 1;
- tmp[v5] = u8;
- v5 = ((v5 + 1) & 0xFFF);
- v21 += 1;
- u8 = tmp[v21 & 0xFFF];
- dec[decPos] = u8;
- decPos += 1;
- tmp[v5] = u8;
- v5 = ((v5 + 1) & 0xFFF);
- v21 += 1;
- v22 += 3;
- v23 += 3;
- v41 += 3;
- v42 += 3;
- } while (v41 <= v43);
- v21 = v40;
- }
- v33 = (int)(v41 + v21);
- v34 = v41;
- do
- {
- u8 = tmp[v33 & 0xFFF];
- dec[decPos] = u8;
- decPos += 1;
- tmp[v5] = u8;
- v5 = ((v5 + 1) & 0xFFF);
- ++v33;
- ++v34;
- } while (v34 <= v39);
- }
- if (decPos != decompressedSize)
- {
- Console.WriteLine("Decompressed data size mismatch");
- return null;
- }
- Array.Resize(ref dec, decPos);
- return dec;
- }
Add Comment
Please, Sign In to add comment