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); } } }
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); } } }