public override void Create(DecompileContext ctx)
 {
     using (var stream = File.Create(Filename)) {
         var data = embeddedResource.GetResourceData();
         stream.Write(data, 0, data.Length);
     }
 }
Пример #2
0
        private static string GetLoadStringFromCall(MethodReference mr)
        {
            MethodDefinition md = mr.Resolve();

            if ((md == null) || !IsResource(md))
            {
                return(null);
            }

            string resourceName = GetResourceNameFromResourceGetter(md);

            if (resourceName == null)
            {
                return(null);
            }

            AssemblyDefinition ad = md.GetAssembly();
            string             resourceClassName = md.DeclaringType.GetFullName() + ".resources";
            EmbeddedResource   resource          = GetEmbeddedResource(ad, resourceClassName);

            if (resource == null)
            {
                return(null);
            }

            using (MemoryStream ms = new MemoryStream(resource.GetResourceData()))
                using (ResourceSet resourceSet = new ResourceSet(ms)) {
                    return(resourceSet.GetString(resourceName));
                }
        }
Пример #3
0
        void VerifyResources(AssemblyDefinition original, AssemblyDefinition linked)
        {
            var expectedResourceNames = original.MainModule.AllDefinedTypes()
                                        .SelectMany(t => GetCustomAttributeCtorValues <string> (t, nameof(KeptResourceAttribute)))
                                        .ToList();

            foreach (var resource in linked.MainModule.Resources)
            {
                if (!expectedResourceNames.Remove(resource.Name))
                {
                    Assert.True(false, $"Resource '{resource.Name}' should be removed.");
                }

                EmbeddedResource embeddedResource = (EmbeddedResource)resource;

                var expectedResource = (EmbeddedResource)original.MainModule.Resources.First(r => r.Name == resource.Name);

                embeddedResource.GetResourceData().Should().BeEquivalentTo(expectedResource.GetResourceData(), $"Resource '{resource.Name}' data doesn't match.");
            }

            if (expectedResourceNames.Count > 0)
            {
                Assert.True(false, $"Resource '{expectedResourceNames.First ()}' should be kept.");
            }
        }
Пример #4
0
        public void initialize(ISimpleDeobfuscator simpleDeobfuscator, IDeobfuscator deob)
        {
            if (resolverType == null)
            {
                return;
            }

            encryptedResource = BabelUtils.findEmbeddedResource(module, resolverType, simpleDeobfuscator, deob);
            if (encryptedResource == null)
            {
                Log.w("Could not find embedded assemblies resource");
                return;
            }

            var decrypted     = resourceDecrypter.decrypt(encryptedResource.GetResourceData());
            var reader        = new BinaryReader(new MemoryStream(decrypted));
            int numAssemblies = reader.ReadInt32();

            embeddedAssemblyInfos = new EmbeddedAssemblyInfo[numAssemblies];
            for (int i = 0; i < numAssemblies; i++)
            {
                string name = reader.ReadString();
                var    data = reader.ReadBytes(reader.ReadInt32());
                var    mod  = ModuleDefinition.ReadModule(new MemoryStream(data));
                embeddedAssemblyInfos[i] = new EmbeddedAssemblyInfo(name, DeobUtils.getExtension(mod.Kind), data);
            }
        }
Пример #5
0
        static Gdk.Pixbuf GetEmbeddedIcon(AssemblyDefinition asm, string iconname)
        {
            Gdk.Pixbuf icon = null;
            if (iconname != null && iconname.Length > 0)
            {
                try
                {
                    // Using the pixbuf resource constructor generates a gdk warning.
                    EmbeddedResource res    = GetResource(asm, iconname);
                    Gdk.PixbufLoader loader = new Gdk.PixbufLoader(res.GetResourceData());
                    icon = loader.Pixbuf;
                }
                catch
                {
                    // Ignore
                }
            }

            if (icon == null)
            {
                ClassDescriptor cc = Registry.LookupClassByName("Gtk.Bin");
                icon = cc.Icon;
            }
            return(icon);
        }
Пример #6
0
 public void initialize(ModuleDefinition module, EmbeddedResource resource)
 {
     key = resource.GetResourceData();
     if (key.Length != 0x100)
     {
         throw new ApplicationException(string.Format("Unknown key length: {0}", key.Length));
     }
 }
Пример #7
0
        byte[] Decrypt_v14_r55802()
        {
            var reader   = new BinaryReader(new MemoryStream(Decompress(resource.GetResourceData())));
            var encypted = reader.ReadBytes(reader.ReadInt32());

            if ((encypted.Length & 1) != 0)
            {
                throw new ApplicationException("Invalid resource data length");
            }
            var decrypted = new byte[encypted.Length / 2];

            for (int i = 0; i < decrypted.Length; i++)
            {
                decrypted[i] = (byte)((encypted[i * 2 + 1] ^ key0) * key1 + (encypted[i * 2] ^ key0));
            }
            reader = new BinaryReader(new MemoryStream(Decompress(decrypted)));
            return(reader.ReadBytes(reader.ReadInt32()));
        }
