新增局部种子生成器
parent
b4a0414f25
commit
62cabf939c
|
@ -17,7 +17,8 @@ namespace Obfuz.EncryptionVM
|
|||
{
|
||||
_vmGenerationSecretKey = vmGenerationSecretKey;
|
||||
byte[] byteGenerationSecretKey = KeyGenerator.GenerateKey(vmGenerationSecretKey, CodeGenerationSecretKeyLength);
|
||||
_random = new RandomWithKey(byteGenerationSecretKey, 0);
|
||||
int[] intGenerationSecretKey = KeyGenerator.ConvertToIntKey(byteGenerationSecretKey);
|
||||
_random = new RandomWithKey(intGenerationSecretKey, 0);
|
||||
}
|
||||
|
||||
private IEncryptionInstruction CreateRandomInstruction(int intSecretKeyLength)
|
||||
|
|
|
@ -38,7 +38,7 @@ namespace Obfuz.ObfusPasses.CallObfus
|
|||
public override void Start()
|
||||
{
|
||||
var ctx = ObfuscationPassContext.Current;
|
||||
_random = ctx.random;
|
||||
_random = ctx.globalRandom;
|
||||
_encryptor = ctx.encryptor;
|
||||
_dynamicProxyObfuscator = new DefaultCallProxyObfuscator(_random, _encryptor, ctx.constFieldAllocator, ctx.moduleEntityManager, _obfuscationLevel);
|
||||
_dynamicProxyPolicy = new ConfigurableObfuscationPolicy(ctx.toObfuscatedAssemblyNames, _configFiles);
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace Obfuz.ObfusPasses.ConstEncrypt
|
|||
{
|
||||
var ctx = ObfuscationPassContext.Current;
|
||||
_dataObfuscatorPolicy = new ConfigurableEncryptPolicy(ctx.toObfuscatedAssemblyNames, _configFiles);
|
||||
_dataObfuscator = new DefaultConstEncryptor(ctx.random, ctx.encryptor, ctx.rvaDataAllocator, ctx.constFieldAllocator, ctx.moduleEntityManager, _encryptionLevel);
|
||||
_dataObfuscator = new DefaultConstEncryptor(ctx.globalRandom, ctx.encryptor, ctx.rvaDataAllocator, ctx.constFieldAllocator, ctx.moduleEntityManager, _encryptionLevel);
|
||||
}
|
||||
|
||||
public override void Stop()
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace Obfuz.ObfusPasses.FieldEncrypt
|
|||
public override void Start()
|
||||
{
|
||||
var ctx = ObfuscationPassContext.Current;
|
||||
_memoryEncryptor = new DefaultFieldEncryptor(ctx.random, ctx.encryptor, ctx.moduleEntityManager, _encryptionLevel);
|
||||
_memoryEncryptor = new DefaultFieldEncryptor(ctx.globalRandom, ctx.encryptor, ctx.moduleEntityManager, _encryptionLevel);
|
||||
_encryptionPolicy = new ConfigurableEncryptPolicy(ctx.toObfuscatedAssemblyNames, _configFiles);
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,9 @@ namespace Obfuz
|
|||
|
||||
public string obfuscatedAssemblyOutputDir;
|
||||
|
||||
public IRandom random;
|
||||
public IRandom globalRandom;
|
||||
public Func<int, IRandom> localScopeRandomCreator;
|
||||
|
||||
public IEncryptor encryptor;
|
||||
public ConstFieldAllocator constFieldAllocator;
|
||||
public RvaDataAllocator rvaDataAllocator;
|
||||
|
|
|
@ -31,7 +31,8 @@ namespace Obfuz
|
|||
|
||||
private readonly Pipeline _pipeline1 = new Pipeline();
|
||||
private readonly Pipeline _pipeline2 = new Pipeline();
|
||||
private readonly byte[] _secret;
|
||||
private readonly byte[] _byteSecret;
|
||||
private readonly int[] _intSecret;
|
||||
private readonly int _randomSeed;
|
||||
private readonly string _encryptionVmGenerationSecret;
|
||||
private readonly int _encryptionVmOpCodeCount;
|
||||
|
@ -41,8 +42,9 @@ namespace Obfuz
|
|||
|
||||
public Obfuscator(ObfuscatorBuilder builder)
|
||||
{
|
||||
_secret = KeyGenerator.GenerateKey(builder.Secret, VirtualMachine.SecretKeyLength);
|
||||
SaveKey(_secret, builder.SecretOutputPath);
|
||||
_byteSecret = KeyGenerator.GenerateKey(builder.Secret, VirtualMachine.SecretKeyLength);
|
||||
_intSecret = KeyGenerator.ConvertToIntKey(_byteSecret);
|
||||
SaveKey(_byteSecret, builder.SecretOutputPath);
|
||||
_randomSeed = builder.RandomSeed;
|
||||
_encryptionVmGenerationSecret = builder.EncryptionVmGenerationSecretKey;
|
||||
_encryptionVmOpCodeCount = builder.EncryptionVmOpCodeCount;
|
||||
|
@ -109,7 +111,7 @@ namespace Obfuz
|
|||
{
|
||||
throw new Exception($"EncryptionVm CodeFile:`{_encryptionVmCodeFile}` not match with encryptionVM settings! Please run `Obfuz/GenerateVm` to update it!");
|
||||
}
|
||||
var vms = new VirtualMachineSimulator(vm, _secret);
|
||||
var vms = new VirtualMachineSimulator(vm, _byteSecret);
|
||||
|
||||
var generatedVmTypes = AppDomain.CurrentDomain.GetAssemblies()
|
||||
.Select(assembly => assembly.GetType("Obfuz.EncryptionVM.GeneratedEncryptionVirtualMachine"))
|
||||
|
@ -124,7 +126,7 @@ namespace Obfuz
|
|||
throw new Exception($"class Obfuz.EncryptionVM.GeneratedEncryptionVirtualMachine found in multiple assemblies! Please retain only one!");
|
||||
}
|
||||
|
||||
var gvmInstance = (IEncryptor)Activator.CreateInstance(generatedVmTypes[0], new object[] { _secret } );
|
||||
var gvmInstance = (IEncryptor)Activator.CreateInstance(generatedVmTypes[0], new object[] { _byteSecret } );
|
||||
|
||||
int testValue = 11223344;
|
||||
for (int i = 0; i < vm.opCodes.Length; i++)
|
||||
|
@ -152,16 +154,12 @@ namespace Obfuz
|
|||
|
||||
private void OnPreObfuscation(Pipeline pipeline)
|
||||
{
|
||||
|
||||
|
||||
AssemblyCache assemblyCache = new AssemblyCache(new PathAssemblyResolver(_assemblySearchDirs.ToArray()));
|
||||
List<ModuleDef> toObfuscatedModules = new List<ModuleDef>();
|
||||
List<ModuleDef> obfuscatedAndNotObfuscatedModules = new List<ModuleDef>();
|
||||
|
||||
LoadAssemblies(assemblyCache, toObfuscatedModules, obfuscatedAndNotObfuscatedModules);
|
||||
|
||||
|
||||
var random = new RandomWithKey(_secret, _randomSeed);
|
||||
var random = new RandomWithKey(_intSecret, _randomSeed);
|
||||
var encryptor = CreateEncryptionVirtualMachine();
|
||||
var moduleEntityManager = new GroupByModuleEntityManager();
|
||||
var rvaDataAllocator = new RvaDataAllocator(random, encryptor, moduleEntityManager);
|
||||
|
@ -176,7 +174,8 @@ namespace Obfuz
|
|||
obfuscatedAssemblyOutputDir = _obfuscatedAssemblyOutputDir,
|
||||
moduleEntityManager = moduleEntityManager,
|
||||
|
||||
random = random,
|
||||
globalRandom = random,
|
||||
localScopeRandomCreator = (seed) => new RandomWithKey(_intSecret, _randomSeed ^ seed),
|
||||
encryptor = encryptor,
|
||||
rvaDataAllocator = rvaDataAllocator,
|
||||
constFieldAllocator = constFieldAllocator,
|
||||
|
|
|
@ -19,9 +19,9 @@ namespace Obfuz.Utils
|
|||
|
||||
private int _seed;
|
||||
|
||||
public RandomWithKey(byte[] key, int seed)
|
||||
public RandomWithKey(int[] key, int seed)
|
||||
{
|
||||
_key = KeyGenerator.ConvertToIntKey(key);
|
||||
_key = key;
|
||||
_seed = seed;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue