Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Lomito lomo1 = new BaseLomito();

            lomo1 = new PapasFritas(lomo1);
            lomo1 = new Simple(lomo1);

            Lomito lomo2 = new BaseLomito();

            lomo2 = new Vegetariano(lomo2);

            Lomito lomo3 = new BaseLomito();

            lomo3 = new Completo(lomo3);

            Lomito lomo4 = new BaseLomito();

            lomo4 = new Macho(lomo4);

            Lomito lomo5 = new BaseLomito();

            lomo5 = new Macho(lomo5);
            lomo5 = new PapasFritas(lomo5);
            lomo5 = new Simple(lomo5);
            lomo5 = new Completo(lomo5);

            var precio1 = lomo1.precio();
            var precio2 = lomo2.precio();
            var precio3 = lomo3.precio();
            var precio4 = lomo4.precio();
            var precio5 = lomo5.precio();

            string cadena = "El lomo ";

            Console.WriteLine(cadena + "simple con papas cuesta: " + precio1);
            Console.WriteLine(cadena + "vegetariano cuesta: " + precio2);
            Console.WriteLine(cadena + "completo cuesta: " + precio3);
            Console.WriteLine(cadena + "macho cuesta: " + precio4);
            Console.WriteLine("EL combo reventar cuesta: " + precio5);
            Console.ReadLine();
        }
