Exemple #1
0
        public void Init(GameState state)
        {
            _remoteOps = new RemoteOpsHandler(state.GameProcess);

            _cmdBufferPtr = IntPtr.Zero;
            ProcessModuleWow64Safe engine = state.GetModule("engine.dll");

            var    scanner = new SignatureScanner(state.GameProcess, engine.BaseAddress, engine.ModuleMemorySize);
            IntPtr ptr     = scanner.Scan(new SigScanTarget("68" + scanner.Scan(new SigScanTarget("execing %s\n".ConvertToHex())).GetByteString()));

            if (ptr == IntPtr.Zero)
            {
                goto fail;
            }

            byte[] bytes = state.GameProcess.ReadBytes(ptr, 100);
            for (int i = 0; i < 100; i++)
            {
                byte e = bytes[i];
                if (e == 0xA1 || (bytes[i] >= 0xB8 && bytes[i] <= 0xBF))
                {
                    uint val = state.GameProcess.ReadValue <uint>(ptr + i + 1);
                    if (scanner.IsWithin(val))
                    {
                        _cmdBufferPtr = (IntPtr)val;
                        Debug.WriteLine("Command buffer found at 0x" + _cmdBufferPtr.ToString("X"));
                        break;
                    }
                }
            }

            GetExecPtr(state);
            Update(state);
            SendConsoleMsg("\nSourceSplit Custom Commands are present, enter \"ss_list\" to list them, or \"ss_h\" for help!\n\n");

            return;

fail:
            _cmdBufferPtr = IntPtr.Zero;
            Debug.WriteLine("Failed to initialize custom command handler!");
            return;
        }
Exemple #2
0
        private void GetExecPtr(GameState state)
        {
            /*
             * ProcessModuleWow64Safe engine = state.GetModule("engine.dll");
             * var scanner = new SignatureScanner(state.GameProcess, engine.BaseAddress, engine.ModuleMemorySize);
             *
             * var target = new SigScanTarget(0, ("exec config_default.cfg").ConvertToHex());
             * target.OnFound = (f_proc, f_scanner, f_ptr) =>
             * {
             *  SigScanTarget newTarg = new SigScanTarget(0, $"68 {f_ptr.GetByteString()}");
             *  return f_scanner.Scan(newTarg);
             * };
             *
             * _cmdExecPtr = scanner.ReadCall(scanner.Scan(target) + 0x5);
             */

            // use export table
            var tier0        = state.GetModule("tier0.dll");
            var tier0Symbols = WinAPI.AllSymbols(state.GameProcess, tier0);

            _cmdExecPtr = (IntPtr)tier0Symbols.Where(x => x.Name == "ConMsg").FirstOrDefault().Address;
        }