Exemplo n.º 1
0
        internal static bool Inject(ReturnData data, AttributesHelper.AttributeData hook)
        {
            try
            {
                ConsoleHelper.WriteMessage(ConsoleHelper.MessageType.Wait, $"Injecting method \"{data.typeDefinition.Name}.{data.methodDefinition.Name}\"..");
                //reflcator
                var injector =
                    hook.Method.ReturnType != hook.Assembly.MainModule.TypeSystem.Void
                    ? data.methodDefinition.Parameters.Count > 0
                        ? new InjectionDefinition(data.methodDefinition, hook.Method, InjectFlags.PassInvokingInstance | InjectFlags.PassParametersRef | InjectFlags.ModifyReturn)
                        : new InjectionDefinition(data.methodDefinition, hook.Method, InjectFlags.PassInvokingInstance | InjectFlags.ModifyReturn)
                    : data.methodDefinition.Parameters.Count > 0
                        ? new InjectionDefinition(data.methodDefinition, hook.Method, InjectFlags.PassInvokingInstance | InjectFlags.PassParametersRef)
                        : new InjectionDefinition(data.methodDefinition, hook.Method, InjectFlags.PassInvokingInstance);

                if ((bool)hook.Attribute.ConstructorArguments[1].Value)
                {
                    injector.Inject(-1);
                }
                else
                {
                    injector.Inject();
                }
                ConsoleHelper.WriteMessage(ConsoleHelper.MessageType.Success, $"Injected method \"{data.typeDefinition.Name}.{data.methodDefinition.Name}\".");
                return(true);
            }
            catch (Exception ex)
            {
                ConsoleHelper.WriteError($"Something went wrong while injecting.");
                ConsoleHelper.WriteError($"Message: {ex.Message}");
                if (!(ex is InjectionDefinitionException))
                {
                    ConsoleHelper.WriteError(ex.StackTrace);
                }
            }
            return(false);
        }
Exemplo n.º 2
0
 public static bool InjectNewMethod(TypeDefinition type, AssemblyDefinition assembly, string methodName, AttributesHelper.AttributeData hook)
 {
     try
     {
         ConsoleHelper.WriteMessage(ConsoleHelper.MessageType.Wait, $"Injecting new method \"{type.Name}.{methodName}\"..");
         var methodDefinition = new MethodDefinition(methodName, MethodAttributes.Public, assembly.MainModule.TypeSystem.Void)
         {
             IsStatic = type.IsSealed
         };
         type.Methods.Add(methodDefinition);
         var il = methodDefinition.Body.GetILProcessor();
         if (!type.IsSealed)
         {
             methodDefinition.Body.Instructions.Add(il.Create(OpCodes.Ldarg_0));
         }
         methodDefinition.Body.Instructions.Add(il.Create(OpCodes.Call, assembly.MainModule.Import(hook.Method)));
         methodDefinition.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
         ConsoleHelper.WriteMessage(ConsoleHelper.MessageType.Success, $"Injected new method \"{type.Name}.{methodName}\".");
         return(true);
     }
     catch (Exception ex)
     {
         ConsoleHelper.WriteError($"Something went wrong while injecting.");
         ConsoleHelper.WriteError($"Message: {ex.Message}");
         if (!(ex is InjectionDefinitionException))
         {
             ConsoleHelper.WriteError(ex.StackTrace);
         }
         return(false);
     }
 }