这是什么压缩算法?

时间:2019-03-27 11:03:25

标签: c# compression reverse-engineering

这是我通过逆向工程解码的一种减压算法。

但是我不擅长研究压缩算法,所以我不知道压缩算法的名称或如何压缩。

tbl是一个带符号的32位整数数组,大小为256。它被硬编码在可执行文件中。该数组包含位置偏移。

Here是数组的转储(big-endian,基于文本的十六进制转储),here是C ++格式。


  1. 如果可能,您能告诉我如何压缩方法吗?
  2. 如何仅使用解压缩方法再次知道压缩方法?还是应该学习?

int srcCnt = 0;
int destCnt = 0;
decomIMP[destCnt++] = imp[srcCnt++]; 
while(true)
{
    try
    { 
       byte val = imp[srcCnt++];

       if (val == 0x10)
       {
           int count = imp[srcCnt++] + 3;
           byte value = decomIMP[destCnt - 1];
           for(int j = 0; j<count; j++)
           {
                decomIMP[destCnt++] = value;
           }
       }
       else if(val >= 0x80)
       {
           int val1 = imp[srcCnt++];
           int val2 = (val >> 4) & 0x7;
           int val3 = (val & 0x0f) + 3;
           int val4 = (int)TBL[val1] + destCnt;
           for (int j = 0; j < val3; j++)
           {
              byte value = decomIMP[val4++];
              decomIMP[destCnt++] = value;
           }
           for(int k =0; k < val2; k++)
           {
              byte value = imp[srcCnt++];
              decomIMP[destCnt++] = value;
           }
       }
       else if (val >= 0x20 && val < 0x80)
       {
           int val1 = val & 0xf;
           int val2 = (val >> 4) + 1;
           int val3 = (int)TBL[val1] + destCnt; 
           //infact, destCnt - tbl[val].. content of tbl is minus value

           for (int j = 0; j < val2; j++)
           {
              byte value = decomIMP[val3++];
              decomIMP[destCnt++] = value;
           }
       }
       else if (val < 0x10)
       {
           for(int j=0; j<=val; j++)
           {
                byte value = imp[srcCnt++];
                decomIMP[destCnt++] = value;
           }
       }
   }
   catch(IndexOutOfRangeException)
   {
      break;
   }
}

0 个答案:

没有答案