Beispiel #1
0
        internal static void LoaderUpdateRoutine(UpdateWindow ui, Dictionary <string, object> args)
        {
#if DEBUG
            return;
#endif
            var updateData = (UpdateData)args["updateData"];

            if (updateData != null)
            {
                ui.CurrentProgress   = 0;
                ui.OveralMaxProgress = 100;
                var currentFilePath = Process.GetCurrentProcess().MainModule.FileName;

                if (!Md5Hash.Compare(Md5Hash.ComputeFromFile(currentFilePath), updateData.Loader.MD5, true))
                {
                    ui.Details = MultiLanguage.Text.UpdateDetailsLoaderDownloading;
                    if (!DownloadFile(updateData.Loader.Download, currentFilePath))
                    {
                        ExitDownloadError(currentFilePath);
                    }

                    args["restartRequired"] = true;
                }
            }
        }
Beispiel #2
0
        internal static void InstallFilesRoutine(UpdateWindow ui, Dictionary <string, object> args)
        {
            ui.CurrentProgress       = ui.MaxProgress;
            ui.OveralCurrentProgress = ui.OveralMaxProgress;
            ui.Status  = MultiLanguage.Text.UpdateStatusInstallingFiles;
            ui.Details = MultiLanguage.Text.UpdateDetailsInstallingFiles;

            foreach (
                var file in
                Directory.GetFiles(Settings.Instance.Directories.SystemDirectory, "*.dll",
                                   SearchOption.AllDirectories)
                .Where(
                    file =>
                    !Md5Hash.Compare(Md5Hash.ComputeFromFile(file),
                                     Md5Hash.ComputeFromFile(
                                         Path.Combine(Settings.Instance.Directories.LibrariesDirectory,
                                                      Path.GetFileName(file))))))
            {
                try
                {
                    FileHelper.CopyFile(file, Settings.Instance.Directories.LibrariesDirectory);
                }
                catch (Exception)
                {
                    MessageBox.Show(
                        string.Format(MultiLanguage.Text.ErrorUpdateFailedToCopyFile, Path.GetFileName(file)),
                        MultiLanguage.Text.UpdateStatusInstallingFiles, MessageBoxButton.OK, MessageBoxImage.Information);
                }
            }

            foreach (var file in Directory.GetFiles(Environment.CurrentDirectory, "*.old", SearchOption.AllDirectories))
            {
                try
                {
                    File.Delete(file);
                }
                catch (Exception)
                {
                    // ignored
                }
            }

            if (args.ContainsKey("restartRequired") && (bool)args["restartRequired"])
            {
                EnvironmentHelper.Restart(true);
            }

            PathRandomizer.Randomize();
        }
Beispiel #3
0
        internal static void SystemFilesUpdateRoutine(UpdateWindow ui, Dictionary <string, object> args)
        {
            var updateData = (UpdateData)args["updateData"];

            if (updateData == null || DeveloperHelper.IsDeveloper)
            {
                return;
            }

            //-----------------------------
            // Update static files
            //-----------------------------
            var currentProgress = 0;

            ui.Status  = MultiLanguage.Text.UpdateStatusSystemFiles;
            ui.Details = "";

            foreach (var keyPair in updateData.StaticFiles)
            {
                var path     = keyPair.Key;
                var filename = Path.GetFileName(path);
                currentProgress += 1;

                ui.CurrentProgress       = 0;
                ui.OveralCurrentProgress = currentProgress;
                ui.OveralMaxProgress     = updateData.StaticFiles.Count + 1;
                ui.Details = string.Format(MultiLanguage.Text.UpdateDetailsCheckingFile, filename);

                if (!Md5Hash.Compare(Md5Hash.ComputeFromFile(path), keyPair.Value.MD5))
                {
                    if (!string.IsNullOrEmpty(keyPair.Value.Download))
                    {
                        ui.Details = string.Format(MultiLanguage.Text.UpdateDetailsDownloadingFile, filename);

                        if (!DownloadFile(keyPair.Value.Download, path))
                        {
                            ExitDownloadError(filename);
                        }
                    }
                    else if (File.Exists(path))
                    {
                        File.Delete(path);
                    }
                }
            }

            ui.OveralCurrentProgress = ui.OveralMaxProgress;
        }
