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

Запись в архивы 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
Читать статью целиком »
Просмотров: 8493 | Комментариев: 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
Читать статью целиком »
Просмотров: 7266 | Комментариев: 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
Читать статью целиком »
Просмотров: 14011 | Комментариев: 12

Вертикальный скроллер на Ассемблере
04.10.2012 | Категория: Образ мышления: Assembler | Автор: ManHunter
Я уже ранее приводил код горизонтального скроллера на Ассемблере, теперь пришло время вертикального скроллера. Такой эффект очень часто используется в различных кейгенах, окнах "О программе", демо-роликах, просмотрщиках текстовых файлов и подобных программах. Код основан на аналогичной процедуре от Av0id, я добавил в него несколько усовершенствований. Для настройки размеров и внешнего вида скроллера в сегменте данных определяются вспомогательные константы и структуры, не описанные в FASM:Code (Assembler) : Убрать нумерацию
- ; Настройки внешнего вида скроллера
- SCROLL_FONT_WIDTH = 8 ; Ширина символов текста
- SCROLL_FONT_HEIGHT = 8 ; Высота символов текста
- SCROLL_WIDTH = 430 ; Ширина окна скроллера
- SCROLL_HEIGHT = 350 ; Высота окна скроллера
- SCROLL_BACKCOLOR = 0808080h ; Цвет фона
- SCROLL_TEXTCOLOR = 000FFFFh ; Цвет текста
- SCROLL_SHADOWCOLOR = 0 ; Цвет тени
- SCROLL_SLEEP = 40 ; Скорость скроллирования
- SCROLL_SHADOW = FALSE ; Рисовать тень TRUE/FALSE
- ; Структуры для создания виртуального BMP-файла
- struct RGBQUAD
- rgbBlue db ?
- rgbGreen db ?
- rgbRed db ?
- rgbReserved db ?
- ends
- struct BITMAPINFO
- bmiHeader BITMAPINFOHEADER
- bmiColors RGBQUAD
- ends
Code (Assembler) : Убрать нумерацию
- section '.data' data readable writeable
- hThread dd ? ; Хэндл потока скроллера
- exit_flag dd ? ; Флаг завершения потока
- active_flag dd ? ; Флаг активности скроллера
- szTerminalFont db 'Terminal',0 ; Шрифт скроллера
- ; Файл с текстом скроллера
- szScrollerText file 'scroller.txt'
- db 0
Читать статью целиком »
Просмотров: 5413 | Комментариев: 0

Работа с файлами справки CHM на Ассемблере
20.08.2012 | Категория: Образ мышления: Assembler | Автор: ManHunter
Когда речь заходит о работе с файлами справки в формате CHM, то обычно все ссылаются на системный файл hh.exe, который вызывают с различными параметрами. Действительно, с его помощью можно просто открывать файл справки, а также открывать его на нужной странице (при условии, что заранее известно наименование ее HTML-файла в составе скомпилированной справки). Но с помощью hh.exe невозможно воспользоваться таким мощным инструментом, как поиск по ключевым словам. В этом случае мы можем воспользоваться всей мощью WinAPI и задействовать функцию HtmlHelp, которая находится в системной библиотеке HHCtrl.ocx. К сожалению, информации по ее использованию даже на MSDN очень мало, пришлось самостоятельно разбираться с некоторыми моментами. Для работы нам понадобятся определения некоторых констант:Code (Assembler) : Убрать нумерацию
- HH_DISPLAY_TOPIC = 00h ; Открыть страницу в файле справки
- HH_DISPLAY_INDEX = 02h ; Установить индекс на ключевое слово
- HH_KEYWORD_LOOKUP = 0Dh ; Поиск ключевого слова
- HH_CLOSE_ALL = 12h ; Закрыть все открытые окна справки
Первый пример, самый простой, это открытие файла справки на заранее известной странице.
Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ; CHM-файл
- szFile db 'php_manual_ru.chm',0
- ; Адрес страницы внутри скомпилированного CHM-файла
- szPage db 'res/function.http-send-data.html',0
- ...
- ; Сегмент кода
- section '.code' code readable executable
- ...
- ; Открыть CHM-файл на заранее известной странице
- invoke HtmlHelp,NULL,szFile,HH_DISPLAY_TOPIC,szPage
hh.exe php_manual_ru.chm::res/function.http-send-data.html
У этого метода есть один большой недостаток. Если в CHM-файле есть индекс, то после выполнения такой команды он останется на самом начале, тогда как правая информационная часть действительно откроется на нужной странице.
Читать статью целиком »
Просмотров: 7222 | Комментариев: 1
