修复 VirtualMachineCodeGenerator生成的Encrypt和Decrypt代码的bug
parent
b216ed1eb3
commit
2fec77eeb5
|
@ -152,19 +152,20 @@ namespace Obfuz.EncryptionVM
|
||||||
|
|
||||||
public override int Encrypt(int value, int opts, int salt)
|
public override int Encrypt(int value, int opts, int salt)
|
||||||
{
|
{
|
||||||
int revertOps = 0;
|
uint uopts = (uint)opts;
|
||||||
while (opts > 0)
|
uint revertOps = 0;
|
||||||
|
while (uopts != 0)
|
||||||
{
|
{
|
||||||
int opCode = opts & kOpCodeMask;
|
uint opCode = uopts & kOpCodeMask;
|
||||||
revertOps <<= kOpCodeBits;
|
revertOps <<= kOpCodeBits;
|
||||||
revertOps |= opCode;
|
revertOps |= opCode;
|
||||||
opts >>= kOpCodeBits;
|
uopts >>= kOpCodeBits;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (revertOps > 0)
|
while (revertOps != 0)
|
||||||
{
|
{
|
||||||
int opCode = revertOps & kOpCodeMask;
|
uint opCode = revertOps & kOpCodeMask;
|
||||||
value = ExecuteEncrypt(value, opCode, salt);
|
value = ExecuteEncrypt(value, (int)opCode, salt);
|
||||||
revertOps >>= kOpCodeBits;
|
revertOps >>= kOpCodeBits;
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
|
@ -172,11 +173,12 @@ namespace Obfuz.EncryptionVM
|
||||||
|
|
||||||
public override int Decrypt(int value, int opts, int salt)
|
public override int Decrypt(int value, int opts, int salt)
|
||||||
{
|
{
|
||||||
while (opts > 0)
|
uint uopts = (uint)opts;
|
||||||
|
while (uopts != 0)
|
||||||
{
|
{
|
||||||
int opCode = opts & kOpCodeMask;
|
uint opCode = uopts & kOpCodeMask;
|
||||||
value = ExecuteDecrypt(value, opCode, salt);
|
value = ExecuteDecrypt(value, (int)opCode, salt);
|
||||||
opts >>= kOpCodeBits;
|
uopts >>= kOpCodeBits;
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ namespace Obfuz.EncryptionVM
|
||||||
private List<uint> DecodeOps(uint ops)
|
private List<uint> DecodeOps(uint ops)
|
||||||
{
|
{
|
||||||
var codes = new List<uint>();
|
var codes = new List<uint>();
|
||||||
while (ops > 0)
|
while (ops != 0)
|
||||||
{
|
{
|
||||||
uint code = ops % (uint)_opCodes.Length;
|
uint code = ops % (uint)_opCodes.Length;
|
||||||
codes.Add(code);
|
codes.Add(code);
|
||||||
|
|
|
@ -133,14 +133,17 @@ namespace Obfuz
|
||||||
for (int i = 0; i < vm.opCodes.Length; i++)
|
for (int i = 0; i < vm.opCodes.Length; i++)
|
||||||
{
|
{
|
||||||
int ops = i * vm.opCodes.Length + i;
|
int ops = i * vm.opCodes.Length + i;
|
||||||
int encryptedValueOfVms = vms.Encrypt(testValue, ops, i);
|
//int salt = i;
|
||||||
int decryptedValueOfVms = vms.Decrypt(encryptedValueOfVms, ops, i);
|
//int ops = -1135538782;
|
||||||
|
int salt = -879409147;
|
||||||
|
int encryptedValueOfVms = vms.Encrypt(testValue, ops, salt);
|
||||||
|
int decryptedValueOfVms = vms.Decrypt(encryptedValueOfVms, ops, salt);
|
||||||
if (decryptedValueOfVms != testValue)
|
if (decryptedValueOfVms != testValue)
|
||||||
{
|
{
|
||||||
throw new Exception($"VirtualMachineSimulator decrypt failed! opCode:{i}, originalValue:{testValue} decryptedValue:{decryptedValueOfVms}");
|
throw new Exception($"VirtualMachineSimulator decrypt failed! opCode:{i}, originalValue:{testValue} decryptedValue:{decryptedValueOfVms}");
|
||||||
}
|
}
|
||||||
int encryptedValueOfGvm = gvmInstance.Encrypt(testValue, ops, i);
|
int encryptedValueOfGvm = gvmInstance.Encrypt(testValue, ops, salt);
|
||||||
int decryptedValueOfGvm = gvmInstance.Decrypt(encryptedValueOfGvm, ops, i);
|
int decryptedValueOfGvm = gvmInstance.Decrypt(encryptedValueOfGvm, ops, salt);
|
||||||
if (encryptedValueOfGvm != encryptedValueOfVms)
|
if (encryptedValueOfGvm != encryptedValueOfVms)
|
||||||
{
|
{
|
||||||
throw new Exception($"encryptedValue not match! opCode:{i}, originalValue:{testValue} encryptedValue VirtualMachineSimulator:{encryptedValueOfVms} GeneratedEncryptionVirtualMachine:{encryptedValueOfGvm}");
|
throw new Exception($"encryptedValue not match! opCode:{i}, originalValue:{testValue} encryptedValue VirtualMachineSimulator:{encryptedValueOfVms} GeneratedEncryptionVirtualMachine:{encryptedValueOfGvm}");
|
||||||
|
@ -150,14 +153,14 @@ namespace Obfuz
|
||||||
throw new Exception($"GeneratedEncryptionVirtualMachine decrypt failed! opCode:{i}, originalValue:{testValue} decryptedValue:{decryptedValueOfGvm}");
|
throw new Exception($"GeneratedEncryptionVirtualMachine decrypt failed! opCode:{i}, originalValue:{testValue} decryptedValue:{decryptedValueOfGvm}");
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] encryptedStrOfVms = vms.Encrypt(testString, ops, i);
|
byte[] encryptedStrOfVms = vms.Encrypt(testString, ops, salt);
|
||||||
string descryptedStrOfVms = vms.DecryptString(encryptedStrOfVms, 0, encryptedStrOfVms.Length, ops, i);
|
string descryptedStrOfVms = vms.DecryptString(encryptedStrOfVms, 0, encryptedStrOfVms.Length, ops, salt);
|
||||||
if (descryptedStrOfVms != testString)
|
if (descryptedStrOfVms != testString)
|
||||||
{
|
{
|
||||||
throw new Exception($"VirtualMachineSimulator decrypt string failed! opCode:{i}, originalValue:{testString} decryptedValue:{descryptedStrOfVms}");
|
throw new Exception($"VirtualMachineSimulator decrypt string failed! opCode:{i}, originalValue:{testString} decryptedValue:{descryptedStrOfVms}");
|
||||||
}
|
}
|
||||||
byte[] encryptedStrOfGvm = gvmInstance.Encrypt(testString, ops, i);
|
byte[] encryptedStrOfGvm = gvmInstance.Encrypt(testString, ops, salt);
|
||||||
string descryptedStrOfGvm = gvmInstance.DecryptString(encryptedStrOfGvm, 0, encryptedStrOfGvm.Length, ops, i);
|
string descryptedStrOfGvm = gvmInstance.DecryptString(encryptedStrOfGvm, 0, encryptedStrOfGvm.Length, ops, salt);
|
||||||
if (!encryptedStrOfGvm.SequenceEqual(encryptedStrOfVms))
|
if (!encryptedStrOfGvm.SequenceEqual(encryptedStrOfVms))
|
||||||
{
|
{
|
||||||
throw new Exception($"encryptedValue not match! opCode:{i}, originalValue:{testString} encryptedValue VirtualMachineSimulator:{encryptedStrOfVms} GeneratedEncryptionVirtualMachine:{encryptedStrOfGvm}");
|
throw new Exception($"encryptedValue not match! opCode:{i}, originalValue:{testString} encryptedValue VirtualMachineSimulator:{encryptedStrOfVms} GeneratedEncryptionVirtualMachine:{encryptedStrOfGvm}");
|
||||||
|
|
Loading…
Reference in New Issue