• XSS.stack #1 – первый литературный журнал от юзеров форума

Как уменьшить размер исполняемого файла Rust?

empty

CD-диск
Пользователь
Регистрация
06.02.2022
Сообщения
12
Реакции
0
Написал в свое пользование небольшой малварь-стиллер и возник вопрос - есть ли какие-то методы, с помощью которых можно уменьшить размер исполняемого файла? Я смотрел темы людей, занимающихся продажей своих стиллеров, и их билд весит около 200кб (это был стиллер на си), в то время как у меня вышло около 4мб. Это особенность раста? Или же мой код так раздут? Я пробовал приводить весь код в asm и компилировать потом этот asm в .ехе, с помощью gcc, но так и не смог это сделать, да и наверное это бессмысленно. Слышал, что это все из-за статической типизации, но если использовать динамическую, то придется таскать/подгружать все нужные .dll, стоит ли рассмотреть такой вариант? Также, думал над тем, чтобы переписать все использующиеся библиотеки на голый WinApi (которые, конечно, разумно переписать, например - reqwest). Вот все библиотеки которые я использую:
Код:
[dependencies]
serde_json = "1.0"
aes-gcm = "0.10.2"
base64 = "0.21.2"
winapi = { version = "0.3.9", features = ["dpapi", "wincrypt", "wincon", "winuser", "winnls", "errhandlingapi"] }
rusqlite = { version = "0.29.0", features = ["bundled"] }
serde = { version = "1.0", features = ["derive"] }
rand = "0.8.5"
tar = "0.4.39"
flate2 = "1.0.26"
futures = "0.3.28"
tokio = { version = "1", features = ["full"] }
reqwest = { version="0.11.18", features = ["blocking"] }

И стоит ли вообще заморачиваться мне над весом? Если да, то какие есть методы для этого?
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Это особенность Rust, потому даже обычный hello world весит сильно больше, чем в си. Не забудь еще, что конечных экзе потом надо криптовать и он прибавит в весе.
Ну да, зависимости можно подсократить (зачем тебе понадобился Tar?), возможно оптимизацию выставить, но существенно это ничего не изменит.
Все что большое, можно грузить лоудером.
 
Выкинь reqwest и rusqulite, напиши свои реализации - билд станет значительно меньше
Помимо этого посмотри линки ниже:
 
Это особенность Rust, потому даже обычный hello world весит сильно больше, чем в си. Не забудь еще, что конечных экзе потом надо криптовать и он прибавит в весе.
Ну да, зависимости можно подсократить (зачем тебе понадобился Tar?), возможно оптимизацию выставить, но существенно это ничего не изменит.
Все что большое, можно грузить лоудером.
Немного не по теме, но можете порекомендовать какие-либо крипторы (или поскидывать материалы/статьи для ознакомления с этой сферой)? И есть ли смысл в нынешнее время использовать SFX архивы? На данный момент просто очень большая проблема со скантаймом, мне кажется SFX архив может помочь это обойти, но и в то же время, скорее всего, это тема сильно заезжена, это так?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вот этот раздел. Только далеко не все представленные там крипторы справятся с бинарником, вышедшим из под компилятора Rust.
Сама тема крипта экзе достаточно сложная и потому потребует глубокого погружения. Возможно целесообразно будет начать с крипта на уровне исходника. Это шифрование строк, защита от эмуляции. Это будет сильно легче. Но в любом случае нужно будет учиться на практике. Берем антивирус, файлик который детектится, и вперед в путь ;-)
Еще советую посмотреть посты и статьи юзера Quake3 с этого форума.
SFX против антивирусов давно мертв.
 
Немного не по теме, но можете порекомендовать какие-либо крипторы (или поскидывать материалы/статьи для ознакомления с этой сферой)? И есть ли смысл в нынешнее время использовать SFX архивы? На данный момент просто очень большая проблема со скантаймом, мне кажется SFX архив может помочь это обойти, но и в то же время, скорее всего, это тема сильно заезжена, это так?
Если реально пишешь для себя, а не для распространения. Можно сжать с помощью и банально алгоритма LZ или DEFLATE, реализация в коде Rust есть навалом. Дальше сохраняешь ввиде массива байт, если не умеешь конвертировать в правильный образ массива, можно взять готовый пример к примеру из GoNut

Пример после конвертации с помощью GoNut, exe файл в массив.
1692701662078.png
Далее просто используешь готовый сжатый массив.
Логика кода:
  1. Чтение exe файла
  2. Сжатия с помощью алгоритма который ты хочешь
  3. Сохраняем всё массив байт array_buf файл в .rs (Как описано в примере выше)
  4. Запуск в RunPe
  5. сборка проекта
Всё что описал выше, кроме 4 пункта это будет "Упаковщик написанный кое как, лишь сработало".....))
При реализации 4 пункта, тебе придётся повозится с загрузчиком. Я если четсно вообще 0 в крипторах.
Так как, тебе придётся ещё реализовать защиту своего чуда-юда. Тут есть кое какая защита в таком ввидё от статики, но нету эвристики.
Если ты намерен продавать свой стиллер, используя выше описанную мной, скажем так схему, то займись изучением Эвристики.
 

Вложения

  • 1692701650991.png
    1692701650991.png
    20.4 КБ · Просмотры: 31
Последнее редактирование:
Если реально пишешь для себя, а не для распространения. Можно сжать с помощью и банально алгоритма LZ или DEFLATE, реализация в коде Rust есть навалом. Дальше сохраняешь ввиде массива байт, если не умеешь конвертировать в правильный образ массива, можно взять готовый пример к примеру из GoNut

Пример после конвертации с помощью GoNut, exe файл в массив.
Далее просто используешь готовый сжатый массив.
Логика кода:
  1. Чтение exe файла
  2. Сжатия с помощью алгоритма который ты хочешь
  3. Сохраняем всё массив байт array_buf файл в .rs (Как описано в примере выше)
  4. Запуск в RunPe
  5. сборка проекта
Всё что описал выше, кроме 4 пункта это будет "Упаковщик написанный кое как, лишь сработало".....))
При реализации 4 пункта, тебе придётся повозится с загрузчиком. Я если четсно вообще 0 в крипторах.
Так как, тебе придётся ещё реализовать защиту своего чуда-юда. Тут есть кое какая защита в таком ввидё от статики, но нету эвристики.
Если ты намерен продавать свой стиллер, используя выше описанную мной, скажем так схему, то займись изучением Эвристики.
на моём опыте если ехе большой то у ав стояк на такой здоровый массив в коде
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Энтропия файлов означает степень случайности данных в файле и позволяет определить, содержит ли файл скрытые данные или подозрительные сценарии. Шкала случайности - от 0 (неслучайный файл) до 8 (полностью случайный файл, например, шифрованный файл). Чем больше может быть сжат блок, тем ниже значение энтропии; чем меньше можно сжать блок, тем выше значение энтропии.
Отклонения в значениях энтропии в файле могут указывать, что в файлах скрыто подозрительное содержимое. Например, высокие значения энтропии могут говорить о том, что данные сохранены в зашифрованном исжатом состоянии, а более низкие значения могут указывать на то, что во время выполнения служебная нагрузка расшифровывается и сохраняетсяв разных разделах.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх