initial commit
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using dnlib.DotNet;
|
||||
using dnlib.DotNet.Emit;
|
||||
|
||||
namespace Obfuscator.Obfuscator.Calli;
|
||||
|
||||
internal class Calli
|
||||
{
|
||||
public static void Execute(ModuleDef module)
|
||||
{
|
||||
TypeDef[] array = module.Types.ToArray();
|
||||
for (int i = 0; i < array.Length; i++)
|
||||
{
|
||||
MethodDef[] array2 = array[i].Methods.ToArray();
|
||||
foreach (MethodDef methodDef in array2)
|
||||
{
|
||||
if (!methodDef.HasBody || !methodDef.Body.HasInstructions || methodDef.FullName.Contains("My.") || methodDef.FullName.Contains(".My") || methodDef.FullName.Contains("Costura") || methodDef.IsConstructor || methodDef.DeclaringType.IsGlobalModuleType)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
for (int k = 0; k < methodDef.Body.Instructions.Count - 1; k++)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!methodDef.Body.Instructions[k].ToString().Contains("ISupportInitialize") && (methodDef.Body.Instructions[k].OpCode == OpCodes.Call || methodDef.Body.Instructions[k].OpCode == OpCodes.Callvirt || methodDef.Body.Instructions[k].OpCode == OpCodes.Ldloc_S) && !methodDef.Body.Instructions[k].ToString().Contains("Object") && (methodDef.Body.Instructions[k].OpCode == OpCodes.Call || methodDef.Body.Instructions[k].OpCode == OpCodes.Callvirt || methodDef.Body.Instructions[k].OpCode == OpCodes.Ldloc_S))
|
||||
{
|
||||
try
|
||||
{
|
||||
MemberRef memberRef = (MemberRef)methodDef.Body.Instructions[k].Operand;
|
||||
methodDef.Body.Instructions[k].OpCode = OpCodes.Calli;
|
||||
methodDef.Body.Instructions[k].Operand = memberRef.MethodSig;
|
||||
methodDef.Body.Instructions.Insert(k, Instruction.Create(OpCodes.Ldftn, memberRef));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach (MethodDef method in module.GlobalType.Methods)
|
||||
{
|
||||
if (!(method.Name != ".ctor"))
|
||||
{
|
||||
module.GlobalType.Remove(method);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user