Esempio n. 1
0
        public static void GenerateAndSaveSmali(
            [NotNull] string filePath,
            [NotNull] string message,
            int messagesCount
            )
        {
            Guard.NotNullArgument(filePath, nameof(filePath));
            Guard.NotNullArgument(message, nameof(message));

            if (messagesCount < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(messagesCount));
            }

            message = message.Replace("\r", "").Replace("\n", "\\n");

            string text = FileResources.SavesRestoringPortable;

            StringBuilder stringBuilder = new StringBuilder();
            string        messageShow   = FileResources.MessageShow;

            for (int i = 0; i < messagesCount; i++)
            {
                stringBuilder.Append(messageShow.Replace("[(message)]", PadBoth(message, i, ' ')));
            }
            text = text.Replace("[(message)]", stringBuilder.ToString());
            byte[] bytes = Encoding.UTF8.GetBytes(message);
            text = text.Replace("[(text)]", Convert.ToBase64String(bytes));
            stringBuilder.Clear();
            string newLine = NewLine;

            using (StringReader stringReader = new StringReader(text))
            {
                SmaliClass smaliClass = SmaliClass.ParseStream(stringReader);
                new Dictionary <string, SmaliMethod>();
                using (StringWriter stringWriter = new StringWriter())
                {
                    smaliClass.Save(stringWriter);
                    LFile.WriteAllText(filePath, text, SmaliEncoding);
                }
            }
        }
Esempio n. 2
0
        public static void GenerateAndSaveSmali(
            [NotNull] string filePath,
            [NotNull] byte[] iv,
            [NotNull] byte[] key,
            bool addSave,
            [NotNull] string message,
            int messagesCount
            )
        {
            Guard.NotNullArgument(filePath, nameof(filePath));
            Guard.NotNullArgument(iv, nameof(iv));
            Guard.NotNullArgument(key, nameof(key));
            Guard.NotNullArgument(message, nameof(message));

            if (messagesCount < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(messagesCount));
            }

            message = message.Replace("\r", "").Replace("\n", "\\n");

            string text = FileResources.SavesRestoringPortable;

            var toAdd = new StringBuilder();

            var resourceMessage = FileResources.MessageShow;

            for (int i = 0; i < messagesCount; i++)
            {
                toAdd.Append(resourceMessage.Replace("[(message)]", PadBoth(message, i)));
            }

            text = text.Replace("[(message)]", toAdd.ToString());

            toAdd.Clear();

            string nl = NewLine;

            for (byte i = 0; i < iv.Length; i++)
            {
                string temp = $"    const/16 v12, {GenByteString(i)}{nl}" +
                              $"{nl}" +
                              $"    const/16 v13, {GenByteString(iv[i])}{nl}" +
                              $"{nl}" +
                              $"    aput-byte v13, v1, v12{nl}" +
                              $"{nl}";

                toAdd.Append(temp);
            }

            text = text.Replace("[(iv_bytes_init)]", toAdd.ToString());

            toAdd.Clear();

            for (byte i = 0; i < iv.Length; i++)
            {
                string temp = $"    const/16 v12, {GenByteString(i)}{nl}" +
                              $"{nl}" +
                              $"    const/16 v13, {GenByteString(key[i])}{nl}" +
                              $"{nl}" +
                              $"    aput-byte v13, v7, v12{nl}" +
                              $"{nl}";

                toAdd.Append(temp);
            }

            text = text.Replace("[(key_bytes_init)]", toAdd.ToString());

            using (var reader = new StringReader(text))
            {
                var cls = SmaliClass.ParseStream(reader);

                var dict = new Dictionary <string, SmaliMethod>();

                int messagesLength = cls.Methods.Sum(method => SmaliStringEncryptor.EncryptMethod(method, cls.Name, dict));

                foreach (var elem in dict)
                {
                    cls.Methods.Add(elem.Value);
                }

                using (var writer = new StringWriter())
                {
                    cls.Save(writer);

                    text = writer.ToString().Replace("[(message_length)]", messagesLength.ToString("X"));
                    text = text.Replace("[(data_restore_call)]", addSave ? FileResources.DataRestoreCall : "");

                    LFile.WriteAllText(filePath, text, SmaliEncoding);
                }
            }
        }