public GeneratedCodeObfuscator(BuildModule module, MemberNameGenerator nameGenerator)
        {
            if (module == null)
            {
                throw new ArgumentNullException("module");
            }

            if (nameGenerator == null)
            {
                throw new ArgumentNullException("nameGenerator");
            }

            _module            = module;
            _nameGenerator     = nameGenerator;
            _mainType          = _module.MainType;
            _mainTypeNamespace = _module.MainTypeNamespace;

            if (_mainType != null)
            {
                _callProxyBuilder = new MainTypeCallProxyBuilder(_module);

                if (_module.IsPrimeModule)
                {
                    _functionPointerBuilder = new MainTypeFunctionPointerBuilder(_module);
                }
            }
        }
        public static void FixExportedTypeNames(BuildAssembly assembly, MemberNameGenerator nameGenerator)
        {
            foreach (var module in assembly.Modules)
            {
                if (!module.Image.IsILOnly)
                {
                    continue;
                }

                var exportedTypes = module.ExportedTypes;
                for (int i = 0; i < exportedTypes.Count; i++)
                {
                    var exportedType = exportedTypes[i].GetOutermostType();

                    var type = exportedType.Resolve(module) as BuildType;
                    if (type == null)
                    {
                        continue;
                    }

                    if (object.ReferenceEquals(type.Assembly, module.Assembly))
                    {
                        continue;
                    }

                    if (!type.Rename)
                    {
                        continue;
                    }

                    type.NewName     = nameGenerator.GenerateUniqueString();
                    type.NameChanged = true;
                }
            }
        }
        public static void Obfuscate(BuildAssembly assembly, MemberNameGenerator nameGenerator)
        {
            foreach (BuildModule module in assembly.Modules)
            {
                if (!module.Image.IsILOnly)
                {
                    continue;
                }

                Obfuscate(module, nameGenerator);
            }
        }
Пример #4
0
        public ExplicitMethodOverrideBuilder(BuildAssembly assembly, MemberNameGenerator nameGenerator)
        {
            if (assembly == null)
            {
                throw new ArgumentNullException("assembly");
            }

            if (nameGenerator == null)
            {
                throw new ArgumentNullException("nameGenerator");
            }

            _assembly      = assembly;
            _nameGenerator = nameGenerator;
            _state         = new BuildState();
        }
        public static void Obfuscate(BuildModule module, MemberNameGenerator nameGenerator)
        {
            var obfuscator = new GeneratedCodeObfuscator(module, nameGenerator);

            obfuscator.Obfuscate();
        }
        private void Load()
        {
            if (CancellationPending)
            {
                return;
            }

            _log = OpenLog();

            if (_log == null)
            {
                _log = new BuildLog();
            }

            _nameGenerator = new MemberNameGenerator(_log, Random);

            // Add assemblies
            foreach (var projectAssembly in _project.Assemblies)
            {
                Assemblies.Add(projectAssembly.FilePath);
            }

            // Load assemblies
            var assemblyLoader = new BuildAssemblyLoader();

            foreach (var projectAssembly in _project.Assemblies)
            {
                var assembly = Assemblies[projectAssembly.FilePath];

                FireTaskStarted(assembly, ProjectBuildTaskType.Load);

                assemblyLoader.Load(assembly, projectAssembly);
                assembly.SaveState();

                if (CancellationPending)
                {
                    return;
                }

                FireTaskCompleted(assembly, ProjectBuildTaskType.Load);
            }

            _obfuscateControlFlow = assemblyLoader.ObfuscateControlFlow;
            _renameMembers        = assemblyLoader.RenameMembers;
            _encryptIL            = assemblyLoader.EncryptIL;
            _obfuscateResources   = assemblyLoader.ObfuscateResources;
            _obfuscateStrings     = assemblyLoader.ObfuscateStrings;
            _removeUnusedMembers  = assemblyLoader.RemoveUnusedMembers;
            _sealTypes            = assemblyLoader.SealTypes;
            _devirtualizeMethods  = assemblyLoader.DevirtualizeMethods;
            _renamedAssemblyNames = assemblyLoader.RenamedAssemblyNames;
            _renameAssemblies     = (_renamedAssemblyNames.Count > 0);

            // Load generated names
            foreach (var assembly in Assemblies)
            {
                _nameGenerator.Load(assembly);
            }

            _nameGenerator.GenerateGlobal();
            MainTypeNamespace = _nameGenerator.MainTypeNamespace;

            Scavenge();
        }
Пример #7
0
        public static void Build(BuildAssembly assembly, MemberNameGenerator nameGenerator)
        {
            var builder = new ExplicitMethodOverrideBuilder(assembly, nameGenerator);

            builder.Build();
        }