Пример #8
0
        public byte[] decrypt()
        {
            if (encryptedDataResource == null || key == null || iv == null)
            {
                throw new ApplicationException("Can't decrypt resource");
            }

            return(DeobUtils.aesDecrypt(encryptedDataResource.GetResourceData(), key, iv));
        }
    public static byte[] FixedGetResourceData(this EmbeddedResource resource)
    {
        // There's a bug in Mono.Cecil so when you access a resources data
        // the stream is not reset after use.
        var data = resource.GetResourceData();

        resource.GetResourceStream().Position = 0;
        return(data);
    }
Пример #10
0
            public void initialize(ModuleDefinition module, EmbeddedResource resource)
            {
                var decrypted = new ResourceDecrypter(module).decrypt(resource.GetResourceData());
                var reader    = new BinaryReader(new MemoryStream(decrypted));

                while (reader.BaseStream.Position < reader.BaseStream.Length)
                {
                    offsetToString[(int)reader.BaseStream.Position] = reader.ReadString();
                }
            }
Пример #11
0
 static string getAssemblyName(EmbeddedResource resource)
 {
     try {
         var resourceModule = ModuleDefinition.ReadModule(new MemoryStream(resource.GetResourceData()));
         return(resourceModule.Assembly.Name.FullName);
     }
     catch {
         return(string.Format("unknown_name_{0}", unknownNameCounter++));
     }
 }
Пример #12
0
        public byte[] decrypt(EmbeddedResource resource)
        {
            if (!CanDecrypt)
            {
                throw new ApplicationException("Can't decrypt resources");
            }
            var encryptedData = resource.GetResourceData();

            return(decrypt(encryptedData));
        }
Пример #13
0
        public override string GetStringContents()
        {
            EmbeddedResource er = r as EmbeddedResource;

            if (er != null)
            {
                return(GetStringContents(new MemoryStream(er.GetResourceData())));
            }
            return(null);
        }
Пример #14
0
        public override bool View(DecompilerTextView textView)
        {
            EmbeddedResource er = r as EmbeddedResource;

            if (er != null)
            {
                return(View(this, textView, new MemoryStream(er.GetResourceData()), er.Name));
            }
            return(false);
        }
Пример #15
0
        protected static byte[] decryptResourceV41SL(EmbeddedResource resource)
        {
            var  data = resource.GetResourceData();
            byte k    = data[0];

            for (int i = 0; i < data.Length - 1; i++)
            {
                data[i + 1] ^= (byte)((k << (i & 5)) + i);
            }
            return(inflateIfNeeded(data, 1, data.Length - 1));
        }
Пример #16
0
        byte[] decryptResourceAssembly()
        {
            var decrypted    = new ResourceDecrypter(module).decrypt(encryptedResource.GetResourceData());
            var reader       = new BinaryReader(new MemoryStream(decrypted));
            int numResources = reader.ReadInt32();

            for (int i = 0; i < numResources; i++)
            {
                reader.ReadString();
            }
            return(reader.ReadBytes((int)(reader.BaseStream.Length - reader.BaseStream.Position)));
        }
Пример #17
0
        public void initialize(ISimpleDeobfuscator simpleDeobfuscator, IDeobfuscator deob)
        {
            if (methodsDecrypter == null)
            {
                return;
            }

            encryptedResource = BabelUtils.findEmbeddedResource(module, methodsDecrypter, simpleDeobfuscator, deob);
            if (encryptedResource != null)
            {
                addImageReader("", resourceDecrypter.decrypt(encryptedResource.GetResourceData()));
            }
        }
Пример #18
0
            public byte[] Decrypt(EmbeddedResource resource)
            {
                var encrypted = resource.GetResourceData();
                var decrypted = new byte[encrypted.Length];

                uint sum = 0;

                for (int i = 0; i < encrypted.Length; i += 4)
                {
                    sum = CalculateMagic(sum + ReadUInt32(key, i % key.Length));
                    WriteUInt32(decrypted, i, sum ^ ReadUInt32(encrypted, i));
                }

                return(decrypted);
            }
Пример #19
0
        public void initialize(ISimpleDeobfuscator simpleDeobfuscator, IDeobfuscator deob)
        {
            if (methodsDecrypter == null)
            {
                return;
            }

            encryptedResource = BabelUtils.findEmbeddedResource(module, methodsDecrypter, simpleDeobfuscator, deob);
            if (encryptedResource == null)
            {
                Log.w("Could not find encrypted methods resource");
                return;
            }

            addImageReader("", new ResourceDecrypter(module).decrypt(encryptedResource.GetResourceData()));
        }
