Код для шифрования:
Используется так:
Выглядит это всё так:
После шифрования текст выглядит так: ( Файл не ломается )
Ну и конечно выложу готовый шифровальщик: используйте для своих нужд.
Ссылка на архив: Mono String Obfuscation
C#:
namespace MonoStringObf
{
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Mono.Cecil;
using Mono.Cecil.Cil;
public class Obfuscation
{
private static string Encode(string str) => Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(str));
private static MethodDefinition InjectDecrypter(AssemblyDefinition AssemblyDef)
{
foreach (ModuleDefinition ModuleDef in AssemblyDef.Modules)
{
foreach (TypeDefinition TypeDef in ModuleDef.GetTypes())
{
if (TypeDef.Name.Equals("<Module>"))
{
MethodDefinition MethodDef = CreateDecrypter(AssemblyDef);
TypeDef.Methods.Add(MethodDef);
return MethodDef;
}
}
}
throw new Exception("Decrypter not injected.");
}
private static void Encrypt(AssemblyDefinition AssemblyDef, MethodDefinition MD, string filename)
{
foreach (ModuleDefinition ModuleDef in AssemblyDef.Modules)
{
foreach (TypeDefinition TypeDef in ModuleDef.GetTypes())
{
foreach (MethodDefinition MethodDef in TypeDef.Methods)
{
if (MethodDef.HasBody)
{
ILProcessor ilp = MethodDef.Body.GetILProcessor();
for (int i = 0; i < MethodDef.Body.Instructions.Count; i++)
{
Instruction InstructionDef = MethodDef.Body.Instructions[i];
if (InstructionDef.OpCode == OpCodes.Ldstr)
{
InstructionDef.Operand = Encode(InstructionDef.Operand.ToString());
ilp.InsertAfter(InstructionDef, Instruction.Create(OpCodes.Call, MD));
}
}
}
}
}
}
AssemblyDef.Write(filename);
}
private static MethodDefinition CreateDecrypter(AssemblyDefinition AssemblyDef)
{
var Decrypt = new MethodDefinition("Decrypt", MethodAttributes.Public | MethodAttributes.Static, AssemblyDef.MainModule.ImportReference(typeof(string)));
Decrypt.Parameters.Add(new ParameterDefinition(AssemblyDef.MainModule.ImportReference(typeof(string))));
var Body = new List<Instruction>
{
Instruction.Create(OpCodes.Call, AssemblyDef.MainModule.ImportReference(typeof(System.Text.Encoding).GetMethod("get_UTF8"))),
Instruction.Create(OpCodes.Ldarg_0),
Instruction.Create(OpCodes.Call, AssemblyDef.MainModule.ImportReference(typeof(System.Convert).GetMethod("FromBase64String", new Type[] { typeof(string) }))),
Instruction.Create(OpCodes.Callvirt, AssemblyDef.MainModule.ImportReference(typeof(System.Text.Encoding).GetMethod("GetString", new Type[] { typeof(byte[]) }))),
Instruction.Create(OpCodes.Ret)
};
foreach (Instruction Instr in Body)
{
Decrypt.Body.Instructions.Add(Instr);
}
return Decrypt;
}
public static bool Inizialize(string filepath, string outputfilename)
{
try
{
using (var AssemblyDef = AssemblyDefinition.ReadAssembly(filepath))
{
Encrypt(AssemblyDef, InjectDecrypter(AssemblyDef), outputfilename);
MessageBox.Show("Файл успешно зашифрован!");
return true;
}
}
catch { MessageBox.Show("Не смогли зашифровать."); return false; }
}
}
}
Используется так:
C#:
Obfuscation.Inizialize(this.FileBoxPath.Text, $"{this.OutPutBox.Text}.exe");
Выглядит это всё так:
После шифрования текст выглядит так: ( Файл не ломается )
Ну и конечно выложу готовый шифровальщик: используйте для своих нужд.
Ссылка на архив: Mono String Obfuscation