Guest User

Untitled

a guest
Oct 23rd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. static byte[] DecompressPacket6D(byte[] data)
  2. {
  3. // Move up to the subpacket data we need
  4. int dataPos = 0x10;
  5. int dataEnd;
  6.  
  7. byte[] dec = new byte[8688 * 4];
  8. int decPos = 0;
  9. byte[] tmp = new byte[10000];
  10.  
  11. int decompressedSize = BitConverter.ToInt32(data, dataPos);
  12. dataPos += 4;
  13. int compressedSize = BitConverter.ToInt32(data, dataPos);
  14. dataPos += 4;
  15.  
  16. dataEnd = dataPos + compressedSize;
  17.  
  18. byte u8;
  19. int v5;
  20. uint v6;
  21. int v18;
  22. byte v19;
  23. int v21;
  24. int v22;
  25. int v23;
  26. int v33;
  27. uint v34;
  28. uint v39;
  29. int v40;
  30. uint v41;
  31. int v42;
  32. uint v43;
  33.  
  34. v5 = 4078;
  35. v6 = 0;
  36.  
  37. while (true)
  38. {
  39. while (true)
  40. {
  41. v6 >>= 1;
  42.  
  43. if ((v6 & 0x100) == 0)
  44. {
  45. if (dataPos >= dataEnd)
  46. {
  47. break;
  48. }
  49.  
  50. v6 = (uint)(data[dataPos] | 0xFF00);
  51. dataPos += 1;
  52. }
  53.  
  54. if ((v6 & 1) == 0)
  55. {
  56. break;
  57. }
  58.  
  59. if ((dataPos + 1) > dataEnd)
  60. {
  61. break;
  62. }
  63.  
  64. u8 = data[dataPos];
  65. dataPos += 1;
  66.  
  67. dec[decPos] = u8;
  68. decPos += 1;
  69. tmp[v5] = u8;
  70. v5 = (v5 + 1) & 0xFFF;
  71. }
  72.  
  73. // There is a goto (to outside of the loop) in the decompiled code
  74. // Check it's condition again here so we can exit the outer loop early, too.
  75. if (dataPos >= dataEnd)
  76. {
  77. break;
  78. }
  79.  
  80. if ((dataPos + 2) > dataEnd)
  81. {
  82. break;
  83. }
  84.  
  85. v18 = data[dataPos];
  86. dataPos += 1;
  87. v19 = data[dataPos];
  88. dataPos += 1;
  89.  
  90. v21 = 16 * (v19 & 0xF0) | v18;
  91. v39 = (uint)((v19 & 0xF) + 2);
  92. v41 = 0;
  93.  
  94. if (v39 >= 4)
  95. {
  96. v43 = (uint)((v19 & 0xF) - 2);
  97. v40 = v21;
  98. v42 = v21;
  99. v22 = v21 + 2;
  100. v23 = v21 + 1;
  101.  
  102. do
  103. {
  104. u8 = tmp[v21 & 0xFFF];
  105. dec[decPos] = u8;
  106. decPos += 1;
  107. tmp[v5] = u8;
  108. v5 = ((v5 + 1) & 0xFFF);
  109. v21 += 1;
  110.  
  111. u8 = tmp[v21 & 0xFFF];
  112. dec[decPos] = u8;
  113. decPos += 1;
  114. tmp[v5] = u8;
  115. v5 = ((v5 + 1) & 0xFFF);
  116. v21 += 1;
  117.  
  118. u8 = tmp[v21 & 0xFFF];
  119. dec[decPos] = u8;
  120. decPos += 1;
  121. tmp[v5] = u8;
  122. v5 = ((v5 + 1) & 0xFFF);
  123. v21 += 1;
  124.  
  125. v22 += 3;
  126. v23 += 3;
  127. v41 += 3;
  128. v42 += 3;
  129. } while (v41 <= v43);
  130.  
  131. v21 = v40;
  132. }
  133.  
  134. v33 = (int)(v41 + v21);
  135. v34 = v41;
  136. do
  137. {
  138. u8 = tmp[v33 & 0xFFF];
  139. dec[decPos] = u8;
  140. decPos += 1;
  141. tmp[v5] = u8;
  142. v5 = ((v5 + 1) & 0xFFF);
  143.  
  144. ++v33;
  145. ++v34;
  146. } while (v34 <= v39);
  147. }
  148.  
  149. if (decPos != decompressedSize)
  150. {
  151. Console.WriteLine("Decompressed data size mismatch");
  152. return null;
  153. }
  154.  
  155. Array.Resize(ref dec, decPos);
  156. return dec;
  157. }
Add Comment
Please, Sign In to add comment