Example #1
0
        private void OpenClient(object sender, EventArgs e)
        {
            var clientPath = Properties.Resources.DarkAgesPath;

            try
            {
                if (!File.Exists(Rain.Properties.Resources.DarkAgesPath))
                {
                    MessageBox.Show("Check the Path in settings.");
                }
                else
                {
                    NativeMethods.StartupInfo startupInfo = new NativeMethods.StartupInfo();
                    startupInfo.Size = Marshal.SizeOf(startupInfo);
                    NativeMethods.ProcessInformation processInfo;
                    NativeMethods.CreateProcess(Properties.Resources.DarkAgesPath, (string)null, IntPtr.Zero, IntPtr.Zero, false, NativeMethods.ProcessCreationFlags.Suspended, IntPtr.Zero, (string)null, ref startupInfo, out processInfo);
                    using (ProcessMemoryStream processMemoryStream = new ProcessMemoryStream(processInfo.ProcessId, NativeMethods.ProcessAccessFlags.VmOperation | NativeMethods.ProcessAccessFlags.VmRead | NativeMethods.ProcessAccessFlags.VmWrite))
                    {
                        processMemoryStream.Position = 4384293L;
                        processMemoryStream.WriteByte((byte)144);
                        processMemoryStream.WriteByte((byte)144);
                        processMemoryStream.WriteByte((byte)144);
                        processMemoryStream.WriteByte((byte)144);
                        processMemoryStream.WriteByte((byte)144);
                        processMemoryStream.WriteByte((byte)144);
                        processMemoryStream.Position = 4404130L;
                        processMemoryStream.WriteByte((byte)235);
                        processMemoryStream.Position = 4404162L;
                        processMemoryStream.WriteByte((byte)106);
                        processMemoryStream.WriteByte((byte)1);
                        processMemoryStream.WriteByte((byte)106);
                        processMemoryStream.WriteByte((byte)0);
                        processMemoryStream.WriteByte((byte)106);
                        processMemoryStream.WriteByte((byte)0);
                        processMemoryStream.WriteByte((byte)106);
                        processMemoryStream.WriteByte((byte)127);
                        processMemoryStream.Position = 5744601L;
                        processMemoryStream.WriteByte((byte)235);
                        processMemoryStream.Position = 7290020L;
                        processMemoryStream.WriteString("Rain");
                        NativeMethods.ResumeThread(processInfo.ThreadHandle);
                    }
                    Process processById = Process.GetProcessById(processInfo.ProcessId);
                    do
                    {
                        ;
                    }while (processById.MainWindowHandle == IntPtr.Zero);
                    NativeMethods.SetWindowText(processById.MainWindowHandle, "Dark Ages : Rain");
                    App.ProcessIds.Add(processInfo.ProcessId);
                }
            }
            catch (FileNotFoundException)
            {
                MessageBox.Show("Error occurred, check your path; Or permissions.");
            }
        }
Example #2
0
        private void Launch()
        {
            _config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            string path = _config.AppSettings.Settings["Path"].Value;

            if (!File.Exists(path))
            {
                MessageBox.Show("Hybrasyl Launcher could not find Dark Ages located at: \r\n" + path, "File not found!", MessageBoxButton.OK, MessageBoxImage.Hand);
                return;
            }

            ProcessInformation information;
            StartupInfo        startupInfo = new StartupInfo();

            startupInfo.Size = Marshal.SizeOf(startupInfo);



            Kernel32.CreateProcess(path, null, IntPtr.Zero, IntPtr.Zero, false, ProcessCreationFlags.Suspended,
                                   IntPtr.Zero, null, ref startupInfo, out information);

            using (ProcessMemoryStream stream = new ProcessMemoryStream(information.ProcessId,
                                                                        ProcessAccess.VmWrite | ProcessAccess.VmRead | ProcessAccess.VmOperation))
            {
                if (_config.AppSettings.Settings["SkipIntro"].Value == "true")
                {
                    stream.Position = 0x42E625L; // intro
                    stream.WriteByte(0x90);
                    stream.WriteByte(0x90);
                    stream.WriteByte(0x90);
                    stream.WriteByte(0x90);
                    stream.WriteByte(0x90);
                    stream.WriteByte(0x90);
                }

                #region Legacy IPAddress Code
                /*Legacy IP Address code. do not remove.*/
                //stream.Position = 0x4333C2L; // ip
                //IPAddress addr = Dns.GetHostAddresses(HostName)[0];
                //var serverBytes = addr.GetAddressBytes();
                //stream.WriteByte(0x6A);
                //stream.WriteByte(serverBytes[3]);
                //stream.WriteByte(0x6A);
                //stream.WriteByte(serverBytes[2]);
                //stream.WriteByte(0x6A);
                //stream.WriteByte(serverBytes[1]);
                //stream.WriteByte(0x6A);
                //stream.WriteByte(serverBytes[0]);

                //stream.Position = 0x4333F5L; // port
                //stream.WriteByte((byte)(Port % 256));
                //stream.WriteByte((byte)(Port / 256));
                /*End legacy IP Address code. do not remove.*/
                #endregion

                var    hostBytes = Encoding.UTF8.GetBytes(HostName);
                byte[] endBytes  = new byte[12];
                if (hostBytes.Length != 12)
                {
                    for (var i = 0; i < hostBytes.Length; i++)
                    {
                        endBytes[i] = hostBytes[i];
                    }
                }
                else
                {
                    endBytes = hostBytes;
                }

                stream.Position = 0x6707A8L;
                stream.Write(endBytes, 0, 12);

                if (_config.AppSettings.Settings["MultiInstance"].Value == "true")
                {
                    stream.Position = 0x57A7D9L; // multi-instance
                    stream.WriteByte(0xEB);
                }
                else
                {
                    LaunchEnabled = false;
                    OnPropertyChanged("LaunchEnabled");
                }
            }
            Kernel32.ResumeThread(information.ThreadHandle);
            var process = Process.GetProcessById(information.ProcessId);
            process.WaitForInputIdle();

            User32.SetWindowText(process.MainWindowHandle, "DarkAges : Hybrasyl");
        }
