Esempio n. 1
0
        private IDirectXHooker GetHooker(Parameter parameter)
        {
            IDirectXHooker hooker = null;

            switch (parameter.DirectXVersion)
            {
            case DirectXVersion.D3D9:
                hooker = new DirectXHooker.DriectX9Hooker(parameter, logger);
                break;

            case DirectXVersion.D3D11:
                hooker = new DirectXHooker.DriectX11Hooker(parameter);
                break;

            case DirectXVersion.D3D12:
                hooker = new DirectXHooker.DriectX12Hooker(parameter, logger);
                break;

            default:
                logger.Error($"Unknown {parameter.DirectXVersion} version of DirectX.");
                break;
            }

            return(hooker);
        }
Esempio n. 2
0
        private IDirectXHooker GetCurrentVerionDirectX(Parameter parameter)
        {
            var versions = new System.Collections.Generic.Dictionary <string, string>()
            {
                { "9", "d3d9.dll" },
                { "10", "d3d10.dll" },
                { "10_1", "d3d10_1.dll" },
                { "11", "d3d11.dll" },
                { "12", "d3d12.dll" }
            };
            var checkedVersions = versions
                                  .Where(it => GetModuleHandle(it.Value) != IntPtr.Zero)
                                  .Select(it => it.Key);

            if (checkedVersions.Count() > 0)
            {
                logger.Debug($"已检测到进程可用的驱动版本:{string.Join(", ", checkedVersions)}.");
            }

            var currentVersion = checkedVersions
                                 .FirstOrDefault();

            IDirectXHooker hooker = null;

            if (currentVersion != null)
            {
                logger.Debug($"当前驱动版本为 {currentVersion}.");

                switch (currentVersion)
                {
                case "9":
                    hooker = new DirectXHooker.DriectX9Hooker(parameter, logger);
                    break;

                case "11":
                    hooker = new DirectXHooker.DriectX11Hooker(parameter);
                    break;

                case "12":
                    hooker = new DirectXHooker.DriectX12Hooker(parameter, logger);
                    break;

                default:
                    logger.Error($"尚未实现 DirectX{currentVersion} 版本,请联系韦大神!");
                    break;
                }
            }
            else
            {
                logger.Error($"未检测到目标进程对应的 DirectX 版本.");
            }

            return(hooker);
        }
Esempio n. 3
0
        public InjectEntryPoint(RemoteHooking.IContext context, Parameter parameter)
        {
            server = RemoteHooking.IpcConnectClient <ServerInterface>(parameter.ChannelName);
            var channel = new IpcServerChannel(
                parameter.ChannelName,
                parameter.ChannelName + Guid.NewGuid().ToString("N"),
                new BinaryServerFormatterSinkProvider()
            {
                TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full
            });

            ChannelServices.RegisterChannel(channel, false);

            proxy = new ServerInterfaceEventProxy();

            logger = new IpcConnectLogger(server);

            server.Ping();

            hooker = GetCurrentVerionDirectX(parameter);
        }