Blog. Just Blog

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

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

Ассемблер: получаем имя файла оболочки

27.09.2017 | Категория: Образ мышления: Assembler | Автор: ManHunter
В этой статье я расскажу, как можно программно получить имя файла оболочки Windows. Зачем это нужно? Например, есть программа, которая инжектит свою библиотеку в работающую копию explorer.exe и при этом подразумевает, что такой процесс в системе гарантированно должен присутствовать. В подавляющем большинстве случаев действительно все работает, никаких нареканий нет. Но стоит запустить программу под альтернативным шеллом, например, Aston Desktop, и она неизбежно падает с ошибкой, потому что explorer.exe в системе вообще не запущен. Проверки на соответствие оболочки в программе нет, и вместо корректного информирования пользователя о причинах невозможности запуска мы получаем фатальное падение. И хорошо, если не вместе с системой.

Чтобы найти процесс оболочки, сперва надо определить ее главное окно. В MSDN для этого рекомендуют воспользоваться следующим кодом:
  1.         ; Найти окно с классом "Progman"
  2.         invoke  FindWindow, szClass, NULL
  3.         ...
  4. szClass db 'Progman',0
Недостатки такого способа, надеюсь, очевидны. Ничто не мешает любому приложению создать окно с классом "Progman", а при отсутствии запущенного штатного шелла это гарантированно приведет к неверным результатам.

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

Quick Task Terminator 1.4

03.05.2017 | Категория: Мои программы | Автор: ManHunter

Скриншот программы Quick Task Terminator

Программа Quick Task Terminator предназначена для принудительного завершения процессов, а также для получения краткой информации о пути запуска, параметров командной строки и версии запущенных процессов. Также из меню программы можно принудительно перезагрузить или выключить компьютер или отправить его в режим гибернации. Комбинация "горячих" клавиш Alt+Ctrl+Shift+Win+K убивает процесс, окно которого активно в данный момент, что позволяет аварийно выходить из зависших полноэкранных приложений. Alt+Ctrl+Shift+Win+I - информация о процессе, окно которого активно в данный момент. Alt+Ctrl+Shift+Win+M - открыть список процессов (аналог клика на иконке). "Горячие" клавиши можно изменить в настройках программы. Как и остальной мой софт, Quick Task Terminator написан для личных нужд, поэтому обладает только нужным мне функционалом. Прототипом для его создания стал плагин Terminator от оболочки Aston, к которому я в свое время очень привык.

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

Получение информации о другом процессе

17.05.2013 | Категория: Образ мышления: Assembler | Автор: ManHunter
Возможность получения информации о стороннем процессе раскрывает перед программистами и пользователями широкие возможности. Это могут быть продвинутые менеджеры процессов, антивирусные и антитроянские программы, утилиты для реверсной инженерии и многое другое. У меня, к примеру, подобные функции используются в программе Quick Task Terminator. Давайте посмотрим, как это делается. Для начала надо описать структуры, необходимые для работы с процессами. В стандартном комплекте FASM их, естественно, нет, но это и неудивительно.
  1. ; Структура для получения данных о процессе под Win32
  2. struct PROCESS_BASIC_INFORMATION
  3.     ExitStatus       dd ?
  4.     PebBaseAddress   dd ?
  5.     AffinityMask     dd ?
  6.     BasePriority     dd ?
  7.     uUniqueProcessId dd ?
  8.     uInheritedFromUniqueProcessId dd ?
  9. ends
  10.  
  11. ; Структура PEB процесса под Win32
  12. ; Process Enviroment Block или блок окружения процесса
  13. ; Содержит все параметры пользовательского режима, ассоциированные
  14. ; системой с текущим процессом
  15. struct PEB
  16.     InheritedAddressSpace    db ?
  17.     ReadImageFileExecOptions db ?
  18.     BeingDebugged            db ?
  19.     b003                     db ?
  20.     Mutant                   dd ?
  21.     ImageBaseAddress         dd ?
  22.     Ldr                      dd ?
  23.     ProcessParameters        dd ?
  24. ends
  25.  
  26. ; Юникодная строка в Win32
  27. struct UNICODE_STRING
  28.     Length                   dw ?
  29.     MaximumLength            dw ?
  30.     Buffer                   dd ?
  31. ends
  32.  
  33. ; Структура RTL_USER_PROCESS_PARAMETERS под Win32
  34. struct RTL_USER_PROCESS_PARAMETERS
  35.     MaximumLength            dd ?
  36.     Length                   dd ?
  37.     Flags                    dd ?
  38.     DebugFlags               dd ?
  39.     ConsoleHandle            dd ?
  40.     ConsoleFlags             dd ?
  41.     StdInputHandle           dd ?
  42.     StdOutputHandle          dd ?
  43.     StdErrorHandle           dd ?
  44.     CurrentDirectoryPath     UNICODE_STRING
  45.     CurrentDirectoryHandle   dd ?
  46.     DllPath                  UNICODE_STRING
  47.     ImagePathName            UNICODE_STRING
  48.     CommandLine              UNICODE_STRING
  49. ends
В сегменте данных на основании структур опишем необходимые нам массивы для чтения данных о процессе.
  1. section '.data' data readable writeable
  2. ...
  3. ; Данные о 32-битных процессах
  4. Info            PROCESS_BASIC_INFORMATION
  5. peb             PEB
  6. pparam          RTL_USER_PROCESS_PARAMETERS
Подготовительный этап завершен, можно переходить к основной части. Получение информации о процессе выполняется в несколько стадий. Сперва надо открыть процесс для чтения и получения данных, затем с помощью функции NtQueryInformationProcess надо прочитать общую информацию о процессе в структуру PROCESS_BASIC_INFORMATION (с параметром ProcessBasicInformation). Имейте в виду, что приложение, которое выполняет такой запрос, должно обладать соответствующими привилегиями. Затем надо прочитать блок окружения процесса PEB, который находится по адресу, определенному в PebBaseAddress структуры PROCESS_BASIC_INFORMATION. Дальше нам надо загрузить параметры процесса в структуру RTL_USER_PROCESS_PARAMETERS, адрес которой определен в структуре PEB параметром ProcessParameters. На самом деле в PEB содержится гораздо больше различных значений, но нас интересует только эта структура. Именно в ней записана нужная нам информация - путь к исполняемому файлу процесса и его командная строка.

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

Исследование защиты программы APIS32

16.04.2013 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы APIS32

APIS32 - утилита для просмотра функций API, используемых тем или иным приложением Windows. Вам достаточно выбирать нужные вам функции из списка, запускаете программу-жертву, а APIS32 выдаст полный отчет о всех вызовах этих функций из нее. Если я не ошибаюсь, это одна из первых программ такого рода, но автор явно погорячился, сделав ее платной. Инструменты для реверса просто обязаны быть бесплатными.

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

Управление другим приложением из своей программы

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


Наг-скрин Total Commander

Чтобы работать с содержимым окна, сперва надо узнать его хэндл. Проще всего воспользоваться функцией FindWindow, указав в качестве параметра наименование класса наг-скрина. Его можно посмотреть при помощи моей программы WinDowzer или любой другой аналогичной программы. Противное окно имеет название класса TNASTYNAGSCREEN, первый шаг сделан. Теперь нам надо узнать хэндл нужной кнопки, для этого нужно изучить все связи родительских и дочерних объектов окна.

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

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