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

Запись в архивы ACE, HA и LIM без помощи архиватора
22.04.2013 | Категория: Образ мышления: Assembler | Автор: ManHunter
Предлагаю вашему вниманию третью, заключительную (надеюсь) статью про запись в архивы различных форматов без помощи архиваторов. Напомню, что в первой части были описаны наиболее популярные архиваторы, во второй части я начал рассказывать про более редкие и экзотические архиваторы, сейчас тему экзотики продолжу, а закончу исследования в четвертой части. Как и в предыдущей статье, к каждому примеру приложен сам архиватор и описание внутреннего формата его архивов, чтобы вам не пришлось их искать.Начну с формата ACE. Это сравнительно свеженький продукт, по крайней мере есть версия под Windows, а сайт датирован 2000-м годом. Разработчики утверждают, что по степени сжатия чуть ли не превосходят архиватор RAR. Однако, в дикой природе я пока что не встречал чего-либо, упакованного этим архиватором, поэтому он и попал в категорию экзотических. Но внутренний формат архивных файлов .ACE очень простой. Не используются никакие "хвосты" в конце архива, есть только главный заголовок архива, после которого идут подряд упакованные файлы с заголовками. Формат заголовка следующий:
Code (Assembler) : Убрать нумерацию
- ;---------------------------------------------
- ; ACE Header
- ;---------------------------------------------
- ahcrc dw ? ; CRC32x of the header
- ahsize dw ? ; Size of the header
- ahtype db ? ; Header type (01 = files)
- aflags dw ? ; Header flags (8001h)
- acsize dd ? ; Compressed file size
- aosize dd ? ; Original file size
- adtm dd ? ; Date/Time
- aattr dd ? ; File attributes
- afcrc dd ? ; CRC32x of the file
- ainfo dd ? ; Type and quality of compression
- ares dw ? ; Unknown
- aflen dw ? ; Filename size
- afname rb (?) ; Filename (ASCII)
Читать статью целиком »
Просмотров: 6720 | Комментариев: 18

Как узнать название шрифта в диалоговом окне приложения
14.03.2013 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для того, чтобы получить информацию о шрифте, используемом в окне или его отдельном элементе, можно применить следующий код.Code (Assembler) : Убрать нумерацию
- ; Отправить окну запрос на получение информации о шрифте
- invoke SendMessage,[hWindow],WM_GETFONT,NULL,NULL
- or eax,eax
- ; Данные о шрифте получить не удалось
- jz cant_get_font
- ; Получить объект с описанием шрифта
- invoke GetObject,eax,sizeof.LOGFONT,font
- ; Теперь в font.lfFaceName строка названия шрифта
Читать статью целиком »
Просмотров: 9507 | Комментариев: 7

Запись в архивы ARC, ZOO и LHZ без помощи архиватора
20.02.2013 | Категория: Образ мышления: Assembler | Автор: ManHunter
В первой части статьи о записи в архивы без помощи архиваторов я разобрал внутренний формат наиболее популярных современных архиваторов. Как я понял, особого интереса статья не вызвала, но материал на новую статью уже был практически подготовлен. Не пропадать же добру. В этой части я расскажу о том, как внедряться в более редкие форматы архивов: ARC, ZOO и LHZ без использования сторонних приложений. Поскольку такие раритеты найти уже проблематично, к каждому примеру я приложил сам архиватор и описание внутреннего формата его архивов. Ну а совсем экзотические архиваторы рассмотрены в третьей и четвертой частях статьи.ARC - формат архивов одноименного архиватора от компании System Enhancement Associates, который был достаточно широко распространен в 80-90-х годах прошлого века. Примечательно, что параметры его командной строки в последующем стали эталоном практически для всех других архиваторов с их появления и до нашего времени. Этот же формат архивов (но с расширением .PAK) также имеет архиватор PAK. Сейчас для операционных систем Windows появился архиватор FreeArc, который создает архивы с таким же расширением .ARC, но они имеют другой формат. Здесь я рассмотрю именно старый, DOS'овский формат архивов ARC.
Code (Assembler) : Убрать нумерацию
- ;---------------------------------------------
- ; ARC/PAK Header
- ;---------------------------------------------
- csig db ? ; Sign
- cmeth db ? ; Compression method (2 = store)
- cfname rb 13 ; 12 char File name ASCIIZ
- ccsize dd ? ; Compressed file size
- cdtm dd ? ; Date/Time
- cfcrc dw ? ; 16-bit CRC
- cosize dd ? ; Original file size
Code (Assembler) : Убрать нумерацию
- ; Признак окончание архива
- tail db 1Ah,00
- tail_length = $-tail
Читать статью целиком »
Просмотров: 8352 | Комментариев: 4