Пример #20
0
        public void initialize(ISimpleDeobfuscator simpleDeobfuscator, IDeobfuscator deob)
        {
            if (decrypterType == null)
            {
                return;
            }

            encryptedResource = BabelUtils.findEmbeddedResource(module, decrypterType, simpleDeobfuscator, deob);
            if (encryptedResource == null)
            {
                Log.w("Could not find encrypted constants resource");
                return;
            }

            var decrypted = resourceDecrypter.decrypt(encryptedResource.GetResourceData());
            var reader    = new BinaryReader(new MemoryStream(decrypted));
            int count;

            count         = reader.ReadInt32();
            decryptedInts = new int[count];
            while (count-- > 0)
            {
                decryptedInts[count] = reader.ReadInt32();
            }

            count          = reader.ReadInt32();
            decryptedLongs = new long[count];
            while (count-- > 0)
            {
                decryptedLongs[count] = reader.ReadInt64();
            }

            count           = reader.ReadInt32();
            decryptedFloats = new float[count];
            while (count-- > 0)
            {
                decryptedFloats[count] = reader.ReadSingle();
            }

            count            = reader.ReadInt32();
            decryptedDoubles = new double[count];
            while (count-- > 0)
            {
                decryptedDoubles[count] = reader.ReadDouble();
            }
        }
Пример #21
0
        XmlDocument GetGuiDoc(AssemblyDefinition adef)
        {
            XmlDocument doc = null;

            try {
                EmbeddedResource res = GetResource(adef, "gui.stetic");
                if (res != null)
                {
                    MemoryStream stream = new MemoryStream(res.GetResourceData());
                    doc = new XmlDocument();
                    using (stream)
                        doc.Load(stream);
                }
            } catch {
                doc = null;
            }

            return(doc);
        }
Пример #22
0
        public void Initialize()
        {
            if (installMethod == null)
            {
                return;
            }

            if (!FindKeys())
            {
                throw new ApplicationException("Could not find keys");
            }

            if ((resource = FindResource(key0)) == null)
            {
                throw new ApplicationException("Could not find resource");
            }
            constants = DecryptResource(resource.GetResourceData());

            FindDecrypters();
        }
Пример #23
0
Файл: View.cs Проект: ynkbt/moon
    public override Widget GetView()
    {
        if (box != null)
        {
            return(box);
        }

        // Create ui
        box        = new VBox(false, 10);
        store      = new ListStore(typeof(string), typeof(string), typeof(object));
        tree       = new TreeView();
        tree.Model = store;
        tree.AppendColumn("Name", new CellRendererText(), "text", 0);
        tree.AppendColumn("Type", new CellRendererText(), "text", 1);
        tree.HeadersVisible = true;
        tree.CursorChanged += HandleCursorChanged;
        scrolled_tree       = new ScrolledWindow();
        scrolled_tree.Add(tree);
        box.PackStart(scrolled_tree, true, true, 0);

        // Load resources
        EmbeddedResource embed = resource as EmbeddedResource;

        if (embed != null)
        {
            using (MemoryStream stream = new MemoryStream(embed.GetResourceData())) {
                using (ResourceReader reader = new ResourceReader(stream)) {
                    foreach (DictionaryEntry obj in reader)
                    {
                        store.AppendValues(obj.Key.ToString(), obj.Value.GetType().FullName, obj.Value);
                    }
                }
            }
        }
        else
        {
            Console.WriteLine("Don't know how to handle a resource whose type is {0}", resource.GetType().FullName);
        }

        return(box);
    }
        /**<summary>Unpacks the localization files from terraria.</summary>*/
        public static void Unpack()
        {
            // Backup the file first
            if (!File.Exists(BackupPath))
            {
                File.Copy(ExePath, BackupPath, false);
            }

            var AsmDefinition = AssemblyDefinition.ReadAssembly(ExePath);
            var ModDefinition = AsmDefinition.MainModule;

            foreach (Resource r in ModDefinition.Resources)
            {
                EmbeddedResource er = r as EmbeddedResource;
                if (er != null && er.Name.StartsWith("Terraria.Localization.Content.") && er.Name.EndsWith(".json"))
                {
                    string path = Path.Combine(OutputDirectory, er.Name);
                    File.WriteAllBytes(path, er.GetResourceData());
                }
            }
        }