Exemplo n.º 2
0
        private bool Init(string il2CppPath, string metadataPath, out Metadata metadata, out Il2Cpp il2Cpp)
        {
            WriteOutput("Read config...", Color.Black);
            if (File.Exists(realPath + "config.json"))
            {
                _config = JsonConvert.DeserializeObject <Config>(File.ReadAllText(Application.StartupPath + Path.DirectorySeparatorChar + "config.json"));
            }
            else
            {
                _config = new Config();
                WriteOutput("config.json file does not exist. Using defaults", Color.Yellow);
            }

            WriteOutput("Initializing metadata...");
            var metadataBytes = File.ReadAllBytes(metadataPath);

            metadata = new Metadata(new MemoryStream(metadataBytes));
            WriteOutput($"Metadata Version: {metadata.Version}");

            WriteOutput("Initializing il2cpp file...");
            var il2CppBytes  = File.ReadAllBytes(il2CppPath);
            var il2CppMagic  = BitConverter.ToUInt32(il2CppBytes, 0);
            var il2CppMemory = new MemoryStream(il2CppBytes);

            switch (il2CppMagic)
            {
            default:
                WriteOutput("ERROR: il2cpp file not supported.");
                throw new NotSupportedException("ERROR: il2cpp file not supported.");

            case 0x6D736100:
                var web = new WebAssembly(il2CppMemory);
                il2Cpp = web.CreateMemory();
                break;

            case 0x304F534E:
                var nso = new NSO(il2CppMemory);
                il2Cpp = nso.UnCompress();
                break;

            case 0x905A4D:     //PE
                il2Cpp = new PE(il2CppMemory);
                break;

            case 0x464c457f:             //ELF
                if (il2CppBytes[4] == 2) //ELF64
                {
                    var addressValue = "";
                    il2Cpp =
                        InputBox.Show("Input il2cpp dump address or leave empty to force continue:", "", ref addressValue) !=
                        DialogResult.OK
                                ? string.IsNullOrWhiteSpace(addressValue) ? new Elf64(il2CppMemory) :
                        new Elf64(il2CppMemory, addressValue)
                                : new Elf64(il2CppMemory);
                }
                else
                {
                    var addressValue = "";
                    il2Cpp =
                        InputBox.Show("Input il2cpp dump address or leave empty to force continue:", "", ref addressValue) !=
                        DialogResult.OK
                                ? string.IsNullOrWhiteSpace(addressValue) ? new Elf(il2CppMemory) :
                        new Elf(il2CppMemory, addressValue)
                                : new Elf(il2CppMemory);
                }
                break;

            case 0xCAFEBABE:     //FAT Mach-O
            case 0xBEBAFECA:
                var machofat = new MachoFat(new MemoryStream(il2CppBytes));
                WriteOutput("Select Platform: ");
                for (var i = 0; i < machofat.fats.Length; i++)
                {
                    var fat = machofat.fats[i];
                    WriteOutput(fat.magic == 0xFEEDFACF ? $"{i + 1}.64bit " : $"{i + 1}.32bit ");
                }
                WriteOutput("");
                var key   = Console.ReadKey(true);
                var index = int.Parse(key.KeyChar.ToString()) - 1;
                var magic = machofat.fats[index % 2].magic;
                il2CppBytes  = machofat.GetMacho(index % 2);
                il2CppMemory = new MemoryStream(il2CppBytes);
                if (magic == 0xFEEDFACF)
                {
                    goto case 0xFEEDFACF;
                }
                else
                {
                    goto case 0xFEEDFACE;
                }

            case 0xFEEDFACF:     // 64bit Mach-O
                il2Cpp = new Macho64(il2CppMemory);
                break;

            case 0xFEEDFACE:     // 32bit Mach-O
                il2Cpp = new Macho(il2CppMemory);
                break;
            }
            var version = _config.ForceIl2CppVersion ? _config.ForceVersion : metadata.Version;

            il2Cpp.SetProperties(version, metadata.maxMetadataUsages);
            WriteOutput($"Il2Cpp Version: {il2Cpp.Version}");
            if (il2Cpp.Version >= 27 && il2Cpp is ElfBase elf && elf.IsDumped)
            {
                var metadataValue = "";
                if (InputBox.Show("Input global-metadata.dat dump address:", "", ref metadataValue) != DialogResult.OK)
                {
                    return(false);
                }
                metadata.Address = Convert.ToUInt64(metadataValue, 16);
                WriteOutput($"global-metadata.dat dump address: {metadataValue}");
            }

            WriteOutput("Searching...");
            try
            {
                var flag = il2Cpp.PlusSearch(metadata.methodDefs.Count(x => x.methodIndex >= 0), metadata.typeDefs.Length, metadata.imageDefs.Length);
                if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && !flag && il2Cpp is PE)
                {
                    WriteOutput("Use custom PE loader");
                    il2Cpp = PELoader.Load(il2CppPath);
                    il2Cpp.SetProperties(version, metadata.maxMetadataUsages);
                    flag = il2Cpp.PlusSearch(metadata.methodDefs.Count(x => x.methodIndex >= 0), metadata.typeDefs.Length, metadata.imageDefs.Length);
                }
                if (!flag)
                {
                    flag = il2Cpp.Search();
                }
                if (!flag)
                {
                    flag = il2Cpp.SymbolSearch();
                }
                if (!flag)
                {
                    WriteOutput("ERROR: Can't use auto mode to process file, try manual mode.");
                    WriteOutput("Input CodeRegistration: ");

                    var codeValue = "";
                    if (InputBox.Show(@"Input CodeRegistration: ", "", ref codeValue) != DialogResult.OK)
                    {
                        return(false);
                    }
                    var codeRegistration = Convert.ToUInt64(codeValue, 16);
                    WriteOutput($"CodeRegistration: {codeValue}");

                    var metadataValue = "";
                    if (InputBox.Show("Input MetadataRegistration: ", "", ref metadataValue) != DialogResult.OK)
                    {
                        return(false);
                    }
                    var metadataRegistration = Convert.ToUInt64(metadataValue, 16);
                    WriteOutput($"MetadataRegistration: {metadataValue}");

                    il2Cpp.Init(codeRegistration, metadataRegistration);
                    return(true);
                }
            }
            catch (Exception e)
            {
                WriteOutput(e.Message);
                WriteOutput("ERROR: An error occurred while processing.");
                return(false);
            }
            return(true);
        }