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; } } }
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(); }
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; }
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); } }
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)); } }
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 } }