mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-23 03:46:10 +00:00
69 lines
2.1 KiB
C#
69 lines
2.1 KiB
C#
|
// Decompiled with JetBrains decompiler
|
|||
|
// Type: SevenZip.Compression.RangeCoder.BitEncoder
|
|||
|
// Assembly: P4CTEMP, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
|
|||
|
// MVID: 7BE4E538-8555-4C2E-974B-99E556F5462C
|
|||
|
// Assembly location: C:\Users\Administrateur\Downloads\Virusshare-00000-msil\Trojan-Ransom.Win32.Gimemo.ayt-624a52079bf1703bcd3bcc9d2d3716b6126fd05655e25289d19142f9aae02eb5.exe
|
|||
|
|
|||
|
using System;
|
|||
|
|
|||
|
namespace SevenZip.Compression.RangeCoder
|
|||
|
{
|
|||
|
internal struct BitEncoder
|
|||
|
{
|
|||
|
public const int kNumBitModelTotalBits = 11;
|
|||
|
public const uint kBitModelTotal = 2048;
|
|||
|
private const int kNumMoveBits = 5;
|
|||
|
private const int kNumMoveReducingBits = 2;
|
|||
|
public const int kNumBitPriceShiftBits = 6;
|
|||
|
private uint Prob;
|
|||
|
private static uint[] ProbPrices = new uint[new IntPtr(512)];
|
|||
|
|
|||
|
public void Init() => this.Prob = 1024U;
|
|||
|
|
|||
|
public void UpdateModel(uint symbol)
|
|||
|
{
|
|||
|
if (symbol == 0U)
|
|||
|
this.Prob += 2048U - this.Prob >> 5;
|
|||
|
else
|
|||
|
this.Prob -= this.Prob >> 5;
|
|||
|
}
|
|||
|
|
|||
|
public void Encode(Encoder encoder, uint symbol)
|
|||
|
{
|
|||
|
uint num = (encoder.Range >> 11) * this.Prob;
|
|||
|
if (symbol == 0U)
|
|||
|
{
|
|||
|
encoder.Range = num;
|
|||
|
this.Prob += 2048U - this.Prob >> 5;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
encoder.Low += (ulong) num;
|
|||
|
encoder.Range -= num;
|
|||
|
this.Prob -= this.Prob >> 5;
|
|||
|
}
|
|||
|
if (encoder.Range >= 16777216U)
|
|||
|
return;
|
|||
|
encoder.Range <<= 8;
|
|||
|
encoder.ShiftLow();
|
|||
|
}
|
|||
|
|
|||
|
static BitEncoder()
|
|||
|
{
|
|||
|
for (int index1 = 8; index1 >= 0; --index1)
|
|||
|
{
|
|||
|
uint num1 = (uint) (1 << 9 - index1 - 1);
|
|||
|
uint num2 = (uint) (1 << 9 - index1);
|
|||
|
for (uint index2 = num1; index2 < num2; ++index2)
|
|||
|
BitEncoder.ProbPrices[(IntPtr) index2] = (uint) (index1 << 6) + ((uint) ((int) num2 - (int) index2 << 6) >> 9 - index1 - 1);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public uint GetPrice(uint symbol) => BitEncoder.ProbPrices[(((long) (this.Prob - symbol) ^ (long) -(int) symbol) & 2047L) >> 2];
|
|||
|
|
|||
|
public uint GetPrice0() => BitEncoder.ProbPrices[(IntPtr) (this.Prob >> 2)];
|
|||
|
|
|||
|
public uint GetPrice1() => BitEncoder.ProbPrices[(IntPtr) (2048U - this.Prob >> 2)];
|
|||
|
}
|
|||
|
}
|