Пример #25
0
        void findEmbeddedAssemblies()
        {
            var data = bundleData.GetResourceData();

            var doc = new XmlDocument();

            doc.Load(XmlReader.Create(bundleXmlFile.GetResourceStream()));
            var manifest = doc.DocumentElement;

            if (manifest.Name.ToLowerInvariant() != "manifest")
            {
                Log.w("Could not find Manifest element");
                return;
            }
            foreach (var tmp in manifest.ChildNodes)
            {
                var assemblyElem = tmp as XmlElement;
                if (assemblyElem == null)
                {
                    continue;
                }

                if (assemblyElem.Name.ToLowerInvariant() != "assembly")
                {
                    Log.w("Unknown element: {0}", assemblyElem.Name);
                    continue;
                }

                int offset = getAttributeValueInt32(assemblyElem, "offset");
                if (offset < 0)
                {
                    Log.w("Could not find offset attribute");
                    continue;
                }

                var assemblyData = DeobUtils.inflate(data, offset, data.Length - offset, true);
                var mod          = ModuleDefinition.ReadModule(new MemoryStream(assemblyData));
                infos.Add(new AssemblyInfo(mod.Assembly.FullName, DeobUtils.getExtension(mod.Kind), assemblyData));
            }
        }
        public Stream CreateReadStream()
        {
            var _data = data;

            if (_data == null)
            {
                // Lock parent's stream and read data.
                lock (fileProvider.m_streamlock)
                {
                    // Read data
                    if (_data == null)
                    {
                        _data = data = resource.GetResourceData();
                    }
                }
            }
            // Wrap into stream.
            MemoryStream ms     = new MemoryStream(_data);
            IDisposable  belate = ((IBelatedDisposeList)fileProvider).Belate();

            return(new StreamHandle(ms, belate));
        }
Пример #27
0
        public void Initialize()
        {
            if (decryptMethod == null)
            {
                return;
            }

            resource = FindResource(decryptMethod);
            if (resource == null)
            {
                throw new ApplicationException("Could not find encrypted strings resource");
            }
            reader = MemoryImageStream.Create(DeobUtils.Inflate(resource.GetResourceData(), true));

            switch (version)
            {
            case ConfuserVersion.v10_r42915:
            case ConfuserVersion.v13_r55604_safe:
                decrypter = new Decrypter_v10_r42915(this);
                break;

            case ConfuserVersion.v10_r48832:
                decrypter = new Decrypter_v10_r48832(this);
                break;

            case ConfuserVersion.v11_r49299:
            case ConfuserVersion.v14_r58802_dynamic:
                decrypter = new Decrypter_v11_r49299(this);
                break;

            case ConfuserVersion.v14_r58802_safe:
                decrypter = new Decrypter_v10_r42915(this, (int)key1);
                break;

            default:
                throw new ApplicationException("Invalid version");
            }
        }
Пример #28
0
        byte[] Decrypt(EmbeddedResource resource)
        {
            var data = resource.GetResourceData();

            switch (version)
            {
            case ConfuserVersion.v10_r42915: return(Decrypt_v10_r42915(data));

            case ConfuserVersion.v10_r48717: return(Decrypt_v10_r42915(data));

            case ConfuserVersion.v14_r57778: return(Decrypt_v10_r42915(data));

            case ConfuserVersion.v14_r58564: return(Decrypt_v14_r58564(data));

            case ConfuserVersion.v14_r58802: return(Decrypt_v14_r58564(data));

            case ConfuserVersion.v14_r58852: return(Decrypt_v14_r58852(data));

            case ConfuserVersion.v15_r60785: return(Decrypt_v15_r60785(data));

            case ConfuserVersion.v17_r73404: return(Decrypt_v17_r73404(data));

            case ConfuserVersion.v17_r73477: return(Decrypt_v17_r73404(data));

            case ConfuserVersion.v17_r73566: return(Decrypt_v17_r73404(data));

            case ConfuserVersion.v17_r75076: return(Decrypt_v17_r75076(data));

            case ConfuserVersion.v18_r75184: return(Decrypt_v17_r75076(data));

            case ConfuserVersion.v18_r75367: return(Decrypt_v17_r75076(data));

            case ConfuserVersion.v19_r77172: return(Decrypt_v17_r75076(data));

            default: throw new ApplicationException("Unknown version");
            }
        }
Пример #29
0
        byte[] decryptResourceAssembly()
        {
            var decrypted = resourceDecrypter.decrypt(encryptedResource.GetResourceData());
            var reader    = new BinaryReader(new MemoryStream(decrypted));

            int numResources = reader.ReadInt32() ^ xorKey1;

            for (int i = 0; i < numResources; i++)
            {
                reader.ReadString();
            }

            int len;

            if (hasXorKeys)
            {
                len = reader.ReadInt32() ^ xorKey2;
            }
            else
            {
                len = (int)(reader.BaseStream.Length - reader.BaseStream.Position);
            }
            return(reader.ReadBytes(len));
        }
Пример #30
0
 public byte[] Decrypt(EmbeddedResource resource)
 {
     return(DeobUtils.AesDecrypt(resource.GetResourceData(), key, iv));
 }