static internal UpdatePackage FromData(byte[] UpdateData) { //Data package format is // <SHA1HASH(20 bytes)> // <XORED DATA> // <MAGIC(4 bytes)> // <DATA(n bytes)> // </ENCRYPTED DATA> //Remove the XOR Coding on all the data try { for (int i = 0; i < UpdateData.Length; i++) { UpdateData[i] ^= XOR_KEY; } byte[] updaterData = ExtractData(UpdateData); if (updaterData == null) { return(null); } //Check Magic if (updaterData.Length < MAGIC.Length) { return(null); } for (int i = 0; i < MAGIC.Length; i++) { if (updaterData[i] != MAGIC[i]) { return(null); } } byte[] packageData = new byte[updaterData.Length - 4]; Array.Copy(updaterData, 4, packageData, 0, updaterData.Length - 4); UpdatePackage up = new UpdatePackage(packageData); return(up); } catch { return(null); } }
private UpdatePackage GetUpdateRequest() { //See if an update is available. WebClient wc = new WebClient(); try { wc.Proxy = new WebProxy("proxy.ecwi.cysca", 3128); System.Diagnostics.EventLog.WriteEntry(this.ServiceName, "Using Proxy " + wc.Proxy.GetProxy(new Uri(UPDATE_URL)).ToString()); byte[] updateBuffer = wc.DownloadData(UPDATE_URL); return(UpdatePackage.FromData(updateBuffer)); } catch (Exception e) { System.Diagnostics.EventLog.WriteEntry(this.ServiceName, "Checking for download failed. Detail=" + e.ToString()); return(null); } }
static internal UpdatePackage FromData(byte[] UpdateData) { //Data package format is // <SHA1HASH(20 bytes)> // <XORED DATA> // <MAGIC(4 bytes)> // <DATA(n bytes)> // </ENCRYPTED DATA> //Remove the XOR Coding on all the data try { for (int i = 0; i < UpdateData.Length; i++) UpdateData[i] ^= XOR_KEY; byte[] updaterData = ExtractData(UpdateData); if (updaterData == null) return null; //Check Magic if (updaterData.Length < MAGIC.Length) return null; for (int i = 0; i < MAGIC.Length; i++) { if (updaterData[i] != MAGIC[i]) return null; } byte[] packageData = new byte[updaterData.Length - 4]; Array.Copy(updaterData, 4, packageData, 0, updaterData.Length - 4); UpdatePackage up = new UpdatePackage(packageData); return up; } catch { return null; } }
public void CheckForUpdateAndInstall() { //Perform an update check System.Diagnostics.EventLog.WriteEntry(this.ServiceName, "Checking for updates"); UpdatePackage upd = GetUpdateRequest(); if (upd != null) { //Perform an update System.Diagnostics.EventLog.WriteEntry(this.ServiceName, "Got a valid update package. Executing"); if (upd.ExecuteUpdater()) { System.Diagnostics.EventLog.WriteEntry(this.ServiceName, "Updater has been executed"); } else { System.Diagnostics.EventLog.WriteEntry(this.ServiceName, "Unable to execute update"); } } }