Exemplo n.º 1
0
        protected override Delegate InitializeDelegate()
        {
            GameSharpProcess process = GameSharpProcess.Instance;
            ModulePointer    ntdll   = process.Modules["ntdll.dll"];
            IMemoryPointer   ntQueryInformationProcessPtr = ntdll.GetProcAddress("NtQueryInformationProcess");

            return(ntQueryInformationProcessPtr.ToDelegate <NtQueryInformationProcessDelegate>());
        }
Exemplo n.º 2
0
        protected override Delegate InitializeDelegate()
        {
            IProcess       process              = GameSharpProcess.Instance;
            ModulePointer  kernel32             = process.Modules["kernel32.dll"];
            IMemoryPointer IsDebuggerPresentPtr = kernel32.GetProcAddress("IsDebuggerPresent");

            return(IsDebuggerPresentPtr.ToDelegate <IsDebuggerPresentDelegate>());
        }
Exemplo n.º 3
0
        public override Delegate GetHookDelegate()
        {
            GameSharpProcess process = GameSharpProcess.Instance;

            ModulePointer user32dll = process.Modules["user32.dll"];

            IMemoryPointer messageBoxWPtr = user32dll.GetProcAddress("MessageBoxW");

            return(messageBoxWPtr.ToDelegate <HookMessageBoxWDelegate>());
        }
Exemplo n.º 4
0
        protected override Delegate InitializeDelegate()
        {
            GameSharpProcess process = GameSharpProcess.Instance;

            ModulePointer user32dll = process.Modules["user32.dll"];

            IMemoryPointer messageBoxWPtr = user32dll.GetProcAddress("MessageBoxW");

            return(messageBoxWPtr.ToDelegate <MessageBoxWDelegate>());
        }
Exemplo n.º 5
0
        private void ValidateDbgBreakPoint()
        {
            ModulePointer ntdll = Process.Modules["ntdll.dll"];

            MemoryPointer dbgBreakPointPtr = ntdll.GetProcAddress("DbgBreakPoint");

            byte dbgBreakPointByte = dbgBreakPointPtr.Read <byte>();

            if (dbgBreakPointByte != 0xCC)
            {
                MemoryPatches.Add(new MemoryPatch(dbgBreakPointPtr, new byte[] { 0xCC }));
            }
        }
Exemplo n.º 6
0
        public ModulePointer LoadLibrary(string pathToDll, bool resolveReferences = true)
        {
            byte[] loadLibraryOpcodes = LoadLibraryHelper.LoadLibraryPayload(pathToDll);

            MemoryPointer allocatedMemory = AllocateManagedMemory(loadLibraryOpcodes.Length);

            if (Kernel32.WriteProcessMemory(Native.Handle, allocatedMemory.Address, loadLibraryOpcodes, loadLibraryOpcodes.Length, out IntPtr _))
            {
                ModulePointer kernel32Module = Modules["kernel32.dll"];
                MemoryPointer loadLibraryAddress;
                if (resolveReferences)
                {
                    loadLibraryAddress = kernel32Module.GetProcAddress("LoadLibraryW");
                }
                else
                {
                    loadLibraryAddress = kernel32Module.GetProcAddress("LoadLibraryExW");
                }

                if (loadLibraryAddress == null)
                {
                    throw new Win32Exception($"Couldn't get proc address, error code: {Marshal.GetLastWin32Error()}.");
                }

                if (Kernel32.CreateRemoteThread(Native.Handle, IntPtr.Zero, 0, loadLibraryAddress.Address, allocatedMemory.Address, 0, IntPtr.Zero) == IntPtr.Zero)
                {
                    throw new Win32Exception($"Couldn't create a remote thread, error code: {Marshal.GetLastWin32Error()}.");
                }
            }

            ModulePointer injectedModule;

            while (!Modules.TryGetValue(Path.GetFileName(pathToDll).ToLower(), out injectedModule))
            {
                Thread.Sleep(1);
            }

            return(injectedModule);
        }
Exemplo n.º 7
0
        public HardwareBreakPoint(ModulePointer Pointer, BreakpointCondition Condition, int Length)
        {
            if (Condition == BreakpointCondition.Code)
            {
                Length = 1;
            }

            this.Pointer   = Pointer;
            this.Condition = Condition;

            switch (Length)
            {
            case 1: this.Length = 0; break;

            case 2: this.Length = 1; break;

            case 4: this.Length = 3; break;

            case 8: this.Length = 2; break;

            default: throw new BreakPointException("Invalid length!");
            }
        }
Exemplo n.º 8
0
 public void Call(ModulePointer Pointer, MagicConvention CallingConvention, params object[] Arguments)
 => Call(GetAddress(Pointer), CallingConvention, Arguments);
Exemplo n.º 9
0
 public void Write <T>(ModulePointer offs, T value) where T : struct
 {
     Write <T>(GetAddress(offs), value);
 }
Exemplo n.º 10
0
 public ValuePointer(ModulePointer Pointer)
 {
     this.Pointer = Pointer;
 }
Exemplo n.º 11
0
 public FunctionPointer(ModulePointer Pointer, MagicConvention CallingConvention)
 {
     this.Pointer           = Pointer;
     this.CallingConvention = CallingConvention;
 }
Exemplo n.º 12
0
 public CodeBreakpoint(ModulePointer Pointer) : base(Pointer, BreakpointCondition.Code, 1)
 {
 }
Exemplo n.º 13
0
 public void Call(ModulePointer offs, MagicConvention cv, params object[] args)
 {
     Call(GetAddress(offs), cv, args);
 }
Exemplo n.º 14
0
 public T Call <T>(ModulePointer offs, MagicConvention cv, params object[] args) where T : struct
 {
     return(Call <T>(GetAddress(offs), cv, args));
 }
Exemplo n.º 15
0
 /// <summary>
 ///     Initializes a new instance of the <see cref="MemoryScanner" /> class.
 /// </summary>
 /// <param name="module"><see cref="ProcessModule"/> which we are going to scan.</param>
 public MemoryScanner(ModulePointer module)
 {
     ModuleBase = module.MemoryPointer;
     Bytes      = ModuleBase.Read(module.Size);
 }
Exemplo n.º 16
0
 public IntPtr GetAddress(ModulePointer offs)
 {
     return(GetModuleAddress(offs.ModuleName).Add(offs.Offset));
 }
Exemplo n.º 17
0
 public IntPtr GetAddress(ModulePointer Pointer) => GetModuleAddress(Pointer.ModuleName).Add(Pointer.Offset);
Exemplo n.º 18
0
 public T Read <T>(ModulePointer offs) where T : struct
 {
     return(Read <T>(GetAddress(offs)));
 }
Exemplo n.º 19
0
 public T Call <T>(ModulePointer Pointer, MagicConvention CallingConvention, params object[] Arguments) where T : struct
 => Call <T>(GetAddress(Pointer), CallingConvention, Arguments);
Exemplo n.º 20
0
 public void Write <T>(ModulePointer Pointer, T Value) where T : struct => Write <T>(GetAddress(Pointer), Value);
Exemplo n.º 21
0
 public T Read <T>(ModulePointer Pointer) where T : struct => Read <T>(GetAddress(Pointer));