Мульти-плагин для PEiD, DiE, Bit Detector, SCANiT, ExeScan, FastScanner и PE Tools
10.01.2013 | Категория: Образ мышления: Assembler | Автор: ManHunter
Практически все современные анализаторы исполняемых файлов поддерживают внешние модули (плагины), значительно расширяющие их функционал. Это могут быть утилиты для извлечения ресурсов, узкоспециализированные анализаторы протекторов, распаковщики, редакторы исполняемых файлов и множество других модулей. Все хорошо и здорово, если бы не одно "но". Анализаторы чаще всего не совместимы по своим функциям взаимодействия с плагинами. Для решения этой проблемы некоторые авторы начали делать мульти-плагины, которые могут работать с несколькими типами анализаторов. Если мне не изменяет память, то первым таким плагином стал модуль определения точной версии ASProtect под названием VerA от известного реверсера PE_Kill. Он одинаково хорошо работал в PEiD и DiE. Я решил пойти дальше и сделать мульти-плагин, который поддерживает шесть различных анализаторов, а именно PEiD, DiE, Bit Detector, SCANiT, ExeScan и FastScanner, а также подходит для программы PE Tools. Остальные анализаторы исполняемых файлов и подавляющее большинство утилит для реверса, поддерживающие внешние модули, "заточены" на формат плагинов от PEiD, поэтому я их в этом списке даже не упоминаю.Начнем с формата плагинов для PEiD. Тут используются две функции - LoadDll и DoMyJob. Первая используется для получения имени плагина, вторая - непосредственно для работы плагина с загруженным файлом. С LoadDll ничего сложного:
Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------
- ; PEiD - запрос имени плагина
- ;-----------------------------------------------------------
- proc LoadDll
- ; Вернуть в регистре EAX указатель на строку названия
- mov eax,plugName
- ret
- endp
Читать статью целиком »
Просмотров: 7121 | Комментариев: 8

Как менять цвета элементов диалогового окна на Ассемблере
03.12.2012 | Категория: Образ мышления: Assembler | Автор: ManHunter
По умолчанию цвета диалоговых окон и элементов управления в приложениях соответствуют установленной палитре Windows. Но иногда бывает необходимо выделить другим цветом какой-нибудь текст в диалоговом окне, или же вообще раскрасить все окно в нужный вам цвет. Это сделать очень легко, надо лишь знать порядок вывода на экран диалоговых окон и их содержимого. При отрисовке каждого элемента диалогового окна ему обязательно передается одно из следующих сообщений: WM_CTLCOLORDLG - отрисовка самого окна, WM_CTLCOLORBTN - отрисовка кнопок, WM_CTLCOLOREDIT - отрисовка полей редактирования, WM_CTLCOLORSTATIC - отрисовка статических элементов, WM_CTLCOLORLISTBOX - отрисовка комбобоксов и выпадающих списков, WM_CTLCOLORMSGBOX - вывод окна сообщений и WM_CTLCOLORSCROLLBAR - отрисовка полосы прокрутки. Обработчик для всех этих сообщений может быть один. Главное, чтобы на этапе инициализации окна был создан объект "кисть" с фоновым цветом главного окна. Именно это значение должен всегда возвращать обработчик сообщение изменения цвета. Предварительный каркас такого приложения выглядит примерно так:Code (Assembler) : Убрать нумерацию
- ; Обработчик диалогового окна
- proc DialogProc hwnddlg,msg,wparam,lparam
- ...
- ; Обработка сообщения инициализации окна
- cmp [msg],WM_INITDIALOG
- je wminitdialog
- ; Обработка всех сообщений, связанных с установкой цвета
- cmp [msg],WM_CTLCOLORDLG
- je color
- cmp [msg],WM_CTLCOLORBTN
- je color
- cmp [msg],WM_CTLCOLOREDIT
- je color
- cmp [msg],WM_CTLCOLORSTATIC
- je color
- cmp [msg],WM_CTLCOLORLISTBOX
- je color
- cmp [msg],WM_CTLCOLORMSGBOX
- je color
- cmp [msg],WM_CTLCOLORSCROLLBAR
- je color
- ...
- ; Обработка инициализации окна
- wminitdialog:
- ; Основной цвет фона окна в формате RGB
- clrMain = 0012FFFFh
- ; Создать объект фоновой кисти для всего окна
- invoke CreateSolidBrush,clrMain
- mov [hBrushBack], eax
- jmp processed
Читать статью целиком »
Просмотров: 13827 | Комментариев: 12
