Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Запись в архивы RAR, ZIP и ARJ без помощи архиватора

09.08.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Решил вспомнить свою юность, когда я занимался разработкой "самоходного программного обеспечения". Одной из особенностей моих творений было распространение не только через исполняемые файлы, но и через архивы различных форматов. Технология внедрения в архивные файлы не нова, она использовалась в разных вирусах еще со времен MS-DOS. Так как готовых решений на тот момент у меня не было, приходилось доходить до всего самому. Никакого вредоносного кода на этом сайте не появится, а вот некоторыми своими наработками по внедрению в архивы я с удовольствием поделюсь. Поскольку полноценно продублировать алгоритмы сжатия архиваторов в столь малом размере файла не представляется возможным, внедряться в архивы мы будем по методу "Store". Это означает, что файл в архив добавлен с опцией "без сжатия". Внутренние форматы различных архивных файлов, естественно, различаются, но у всех обязательно присутствуют служебные заголовки, используемые архиваторами, и, собственно, сами упакованные данные.

Самый простой для внедрения - формат RAR, используемый одноименным архиватором. Подробную спецификацию формата RAR можно почитать здесь.
  1. ;---------------------------------------------
  2. ; RAR Header
  3. ;---------------------------------------------
  4. rhcrc   dw      ?     ; --> Low-word CRC32 of fields in header
  5. rhtype  db      ?     ; Header type: 0x74
  6. rhflag  dw      ?     ; Bit flags
  7. rhsize  dw      ?     ; File header full size
  8. rcsize  dd      ?     ; Compressed file size
  9. rosize  dd      ?     ; Uncompressed file size
  10. rhoss   db      ?     ; Target OS version
  11. rfcrc   dd      ?     ; --> File CRC32
  12. rdtm    dd      ?     ; File Time/Date
  13. runp    db      ?     ; Archive version to extract
  14. rmeth   db      ?     ; Packing method (store)
  15. rnsize  dw      ?     ; File name size
  16. rfattr  dd      ?     ; File attributes
  17. rfname  rb      (?)   ; File name
Мнемокода "(?)" в FASM нет, просто таким образом я обозначил текстовую строку для записи имени файла неопределенной длины. В реальном проекте будет достаточно MAX_PATH или вообще фиксированного размера.
  1. ; "Хвост" архива - признак окончания данных
  2. tail    db      0C4h,03Dh,07Bh,00h,040h,07h,00h
  3. tail_length     = $-tail
Однако надо знать, что не во все RAR-архивы можно безопасно внедряться. Обязательно надо проверять флаговые биты в основном заголовке архива и пропускать заблокированные, многотомные, непрерывные архивы и архивы с цифровой подписью. Все эти проверки вы сможете сделать самостоятельно, здесь я их описывать не буду.

Читать статью целиком »
Просмотров: 17813 | Комментариев: 12

01 02 next
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2026
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 3 (0.0019 сек.) / Память: 4.5 Mb
Наверх