public override void Initialize()
        {
            _stubAssembly = StubWorker.GenerateStub();

            _decompressor = CecilHelper.Inject(_stubAssembly.MainModule, Globals.Context.Injections["Decompressor"] as TypeDefinition);
            _loader       = CecilHelper.Inject(_stubAssembly.MainModule, Globals.Context.Injections["Loader"] as TypeDefinition);

            base.Initialize();
        }
        public override void ProcessStep()
        {
            TypeDefinition resolver;

            StubWorker.PopulateStub(ref _stubAssembly, _decompressor, _loader, out resolver);
            StubWorker.StripCoreDependency(ref _stubAssembly, _decompressor, resolver);

            using (var ms = new MemoryStream())
            {
                Globals.Context.TargetAssembly.Write(ms);
                var tmpBuff = QuickLZ.compress(ms.ToArray(), Globals.Context.Options.CompressionLevel);

                _stubAssembly.MainModule.Resources.Add(new EmbeddedResource("X", ManifestResourceAttributes.Public,
                                                                            tmpBuff));

                Globals.Context.UIProvider.VerboseLog(string.Format("[Pack(Main)] -> Packed assembly: {0}", Globals.Context.TargetAssembly.Name.Name));
            }
        }
        public static IMemberDefinition GetInjection(this AssemblyDefinition asmDef, string name)
        {
            IMemberDefinition target =
                asmDef.MainModule.GetAllTypes().First(
                    t => (t.Namespace == "NETPack.Core.Injections" && t.Name == name));

            switch (name)
            {
            case "Decompressor":
                (target as TypeDefinition).Namespace = "N";
                target.Name = "K";

                return(target);

            case "Loader":
                (target as TypeDefinition).Namespace = "npack";
                target.Name = "netpack";

                var main = (target as TypeDefinition).Methods[0];
                StubWorker.SetApartmentState(ref main);

                return(target);

            case "Resolver":
                (target as TypeDefinition).Namespace = "R";
                target.Name = "RS";

                return(target);

            case "Watermark":
                target.Name = "netpackAttrib";

                return(target);
            }

            throw new Exception("Missing injection");
        }