Beispiel #4
0
        private static void CoreInjectionRoutine(object args)
        {
            Thread.Sleep(3000); // delay on startup

            while (_execute)
            {
                if (Pause)
                {
                    continue;
                }

                //ClientInjectionRoutine();

                if (Settings.Instance.EnableInjection && (LoaderUpdate.UpToDate || DeveloperHelper.IsDeveloper) &&
                    !LoaderUpdate.IsRunning && !AddonUpdateRoutine.IsRunning && (DeveloperHelper.IsDeveloper || (Settings.Instance.DisableAutomaticUpdates || !AutoUpdateRoutine.CheckForUpdate())))
                {
                    foreach (var p in GetLeagueProcesses().Where(p => !IsProcessInjected(p) && !string.IsNullOrEmpty(p.MainWindowTitle)))
                    {
                        var pHash = Md5Hash.ComputeFromFile(p.MainModule.FileName);

                        if (!Md5Hash.Compare(LoaderUpdate.LeagueHash, pHash) && !DeveloperHelper.IsDeveloper)
                        {
                            MessageBox.Show(string.Format(MultiLanguage.Text.ErrorInjectionHashMissmatch, pHash.ToLower(), LoaderUpdate.LeagueHash.ToLower()),
                                            "Injection Aborted", MessageBoxButton.OK, MessageBoxImage.Warning);

                            continue;
                        }

                        var result = Injector.InjectBuddy(p.Id, Settings.Instance.Directories.TempCoreDllPath);
                        Events.RaiseOnInject(p.Id, result);
                    }
                }

                Thread.Sleep(2500);
            }
        }
Beispiel #5
0
        internal static void PatchFilesUpdateRoutine(UpdateWindow ui, Dictionary <string, object> args)
        {
            var updateData = (UpdateData)args["updateData"];

            if (updateData != null)
            {
                //-----------------------------
                // Update patch files
                //-----------------------------
                var       currentPatchHash = Riot.GetCurrentPatchHash().ToLower();
                PatchData patch;
                updateData.Patches.TryGetValue(currentPatchHash, out patch);

                if (patch != null && !DeveloperHelper.IsDeveloper)
                {
                    var currentProgress = 0;
                    ui.Status  = MultiLanguage.Text.UpdateStatusPatchFiles;
                    ui.Details = "";

                    foreach (var keyPair in patch.Files)
                    {
                        var path     = keyPair.Key;
                        var filename = Path.GetFileName(path);
                        currentProgress += 1;

                        ui.CurrentProgress       = 0;
                        ui.OveralCurrentProgress = currentProgress;
                        ui.OveralMaxProgress     = patch.Files.Count + 1;
                        ui.Details = string.Format(MultiLanguage.Text.UpdateDetailsCheckingFile, filename);

                        if (!Md5Hash.Compare(Md5Hash.ComputeFromFile(path), keyPair.Value.MD5))
                        {
                            if (!string.IsNullOrEmpty(keyPair.Value.Download))
                            {
                                ui.Details = string.Format(MultiLanguage.Text.UpdateDetailsDownloadingFile, filename);

                                if (!DownloadFile(keyPair.Value.Download, path))
                                {
                                    ExitDownloadError(filename);
                                }
                            }
                            else if (File.Exists(path))
                            {
                                File.Delete(path);
                            }
                        }
                    }
                    ui.OveralCurrentProgress = ui.OveralMaxProgress;
                }

                // Set patch update result
                LoaderUpdate.LeagueHash    = currentPatchHash;
                LoaderUpdate.LeagueVersion = string.IsNullOrEmpty(currentPatchHash)
                    ? string.Empty
                    : Riot.GetCurrentPatchVersionInfo().FileVersion;
                LoaderUpdate.UpToDate = DeveloperHelper.IsDeveloper || patch != null;

                if (patch != null && LoaderUpdate.UpToDate)
                {
                    LoaderUpdate.CoreHash = Md5Hash.ComputeFromFile(Settings.Instance.Directories.CoreDllPath);

                    if (args.ContainsKey("coreData"))
                    {
                        var jsonNews = (CoreNewsList)args["coreData"];
                        var coreItem = jsonNews.News.FirstOrDefault(n => n.Hash != null && n.Hash.Any(h => Md5Hash.Compare(h, LoaderUpdate.CoreHash)));
                        LoaderUpdate.CoreBuild = coreItem != null ? coreItem.Build : "Unknown";
                    }
                    else
                    {
                        LoaderUpdate.CoreBuild = "Unknown";
                    }
                }

                Log.Instance.DoLog(string.Format("League hash detected: \"{0}\"", currentPatchHash));
                Log.Instance.DoLog(string.Format("EloBuddy updated for current patch: {0}", patch != null));
                Log.Instance.DoLog(string.Format("Update status: \"{0}\"", LoaderUpdate.StatusString));
            }
        }
