24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Сап аноны. Стоит задача реализовать защиту от декомпиляции (лаба по информационной безопасности). Пе
Сап аноны. Стоит задача реализовать защиту от декомпиляции (лаба по информационной безопасности). Первое что приходит на ум это написать packer который шифрует исходный exe, и пишет его в PE секцию загрузчика. Но реализация этого подхода довольно сложная, вряд-ли получится защитить лабу. Можно ли как то реализовать по простому, по народному? Например просто зашифрованный екзешник дописать в конец файла загрузчика?
>>313191797 (OP) Обфускация исходного кода программы. А так полностью защититься невозможно. Можно только усложнить обратную разработку, но против дебаггера нет защиты.
Зашифруй свой бинарник с помощью AES или XOR. Добавь небольшой загрузчик, который на этапе запуска: Расшифровывает оригинальный код. Загружает его в память и вызывает (например, с помощью LoadLibrary для DLL или CreateProcess для EXE). или Вынеси критические части функционала в DLL или динамически загружаемый модуль. Шифруй/загружай эту DLL на этапе выполнения. Таким образом, основной EXE будет содержать минимальную логику, а скомпрометировать его без анализа DLL станет сложнее.
>>313191928 > Обфускация > Компилируемого языка А схуяли нельзя защититься от дебагера? Самошифрование, проверка целостоности. Есть еще ловушки для дебагера, я не помню, как называется эта техника, но от них дебагер падает.
>>313191797 (OP) Я когда писал малварь, то делал полиморфный движок. все на ассемблере чистом кстати. Я в рантайме искал хедеры пе файла, потом генерировал случайную функцию-енкриптор и функцию-декриптор (написал что-то вроде небольшого ассемблера) и ими шифровал бинарь. Но там куча подводных и это просто сложно. Сейчас пытаюсь что-то подобное сделать на расте, но уже с парой дизассемблер-ассемблер, чтоб модифицировать код, а не шифровать. Написать загрузчик пе файлов не так сложно, но можешь просто компилировать проект как шейред обжект, его кидать в местный /tmp на виндовсе и оттуда загружать (правда защита плохая будет ибо его можно будет перехватить, но для Лабы сойдёт). Алсо можешь попробовать защиту от бегущих дизассемблеров, погугли всякие трюки типа джамп-ин-зе-мидл и прочее. Другой вариант это написать небольшую виртуальную машину, и в ней запускать код. Вообще, звучит странно, где это тебе такие "лабы" дают? Это хуйня которой занимаются хакеры со стажем а не зелёные в провинциальных ПТУ. Может ты хоть намекнешь что тебе надо?
>>313191977 Потому что любая твоя защита от дебагера обходится, если екзешник запускается на машине которую ты не контролируешь, то твой экзешник взломают при достаточном желании. Ну самое эффективное можешь свою вм со своей архитектурой придумать и в нее твой экзешник перегонять.правда это работы на пару лет команды, а не уровень лабы
>>313192952 >функцию-енкриптор и функцию-декриптор Не сработает в современном мире, если у тебя файл не подписанный такую хуйню выполнит его любой антивирь ебнет моментально.
>>313192952 О, можешь дать гайдов на интеловский асм? Помимо той самой книги. Я вроде и понимаю, зачем нужны регистры и как пушить попить колить, но нет понимания, как реализовывать нужную мне логику вообще любую, дай мне абстрактное задание на написание проги сложнее хелловорлда на асме и уже обсер
На фоне этого начинаю считать себя клиническим ибмецилом, а людей, которые пишут на ассемблере - полубогами
>>313193017 >правда это работы на пару лет команды, а не уровень лабы Написать простую вм это нехуй делать, вопрос только в том, как ОП будет под нее собирать свой код. Но если ему достаточно показать хелоуворлд, то может сразу на байткоде пример написать.
>>313193055 Простая вм и не защитит код нихуя, это должна быть жоподробительная хуйня для дебага, а не просто лишний шаг с через трансяторы вида jmp ->jmpByVasyaPetushok
>>313191977 > Есть еще ловушки для дебагера, я не помню, как называется эта техника, но от них дебагер падает. Обходится буквально в два нажатия включением скиллахайда в 50% и титанхайда в 99% случаев
>>313193052 Хз, по поводу структуры - само получилось. Я как-то никогда этому и не учился. Я впервые изучал по "Программирование на языке ассемблера. NASM для ОС UNIX" Столярова. Она маленькая, но хорошо знакомит с понятиями. Правда она рассказывает про i386, так что amd64 я учил сам потом. Если хочешь, то кидай телегу, могу попробовать помочь.
>>313193373 И в скольких более-менее приличных вузах дс-2 ты учился или преподавал? Мне кажется, или тут где-то замешана ошибка выжившего? Типичная специальность ИБ это дрочка законов и программирование разных операций на матрицах. Я могу быть неправ конечно, тоже не слишком много вузов повидал.
>>313193045 У меня работало, потому что во-первых, функции были размером по >500 байтов, плюс все происходило прямо на месте (я не выделял памяти с правами на выполнение, у меня были модифицированы права .text так, что туда можно было писать. Вроде ав ничего не находил, не знаю.
>>313193525 Ну бля в таком случае можно пройтись и экзешнику и заменить все джампы на нопы и просто в начало мейна засунуть хуйню которая делает наоборот. >>313191797 (OP) >Первое что приходит на ум это написать packer который шифрует исходный exe, и пишет его в PE секцию загрузчика. Соснешь хуйца в борьбе с виндовс дефендером, он будет принципиально удалять эту поеботу с твоего компа в момент компиляции даже если ты его выключишь, только удаление с корнями его остановит.исключение по какой то причине он игнорирует в этом случае, хз почему >Например просто зашифрованный екзешник дописать в конец файла загрузчика? Это тоже
>>313193623 Ну хз, когда ты это делал, последние пару лет целом виндовский дефендер орет на любое действие которое выходит за рамки доступа к аппдате если у тебя не подписанный экзешник.
>>313193736 >Заменить все джампы на нопы Очень смешно. Сразу видно, что ты с машинным кодом никогда не работал. У инструкций на амд64 процессорах разная длинна, тебе чтоб такое по-нормальному реализовать придется писать целый дизассемблер (что нихуя не просто).
>>313193837 И хуле там не сработает? Какая разница что длина разная если ты потом это ревертишь, это просто замена байтиков на байтики которую только дизассемблер увидит.
>>313193897 Ну в целом можно, но нахуя? Это имело бы смысл, если бы сохранялась целостностьправильность кода, а так легче просто ксором по .text'у пройтись и всё.
>>313193897 >>313194025 Кстати тут важно, что это будет на биекция. Есть куча разных видов jcc, и если ты их всех заменишь на ноп, то тебе нужно будет ещё угадать где какой.
>>313194025 Так целостность сохранится путем того что ты потом сам это фиксишь >а так легче просто ксором по .text'у пройтись и всё. Тут по факту, но это обойти легче, это сразу заметишь, а на то что джапы заменили уйдет секунд 40.
>>313194382 Ну тут по факту все конечно. А вообще оп можешь просто написать хуйню которая во время компайла будет тебе opaque predicate сувать везде, по факту делает нихуя, реализовать легко, разбираться в дизасемблере без скрипта деобфускаратора который у всех есть заебешься а если они еще и во время рантайма будут такими становится то и с скриптом заебешься.
Пиздос. Зачем нужна защита от декомпиляции? Я правильно понял что теперь в российских вузах учат как сосать хуй так называемым "правообладателям"?
Сейчас кресты это то же самое что было в 90х. У меня тут книжка 21 день там цпп похоже на то, что есть сейчас? На сколько я знаю, там теперь все надо делать через новую стандартную библиотеку
>>313197961 Зачем ты бампаешь дальше скажи мне зачем ты бампаешь дальше чтобы получать такие ответы? >>313195748 >>313198230 >>313198314 Зачем ты бампаешь тебе уже сказали всё что можно было и больше зачем ты бампаешь
>>313193736 >Соснешь хуйца в борьбе с виндовс дефендером, он будет принципиально удалять эту поеботу с твоего компа в момент компиляции даже если ты его выключишь Я пробовал эту репу, дефендер ругался, но при отключении пропускал https://github.com/frkngksl/Huan?tab=readme-ov-file
Просто удивительно, как в месте, где треды про монти-холла или 0.9999(9) = 1 уходят в бамплимит, можно также встретить такого рода вопросы и адекватные ответы на них. Или Абу иногда нагоняет интеллектуальных ботов для разряжения обстановки?
>>313198969 >но при отключении пропускал У виндовс дефендера есть фича включатся самому и вырезать твои файлы через рандомный промежуток времени, мне эту хуйету через какие то скрипты с трастединсталером пришлось из системы вырезать что бы оно мне софт не вырезало
>>313202142 Блять, было бы смешно, если бы это реально подобный гений так разводил на информацию об обходе av которой в интернете и так полно. Ещё забавно, что оп не ставит точки в конце, как и этот >>313193373. Может просто догадки, но блять, лол.
>>313202765 > чатгпт так и не сгенерил рабочий код > не было времени дебажить > 20 строк высера первокурсника > 20 строк высера первокурсника > 20 строк высера первокурсника Пердикс, ты ахуел!
>>313202765 Это же какой-то кал, а не решение твоей задачи, я думал, что тебе в онлайне надо уже загруженный в память исполняемый файл модифицировать, а тут просто через побитовое сложение байта по модулю два расшифровываешь исполняемый, это сработает только в том случае, если у тебя в исходном запускаемом файле будет команда на модификацию последующих запускаемых файлов, только ни один защитник не позволит такого сделать файлу из неизвестного источника
Как же ИИ скоро заменит макак "кодеров". Ууух бля. Хехех. Зарплаты уровня Васяна - фрещеровщика и недовольные ебальники все имаджинировали? В какое удивительное время мы все сейчас живем.
>>313191797 (OP) Повезло вам. У нас на ИБ какое то дерьмо преподают, уже третий год рассказывают поверхностно о правовой составляющей базовые понятия и о передаче сигнала через провода. А единственный препод с маломальски интересной инфой предпочел не ходить на пары.
>>313204172 Промпт-инженер, оп-хуй, ИИ-шиз. Столярова не хватает, хотя он формально был упомянут. Какой же хороший тред, однако! Спокойствие максимальное чувствую.
сынок к чему вопросы дедушке задаешь где и как был в какой яме сидел сынок по уделу жить надо нах согласно моему это питаться гречкой из кастрюли и запивать черноголовкой понимаешь сынок все просто очень а кто где и как по лужам прыгал ебать не должно ибо придет народ и худо будет даже не поможет огненная кара с небес ибо выжившие из гог магог бессмертны и причастны
>>313203018 Ну риальна не было! Щас сел и дофиксил высер гпт. Вроде работает теперь. Но я все равно не доверяю этой хуйне на скринах, что то мне подсказывает что можно сделать проще.......
>>313205157 Думаешь он доебался, что аргументов дохуя чтоли? Так там половина опциональна и можно нули передавать. Из нужных только необходимые для работы указатели.
>>313205268 Что тебе не нравится в этой красивой инъекции? ЗАчем ты нас мучаешь? Какая у тебя цель? Лабу написать, или что нахуй? Максимально коротко лабу написать?
Да, можно реализовать более простую защиту от декомпиляции, используя метод шифрования исполняемого файла и добавления его в конец файла загрузчика. Вот несколько подходов, которые могут помочь вам в этом:
1. Шифрование исполняемого файла: - Вы можете зашифровать ваш исполняемый файл (EXE) с помощью простого алгоритма шифрования, например, AES или XOR. Затем сохраните зашифрованные данные в конце вашего загрузчика.
2. Добавление зашифрованного файла: - После шифрования вы можете добавить зашифрованные данные к вашему загрузчику. Это может быть сделано, например, с помощью функции `WriteFile`, чтобы дописать зашифрованный файл в конец.
3. Декомпрессия и запуск: - При запуске вашего загрузчика вы можете сначала прочитать зашифрованные данные, расшифровать их в памяти и затем выполнить расшифрованный код. Для этого можно использовать функции Windows API, такие как `CreateProcess` или `VirtualAlloc`.
4. Обфускация кода: - Дополнительно вы можете использовать обфускацию кода вашего загрузчика, чтобы усложнить анализ и декомпиляцию.
5. Проверка целостности: - Вы можете добавить проверку целостности зашифрованного файла, чтобы убедиться, что он не был изменен.
### Примерный алгоритм:
1. Шифрование: - Зашифруйте ваш EXE файл и сохраните его как `encrypted.exe`.
2. Создание загрузчика: - Создайте загрузчик, который будет: - Открывать `encrypted.exe`. - Чтение зашифрованного содержимого. - Расшифровывать содержимое в памяти. - Запускать расшифрованный код.
### Пример кода (псевдокод):
```python import os from Crypto.Cipher import AES import subprocess
def decrypt_and_run(encrypted_data, key): # Расшифровка данных и запуск pass
# Основной код key = b'my_secret_key_16' # Ключ шифрования encrypt_file('my_program.exe', key)
# Загрузчик with open('encrypted.exe', 'rb') as f: encrypted_data = f.read()
decrypt_and_run(encrypted_data, key) ```
### Замечания: - Обратите внимание, что такие методы могут обеспечить лишь базовую защиту. Опытные декомпиляторы и реверс-инженеры могут все еще найти способы обойти вашу защиту. - Всегда тестируйте ваш код на различных системах, чтобы убедиться, что он работает корректно. - Убедитесь, что вы соблюдаете все законы и правила, касающиеся использования шифрования и защиты программного обеспечения.
Да, вы можете реализовать более простую защиту от декомпиляции, добавив зашифрованный исполняемый файл в конец загрузчика. Этот подход не требует сложной реализации и может быть достаточно эффективным для учебной лабораторной работы. Вот основные шаги, которые вы можете выполнить:
### 1. Шифрование исполняемого файла
Используйте простой алгоритм шифрования, например, XOR или AES, чтобы зашифровать ваш исполняемый файл (EXE). Это можно сделать с помощью библиотеки, такой как OpenSSL или Crypto++.
### 2. Создание загрузчика
Создайте загрузчик, который будет выполнять следующие действия:
После шифрования вы можете дописать зашифрованные данные в конец вашего загрузчика. Это можно сделать с помощью стандартных функций работы с файлами в C++.
### Пример кода
Вот примерный код, который иллюстрирует, как это можно сделать:
// Простой XOR шифратор void xorEncryptDecrypt(std::vector<char>& data, char key) { for (size_t i = 0; i < data.size(); ++i) { data ^= key; } }
// Функция для чтения файла в вектор std::vector<char> readFile(const std::string& filename) { std::ifstream file(filename, std::ios::binary); return std::vector<char>((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); }
// Функция для записи данных в файл void writeFile(const std::string& filename, const std::vector<char>& data) { std::ofstream file(filename, std::ios::binary); file.write(data.data(), data.size()); }
// Запуск расшифрованного кода // Здесь вы можете использовать VirtualAlloc и CreateProcess для выполнения кода в памяти // Это требует дополнительного кода и может быть сложным }
// Запись зашифрованного файла writeFile(encryptedFile, originalData);
// Дописывание зашифрованного файла в конец загрузчика (текущего исполняемого файла) std::ofstream loaderFile("loader.exe", std::ios::binary | std::ios::app); loaderFile.write(originalData.data(), originalData.size()); loaderFile.close();
// Запуск загрузчика loader(encryptedFile, key);
return 0; } ```
### Замечания:
1. Безопасность: Этот метод не обеспечивает сильной защиты. Опытные реверс-инженеры могут легко обойти его. Однако для учебной лаборатории это может быть достаточным.
2. Использование памяти: Для выполнения расшифрованного кода вам нужно будет использовать функции Windows API, такие как `VirtualAlloc` для выделения памяти и `CreateProcess` для запуска кода.
3. Тестирование: Убедитесь, что вы тестируете ваш код на различных системах и конфигурациях, чтобы гарантировать его работоспособность.
4. Законодательство: Убедитесь, что вы соблюдаете все законы и правила, касающиеся использования шифрования и защиты программного обеспечения.
1. Сбор ресурсов Соберите все ресурсы (файлы, данные), которые нужно встроить, и сохраните их в отдельной директории. Сериализуйте эти данные в единый бинарный файл. Это может быть архив (например, .zip) или просто последовательность бинарных блоков с метаинформацией (размеры, имена файлов). 2. Шифрование Используйте симметричный алгоритм шифрования (например, AES или XOR, если нужна простая реализация). Зашифруйте объединённый файл ресурсов с ключом, который будет встроен в код вашего загрузчика. Результат шифрования сохраните как отдельный бинарный файл. 3. Создание загрузчика Напишите программу-загрузчик, которая: Включает в себя зашифрованный файл ресурсов как бинарные данные (например, в секции .rsrc или как массив данных, встроенный в код). При запуске расшифровывает файл ресурсов в память. Достаёт нужные файлы или данные и использует их (например, запускает встроенный .exe или отображает шрифты/картинки). 4. Упаковка ресурсов в загрузчик Объедините зашифрованный файл ресурсов с загрузчиком: Встроить как бинарный массив в исходный код (используя генератор массивов, например xxd в Linux или bin2c). Или просто дописать в конец исполняемого файла и учитывать это при чтении. 5. Обфускация и защита Зашифруйте строки и ключи шифрования внутри кода загрузчика. Добавьте проверку целостности бинарного файла, чтобы обнаружить изменения. Используйте антивиртуализационные и антиотладочные трюки, чтобы усложнить анализ. 6. Сборка финального исполняемого файла Скомпилируйте загрузчик с встроенными ресурсами и зашифрованным кодом. Используйте упаковщики (например, UPX или custom packer), чтобы дополнительно усложнить анализ. Примечания Такой подход создаёт монолитный файл, который содержит все данные, но основная уязвимость будет в момент расшифровки — злоумышленник может проанализировать процесс исполнения. Если задача учебная, то можно упростить реализацию, например, использовать XOR вместо сложных алгоритмов шифрования.
>>313205992 Та мне похуй лол. За пидораса опа код напиши, так еще и в документацию залупную теперь лезть чтоли? Ахахха. Нахуй. Оп - хуй, а я скрыл тред.
Первое что приходит на ум это написать packer который шифрует исходный exe, и пишет его в PE секцию загрузчика. Но реализация этого подхода довольно сложная, вряд-ли получится защитить лабу. Можно ли как то реализовать по простому, по народному? Например просто зашифрованный екзешник дописать в конец файла загрузчика?