public override void DeobfuscateBegin() { base.DeobfuscateBegin(); AddTypeToBeRemoved(killType, "KILL type"); mainType.Initialize(); foreach (var initMethod in mainType.OtherInitMethods) { AddCctorInitCallToBeRemoved(initMethod); AddCtorInitCallToBeRemoved(initMethod); } if (Operations.DecryptStrings != OpDecryptString.None) { stringDecrypter.Initialize(); staticStringInliner.Add(stringDecrypter.DecryptMethod, (method, gim, args) => { return(stringDecrypter.Decrypt((int)args[0])); }); DeobfuscatedFile.StringDecryptersAdded(); AddModuleCctorInitCallToBeRemoved(stringDecrypter.InitMethod); AddCallToBeRemoved(mainType.GetInitStringDecrypterMethod(stringDecrypter.InitMethod), stringDecrypter.InitMethod); } assemblyResolver = new AssemblyResolver(module); assemblyResolver.Initialize(); DumpEmbeddedAssemblies(); RemoveTamperDetection(); proxyCallFixer.Initialize(); proxyCallFixer.Find(); resourceDecrypter = new ResourceDecrypter(module); resourceDecrypter.Initialize(); resourceDecrypter.Decrypt(); if (resourceDecrypter.CanRemoveTypes) { AddTypeToBeRemoved(resourceDecrypter.ResourceFlagsType, "Obfuscator ResourceFlags type"); AddTypeToBeRemoved(resourceDecrypter.ResType, "Obfuscator Res type"); AddTypeToBeRemoved(resourceDecrypter.ResourceEnumeratorType, "Obfuscator ResourceEnumerator type"); AddTypeToBeRemoved(resourceDecrypter.EncryptedResourceReaderType, "Obfuscator EncryptedResourceReader type"); AddTypeToBeRemoved(resourceDecrypter.EncryptedResourceSetType, "Obfuscator EncryptedResourceSet type"); AddTypeToBeRemoved(resourceDecrypter.EncryptedResourceStreamType, "Obfuscator EncryptedResourceStream type"); } }