Blog. Just Blog

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

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

Как сделать, чтобы окно WinRAR закрывалось по Esc

29.08.2016 | Категория: Software | Автор: ManHunter

Как сделать, чтобы окно WinRAR закрывалось по Esc

Всем хорош архиватор WinRAR, но есть у него один недостаток. Этот недостаток заключается в том, что главное окно GUI-версии архиватора закрывается только по Alt-F4 или по нажатию на крестик. Очень неудобно, тем более, что архиватор не является программой, которая постоянно должна быть на экране. Отработал задачу - завершил работу. Автора уже просили сделать опциональным закрытие по Esc, но Евгений эту просьбу проигнорировал. Придется нам самим избавляться от этого неудобства.

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

Запись в архивы SAR, PRS и CAR без помощи архиватора

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

Первый и самый простой из виденных архивов - SAR, сокращенное название от "Streamline Arching Utility" производства компании Streamline Design. Единственная существующая версия датируется 1993 годом. Файлы в архиве предваряются небольшим заголовком, общего заголовка архива нет, признак завершения архива - нулевой байт вместо следующего заголовка.
  1. ;---------------------------------------------
  2. ; SAR Header
  3. ;---------------------------------------------
  4. shlen   db      ?         ; Header length
  5. shcrc   db      ?         ; CRC of header
  6. smeth   rb      5         ; Compression method (' LH0 ' = store)
  7. sosize  dd      ?         ; Original file size
  8. scsize  dd      ?         ; Compressed file size
  9.         db      ?         ; unknown
  10.         db      ?         ; unknown
  11.         db      ?         ; unknown
  12.         db      ?         ; unknown
  13. sunkn1  db      ?         ; File attribute? (20h)
  14. sunkn2  db      ?         ; unknown (01h)
  15. slen    db      ?         ; Filename size
  16. sfname  rb      (?)       ; Filename (ASCII)
  17. sfcrc   dw      ?         ; 16-bit CRC
  18. sunkn3  db      ?         ; unknown (20h)
  19.         db      ?         ; unknown
  20. shend   db      ?         ; unknown
Мнемокода "(?)" в FASM нет, просто таким образом я обозначил текстовую строку для записи имени файла неопределенной длины. В реальном проекте будет достаточно MAX_PATH или вообще фиксированного размера.
  1. ; Признак окончания архива - нулевой байт
  2. tail    db      0
  3. tail_length   = $-tail 
Некоторые поля мне не удалось идентифицировать, в заголовке они отмечены комментарием "unknown", они должны быть заполнены нулевыми значениями, если не указано другого.

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

Запись в архивы ACE, HA и LIM без помощи архиватора

22.04.2013 | Категория: Образ мышления: Assembler | Автор: ManHunter
Предлагаю вашему вниманию третью, заключительную (надеюсь) статью про запись в архивы различных форматов без помощи архиваторов. Напомню, что в первой части были описаны наиболее популярные архиваторы, во второй части я начал рассказывать про более редкие и экзотические архиваторы, а сейчас тему экзотики можно будет закончить. Как и в предыдущей статье, к каждому примеру приложен сам архиватор и описание внутреннего формата его архивов, чтобы вам не пришлось их искать.

Начну с формата ACE. Это сравнительно свеженький продукт, по крайней мере есть версия под Windows, а сайт датирован 2000-м годом. Разработчики утверждают, что по степени сжатия чуть ли не превосходят архиватор RAR. Однако, в дикой природе я пока что не встречал чего-либо, упакованного этим архиватором, поэтому он и попал в категорию экзотических. Но внутренний формат архивных файлов .ACE очень простой. Не используются никакие "хвосты" в конце архива, есть только главный заголовок архива, после которого идут подряд упакованные файлы с заголовками. Формат заголовка следующий:
  1. ;---------------------------------------------
  2. ; ACE Header
  3. ;---------------------------------------------
  4. ahcrc   dw      ?                       ; CRC32x of the header
  5. ahsize  dw      ?                       ; Size of the header
  6. ahtype  db      ?                       ; Header type (01 = files)
  7. aflags  dw      ?                       ; Header flags (8001h)
  8. acsize  dd      ?                       ; Compressed file size
  9. aosize  dd      ?                       ; Original file size
  10. adtm    dd      ?                       ; Date/Time
  11. aattr   dd      ?                       ; File attributes
  12. afcrc   dd      ?                       ; CRC32x of the file
  13. ainfo   dd      ?                       ; Type and quality of compression
  14. ares    dw      ?                       ; Unknown
  15. aflen   dw      ?                       ; Filename size
  16. afname  rb      (?)                     ; Filename (ASCII)
Архиватор ACE поддерживает длинные имена файлов Windows, поэтому поле для хранения имени файла afname обозначено уже знакомым вам мнемокодом (?), то есть текстовая строка неопределенной длины. В нашем случае хватит MAX_PATH или другой фиксированной длины.

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

Запись в архивы ARC, ZOO и LHZ без помощи архиватора

20.02.2013 | Категория: Образ мышления: Assembler | Автор: ManHunter
В первой части статьи о записи в архивы без помощи архиваторов я разобрал внутренний формат наиболее популярных современных архиваторов. Как я понял, особого интереса статья не вызвала, но материал на новую статью уже был практически подготовлен. Не пропадать же добру. В этой части я расскажу о том, как внедряться в более редкие форматы архивов: ARC, ZOO и LHZ без использования сторонних приложений. Поскольку такие раритеты найти уже проблематично, к каждому примеру я приложил сам архиватор и описание внутреннего формата его архивов. Ну а совсем экзотические архиваторы рассмотрены в третьей части статьи.

ARC - формат архивов одноименного архиватора от компании System Enhancement Associates, который был достаточно широко распространен в 80-90-х годах прошлого века. Примечательно, что параметры его командной строки в последующем стали эталоном практически для всех других архиваторов с их появления и до нашего времени. Этот же формат архивов (но с расширением .PAK) также имеет архиватор PAK. Сейчас для операционных систем Windows появился архиватор FreeArc, который создает архивы с таким же расширением .ARC, но они имеют другой формат. Здесь я рассмотрю именно старый, DOS'овский формат архивов ARC.
  1. ;---------------------------------------------
  2. ; ARC/PAK Header
  3. ;---------------------------------------------
  4. csig    db      ?                       ; Sign
  5. cmeth   db      ?                       ; Compression method (2 = store)
  6. cfname  rb      13                      ; 12 char File name ASCIIZ
  7. ccsize  dd      ?                       ; Compressed file size
  8. cdtm    dd      ?                       ; Date/Time
  9. cfcrc   dw      ?                       ; 16-bit CRC
  10. cosize  dd      ?                       ; Original file size
Обратите внимание, что поле для хранения имени файла имеет фиксированный размер 13 символов (формат имени 8.3 + нулевой символ). Когда создавался этот архиватор, про длинные имена файлов никто даже не мечтал.
  1. ; Признак окончание архива
  2. tail    db      1Ah,00
  3. tail_length   = $-tail
Признаком окончания архива является двухбайтовый "хвост", который записан после последнего файла. Больше никаких особенностей нет, формат очень простой, многотомные архивы, блокировки от изменений и прочие новомодные штучки не поддерживаются, поэтому процесс внедрения также очень простой.

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

Запись в архивы 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-архивы можно безопасно внедряться. Обязательно надо проверять флаговые биты в основном заголовке архива и пропускать заблокированные, многотомные, непрерывные архивы и архивы с цифровой подписью. Все эти проверки вы сможете сделать самостоятельно, здесь я их описывать не буду.

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

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