private void Obfuscate(Object obj) { Args args = (Args)obj; try { string[] classes = new string[lbInputClasses.Items.Count]; for (int i = 0; i < classes.Length; i++) { classes[i] = lbInputClasses.Items[i].ToString(); } Random rnd = new Random(); string[] obfuscatedKeywords = new string[args.keywords.Length]; for (int i = 0; i < obfuscatedKeywords.Length; i++) { string temp = ""; for (int j = 0; j < nudNameCount.Value; j++) { if (rnd.Next(0, 2) == 0) { temp += "I"; } else { temp += "l"; } } if (obfuscatedKeywords.Contains(temp)) { i--; } else { obfuscatedKeywords[i] = temp; } } string mapping = ""; for (int k = 0; k < args.keywords.Length; k++) { mapping += args.keywords[k] + " -> " + obfuscatedKeywords[k] + '\n'; } File.WriteAllText(outputClassesPath + @"\mapping.txt", mapping); args.status.addStepPB(); if (tbTurboMode.Checked) { args.status.SetDoing("Starting threads..."); args.status.SetMaxPB(classes.Length); for (int u = 0; u < classes.Length; u++) { ThreadArgs argss = new ThreadArgs(); argss.classes = classes; argss.status = args.status; argss.i = u; argss.keywords = args.keywords; string obfuscatedClass = ""; foreach (var path in files) { string className = path.Split('\\').Last(); if (className == classes[u]) { string[] pathh = path.Split('\\'); string newPath = ""; for (int g = 0; g < pathh.Length - 1; g++) { newPath += pathh[g] + "\\"; } obfuscatedClass = File.ReadAllText(path); break; } } argss.obfuscatedClass = obfuscatedClass; argss.obfuscatedKeywords = obfuscatedKeywords; Thread newClassThread = new Thread(ObfuscateClass); newClassThread.Start(argss); } args.status.addStepPB(); args.status.SetDoing("Started all threads!"); btnStartObfuscator.Enabled = true; return; } for (int i = 0; i < classes.Length; i++) { args.status.SetDoing($"Obfuscating class {classes[i]}..."); string currentClass = classes[i].Split('.')[0]; string obfuscatedClass = ""; foreach (var path in files) { string className = path.Split('\\').Last(); if (className == classes[i]) { string[] pathh = path.Split('\\'); string newPath = ""; for (int g = 0; g < pathh.Length - 1; g++) { newPath += pathh[g] + "\\"; } obfuscatedClass = File.ReadAllText(path); break; } } bool bracket = false; args.status.SetMaxPBKeywords(args.keywords.Length); args.status.addStepPBKeywords(); for (int j = 0; j < args.keywords.Length; j++) { args.status.SetDoingKeywords($"Replacing {args.keywords[j]}..."); args.status.SetMaxPBClass(obfuscatedClass.Length); for (int f = 0; f < obfuscatedClass.Length; f++) { args.status.SetDoingClass($"Process {f}/{obfuscatedClass.Length}"); if (obfuscatedClass[f] == '"') { bracket = !bracket; } try { if (!bracket) { if (obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + " " || obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + ";" || obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "(" || obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "=" || obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "." || obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + ">" || obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "\n" || obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "\r" || obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "\t") { obfuscatedClass = obfuscatedClass.Substring(0, f) + obfuscatedKeywords[j] + obfuscatedClass.Substring(f + args.keywords[j].Length); } } } catch (Exception) { } args.status.addStepPBClass(); } args.status.addStepPBKeywords(); } for (int x = 0; x < args.keywords.Length; x++) { try { if (currentClass == args.keywords[x]) { foreach (var path in files) { string className = path.Split('\\').Last(); if (className == classes[x]) { string[] pathh = path.Split('\\'); string newPath = ""; string savePath = ""; for (int g = 0; g < pathh.Length - 1; g++) { if (pathh[g] == "inputClasses") { newPath += "outputClasses" + "\\"; } else { newPath += pathh[g] + "\\"; } if (pathh[g] == "inputClasses") { savePath += "outputClasses" + "\\"; } else if (pathh[g].Contains("." + tbEnding.Text)) { savePath += obfuscatedKeywords[x] + "." + tbEnding.Text; } else { savePath += pathh[g] + "\\"; } } savePath += obfuscatedKeywords[x] + "." + tbEnding.Text; if (!Directory.Exists(newPath)) { Directory.CreateDirectory(newPath); } File.WriteAllText(savePath /*outputClassesPath + $@"\{obfuscatedKeywords[x]}.{classes[x].Split('.')[1]}"*/, obfuscatedClass); break; } } } } catch (Exception) { } } args.status.addStepPB(); } } catch (Exception ex) { args.status.Hide(); args.status = null; MessageBox.Show("Error:\n" + ex.Message, "Simple Obfuscate"); btnStartObfuscator.Enabled = true; return; } args.status.SetDoing("Finished!"); args.status.SetPBMax(); args.status.Update(); Thread.Sleep(1000); args.status.Hide(); args.status = null; MessageBox.Show("Successfully obfuscated classes!", "Simple Obfuscate"); btnStartObfuscator.Enabled = true; }
public void ObfuscateClass(Object obj) { ThreadArgs args = (ThreadArgs)obj; string currentClass = args.classes[args.i].Split('.')[0]; foreach (var path in files) { string className = path.Split('\\').Last(); if (className == args.classes[args.i]) { string[] pathh = path.Split('\\'); string newPath = ""; for (int g = 0; g < pathh.Length - 1; g++) { newPath += pathh[g] + "\\"; } args.obfuscatedClass = File.ReadAllText(path); break; } } bool bracket = false; for (int j = 0; j < args.keywords.Length; j++) { for (int f = 0; f < args.obfuscatedClass.Length; f++) { if (args.obfuscatedClass[f] == '"') { bracket = !bracket; } try { if (!bracket) { if (args.obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + " " || args.obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + ";" || args.obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "(" || args.obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "=" || args.obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "." || args.obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + ">" || args.obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "\n" || args.obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "\r" || args.obfuscatedClass.Substring(f, args.keywords[j].Length + 1) == args.keywords[j] + "\t") { args.obfuscatedClass = args.obfuscatedClass.Substring(0, f) + args.obfuscatedKeywords[j] + args.obfuscatedClass.Substring(f + args.keywords[j].Length); } } } catch (Exception) { } } } for (int x = 0; x < args.keywords.Length; x++) { try { if (currentClass == args.keywords[x]) { foreach (var path in files) { string className = path.Split('\\').Last(); if (className == args.classes[x]) { string[] pathh = path.Split('\\'); string newPath = ""; string savePath = ""; for (int g = 0; g < pathh.Length - 1; g++) { if (pathh[g] == "inputClasses") { newPath += "outputClasses" + "\\"; } else { newPath += pathh[g] + "\\"; } if (pathh[g] == "inputClasses") { savePath += "outputClasses" + "\\"; } else if (pathh[g].Contains("." + tbEnding.Text)) { savePath += args.obfuscatedKeywords[x] + "." + tbEnding.Text; } else { savePath += pathh[g] + "\\"; } } savePath += args.obfuscatedKeywords[x] + "." + tbEnding.Text; if (!Directory.Exists(newPath)) { Directory.CreateDirectory(newPath); } File.WriteAllText(savePath /*outputClassesPath + $@"\{obfuscatedKeywords[x]}.{classes[x].Split('.')[1]}"*/, args.obfuscatedClass); break; } } } } catch (Exception) { } } args.status.addStepPB(); }