Beispiel #6
0
        internal static void Randomize(bool newDirectory = false)
        {
            if (newDirectory && Directory.Exists(Settings.Instance.Directories.TempCoreDirectory))
            {
                DirectoryHelper.DeleteDirectory(Settings.Instance.Directories.TempCoreDirectory);
            }

            // Set new directory
            if (!Directory.Exists(Settings.Instance.Directories.TempCoreDirectory))
            {
                // Create a random directory to store the core files
                Settings.Instance.Directories.TempCoreDirectory = Path.Combine(Path.GetTempPath(),
                                                                               RandomHelper.RandomString());
                Log.Instance.DoLog(string.Format("Created temporary core directory: \"{0}\"",
                                                 Settings.Instance.Directories.TempCoreDirectory));
            }

            // Copy Elobuddy.Core.dll file
            try
            {
                if (!File.Exists(Settings.Instance.Directories.TempCoreDllPath))
                {
                    Settings.Instance.Directories.TempCoreDllPath =
                        Path.Combine(Settings.Instance.Directories.TempCoreDirectory, "Elobuddy.Core.dll");
                }

                if (
                    !Md5Hash.Compare(Md5Hash.ComputeFromFile(Settings.Instance.Directories.TempCoreDllPath),
                                     Md5Hash.ComputeFromFile(Settings.Instance.Directories.CoreDllPath)))
                {
                    FileHelper.SafeCopyFile(Settings.Instance.Directories.CoreDllPath,
                                            Settings.Instance.Directories.TempCoreDirectory,
                                            Path.GetFileName(Settings.Instance.Directories.TempCoreDllPath));
                    Log.Instance.DoLog(string.Format("Copied EloBuddy.Core.dll to: \"{0}\"",
                                                     Settings.Instance.Directories.TempCoreDllPath));
                }
            }
            catch (Exception)
            {
                // ignored
            }

            // Copy EloBuddy.Sandbox.dll file
            try
            {
                if (!File.Exists(Settings.Instance.Directories.TempSandboxDllPath))
                {
                    Settings.Instance.Directories.TempSandboxDllPath =
                        Path.Combine(Settings.Instance.Directories.TempCoreDirectory,
                                     RandomHelper.RandomString() + ".dll");
                }

                if (
                    !Md5Hash.Compare(
                        Md5Hash.ComputeFromFile(Settings.Instance.Directories.TempSandboxDllPath),
                        Md5Hash.ComputeFromFile(Settings.Instance.Directories.SandboxDllPath)))
                {
                    FileHelper.SafeCopyFile(Settings.Instance.Directories.SandboxDllPath,
                                            Settings.Instance.Directories.TempCoreDirectory,
                                            Path.GetFileName(Settings.Instance.Directories.TempSandboxDllPath));

                    // as requested by finn
                    FileHelper.SafeCopyFile(Settings.Instance.Directories.SandboxDllPath,
                                            Settings.Instance.Directories.TempCoreDirectory);

                    Log.Instance.DoLog(string.Format("Copied EloBuddy.Sandbox.dll to: \"{0}\"",
                                                     Settings.Instance.Directories.TempSandboxDllPath));
                }
            }
            catch (Exception)
            {
                // ignored
            }

            // Copy EloBuddy.dll file
            try
            {
                if (!File.Exists(Settings.Instance.Directories.TempEloBuddyDllPath))
                {
                    Settings.Instance.Directories.TempEloBuddyDllPath =
                        Path.Combine(Settings.Instance.Directories.TempCoreDirectory,
                                     RandomHelper.RandomString() + ".dll");
                }

                if (
                    !Md5Hash.Compare(
                        Md5Hash.ComputeFromFile(Settings.Instance.Directories.TempCoreDirectory),
                        Md5Hash.ComputeFromFile(Settings.Instance.Directories.EloBuddyDllPath)))
                {
                    FileHelper.SafeCopyFile(Settings.Instance.Directories.EloBuddyDllPath,
                                            Settings.Instance.Directories.TempCoreDirectory,
                                            Path.GetFileName(Settings.Instance.Directories.TempEloBuddyDllPath));

                    // as requested by finn
                    FileHelper.SafeCopyFile(Settings.Instance.Directories.EloBuddyDllPath,
                                            Settings.Instance.Directories.TempCoreDirectory);

                    Log.Instance.DoLog(string.Format("Copied EloBuddy.dll to: \"{0}\"",
                                                     Settings.Instance.Directories.TempEloBuddyDllPath));
                }
            }
            catch (Exception)
            {
                // ignored
            }
        }