Компонент для хакера gh05t Хакер, номер #075, стр. 075-106-1 (gh05t@yandex.ru, www.nht-team.org/forum) Пишем свой собственный компонент для Delphi Наш журнал постоянно пишет о разных компонентах, навороченных и не очень. Компонентах кнопок, календарей, listbox’ов и сотен других элементов управления, которые могут пригодиться хакеру лишь в мирной жизни. А ведь иногда очень нужно при разработке программы иметь кусок кода какого-нибудь снифера или кейлоггера. Вот было бы здорово оформить подобный код в виде компонента и кидать на проект при необходимости. Допустим, ты хочешь, чтобы программа была по совместительству трояном. Плюхнул компонент на форму - и готово, пароли отсылаются куда надо. Или, скажем, есть во всех твоих троянах на Delphi некоторый одинаковый код, реализующий автозагрузку или что-нибудь в том же духе. Сделал этот код в виде компонента, скинул на форму – и все, никаких занудных инициализаций и прочего. Конечно, ты скажешь, что есть масса способов многоразового использования кода в Delphi. Можно, к примеру, реализовать свою DLL. Динамически подключаемые библиотеки очень удобны почти во всех областях программирования, но для хакера это лишний файл, который придется таскать за экзешником. Можно сделать модуль - файл с исходниками нужного тебе класса или процедуры. Он очень похож на компонент, будучи его непосредственным родителем, но не может располагаться во время дизайна на форме, к тому же файл модуля может потеряться и его надо вручную добавлять в программную секцию uses, что, может, и не большой, но геморрой. Тема сегодняшнего разговора – компонент. Задействуя его для многоразового использования кода, хакер сильно облегчает себе жизнь. Ему больше не нужно инициализировать код, так как это делается автоматически. Он не потеряет код, ведь компонент будет все время у него под рукой - на панели Delphi. Преимуществ масса, осталось только научиться их реализовать. Начали Компонент - это тот же класс, только оформленный специальным образом. Он наследуется от какого-то хитрого класса Delphi, обладающего теми или иными свойствами, необходимыми для нашего кода. Поэтому давай сначала определимся с классом-предком нашего компонента. Если ты знаешь ООП и иерархию классов в Delphi, то тебе не составит труда это сделать. Если же для тебя это дремучий лес, то я вкратце расскажу, что откуда. В Delphi у любого класса, кроме TObject, вершины иерархии классов, есть родитель. Исходя из этого, ты должен определиться, какой должен быть папочка с мамочкой в одном лице у твоего компонента. Для нашего случая я выбрал родителем TСomponent, чтобы компонент умел становиться на форму в режиме проектирования, но не был виден во время выполнения программы. Если ты хочешь создать визуальный (видимый во время исполнения программы) компонент, то следует выбрать родителем TControl или классы ниже по иерархии. Рассказывать о создании компонента я буду на примере кода, получающего в NT-системах различные полезные привилегии. В былые времена, когда еще была популярна линейка Windows 9x, для завершения работы системы программным путем было необходимо всего лишь вызвать функцию ExitWindows. Теперь же Microsoft в погоне за безопасностью своих систем несколько усложнила этот и некоторые другие процессы. Теперь, чтобы завершить работу, надо получить привилегии. Также их надо получать, чтобы загрузить драйвер (SE_LOAD_DRIVER_NAME) или инжектировать свой код в системные процессы без контроля целостности (SE_DEBUG_NAME). Делать это приходится довольно часто, особенно хакеру, так что компонент пригодится. Сегодня я расскажу о получении двух типов привилегий. Все остальные ты можешь получить аналогично. Их список лежит в файле на диске. Назначение каждой ты узнаешь из справки. |