Example #3
0
        private void Launch()
        {
            _config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            string path = _config.AppSettings.Settings["Path"].Value;

            if (!File.Exists(path))
            {
                MessageBox.Show("Hybrasyl Launcher could not find Dark Ages located at: \r\n" + path, "File not found!", MessageBoxButton.OK, MessageBoxImage.Hand);
                return;
            }

            ProcessInformation information;
            StartupInfo startupInfo = new StartupInfo();
            startupInfo.Size = Marshal.SizeOf(startupInfo);

            

            Kernel32.CreateProcess(path, null, IntPtr.Zero, IntPtr.Zero, false, ProcessCreationFlags.Suspended,
                IntPtr.Zero, null, ref startupInfo, out information);

            using (ProcessMemoryStream stream = new ProcessMemoryStream(information.ProcessId,
                ProcessAccess.VmWrite | ProcessAccess.VmRead | ProcessAccess.VmOperation))
            {
                

                if (_config.AppSettings.Settings["SkipIntro"].Value == "true")
                {
                    stream.Position = 0x42E625L; // intro
                    stream.WriteByte(0x90);
                    stream.WriteByte(0x90);
                    stream.WriteByte(0x90);
                    stream.WriteByte(0x90);
                    stream.WriteByte(0x90);
                    stream.WriteByte(0x90);
                }

                #region Legacy IPAddress Code
                /*Legacy IP Address code. do not remove.*/
                //stream.Position = 0x4333C2L; // ip
                //IPAddress addr = Dns.GetHostAddresses(HostName)[0];
                //var serverBytes = addr.GetAddressBytes();
                //stream.WriteByte(0x6A);
                //stream.WriteByte(serverBytes[3]);
                //stream.WriteByte(0x6A);
                //stream.WriteByte(serverBytes[2]);
                //stream.WriteByte(0x6A);
                //stream.WriteByte(serverBytes[1]);
                //stream.WriteByte(0x6A);
                //stream.WriteByte(serverBytes[0]);

                //stream.Position = 0x4333F5L; // port
                //stream.WriteByte((byte)(Port % 256));
                //stream.WriteByte((byte)(Port / 256));
                /*End legacy IP Address code. do not remove.*/
                #endregion

                var hostBytes = Encoding.UTF8.GetBytes(HostName);
                byte[] endBytes = new byte[12];
                if (hostBytes.Length != 12)
                {
                    for (var i = 0; i < hostBytes.Length; i++)
                    {
                        endBytes[i] = hostBytes[i];
                    }
                }
                else
                {
                    endBytes = hostBytes;
                }

                stream.Position = 0x6707A8L;
                stream.Write(endBytes, 0, 12);

                if (_config.AppSettings.Settings["MultiInstance"].Value == "true")
                {
                    stream.Position = 0x57A7D9L; // multi-instance
                    stream.WriteByte(0xEB);
                }
                else
                {
                    LaunchEnabled = false;
                    OnPropertyChanged("LaunchEnabled");
                }
            }
            Kernel32.ResumeThread(information.ThreadHandle);
            var process = Process.GetProcessById(information.ProcessId);
            process.WaitForInputIdle();

            User32.SetWindowText(process.MainWindowHandle, "DarkAges : Hybrasyl");
        }