Сейчас на форуме: Magister Yoda (+9 невидимых) |
eXeL@B —› Основной форум —› Нахождение кода обработки событий! |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 01 февраля 2008 15:52 · Поправил: Isaev · Личное сообщение · #1 Интересует обобщённый принцып нахождения в отладчике участка кода, отвечающего за обработку того или иного события определённого компонента (как это делает DeDe например), в частности для VC, т.к. для него декомпилеров не обнаружил (да и смысл пользоваться декомпилятором, который может пол часа анализировать код, когда нужно обычно узнать лишь адрес процедуры обработки onClick) Поэтому интересует ручной метод!!! Судя по расспросам каждый извращается как может, но не нормальным методом, который наверняка существует... Поэтому думаю тема будет интересна многим... Делимся опытом! ЗЫ: Просьба высказываться только по теме ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 27 августа 2008 11:23 · Личное сообщение · #2 |
|
Создано: 27 августа 2008 11:27 · Личное сообщение · #3 |
|
Создано: 27 августа 2008 11:55 · Поправил: Hexxx · Личное сообщение · #4 Isaev пишет: Интересует обобщённый принцып нахождения в отладчике участка кода, отвечающего за обработку того или иного события определённого компонента Он разный в зависимости от языка программирования и gui framework'a. Для MFC - один, для WxWidgets - другой, для Qt - третий и т.д. Каждый gui framework наворачивает уровни абстракции над виндовым апи. Если ты собрался понять где конкретно обрабатывается событие - тебе придется понять принципы работы всего фреймворка. Может даже оказаться что события "OnClick" там просто нет. Т.е. "клика" как понятия нет, в фреймворке оперируют другими событиями и твои попытки понять это все думая, что "тут как в делфи" - бесполезны. Например в Java приложениях вообще одно окно накотором все остальные элементы рисуются, т.е. там нет отдельных окон для кнопок, для edit'ов. Все рисованное, как будто набор прямоугольников. И бестолку пытаться искать там классы окон так, как это делается в MFC или VCL. Isaev пишет: в частности для VC, т.к. для него декомпилеров не обнаружил Ты пробовал писать MFC приложения в VC? ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 27 августа 2008 12:04 · Личное сообщение · #5 |
|
Создано: 27 августа 2008 20:54 · Личное сообщение · #6 PE_Kill пишет: Посмотрел бы хоть сорсы его чтобы так говорить. Скинь, я посмотрю! А про брутфорс поинеров в BSS и содержимое баз VMT для каждой версии, так что ж этот брутфорс нихрена не даёт при упаковке ехе файлов UPXом, а потом при ручной распаковке? Был бы брутфорс, не обсирасля б т.к. указатели то никуда не делись ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 27 августа 2008 20:56 · Личное сообщение · #7 |
|
Создано: 27 августа 2008 21:51 · Личное сообщение · #8 |
|
Создано: 27 августа 2008 22:18 · Личное сообщение · #9 |
|
Создано: 28 августа 2008 00:04 · Поправил: Isaev · Личное сообщение · #10 Ну ребята, кончай флудить не по делу... Только отвлекёшься - сразу бардак! На дату смотрим, я свою тему старую поднял, на старые вопросы ответы уже нашлись Сейчас разговор конкретно о Delphi-прогах и всё! Никаких gui framework, WxWidgets, Qt и VC пока тоже в сторону! Hexxx пишет: Где ты собрался его программно получать? Нужно 2 варианта: 1 - Из плагина для Olly 2 - В не запущеном бинарнике (просто из своей проги) Получить указатель на структуру RTTI класса. Пример: Code:
----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 28 августа 2008 13:59 · Поправил: Hexxx · Личное сообщение · #11 Isaev пишет: ; вот то, что тут в EAX кладётся надо получить... ; В данном случае там будет (009516D4). ; Как это найти??? Все равно не понятно. Где "тут"? И что "это" ты собираешься найти? Опиши use-case: откуда чего берешь и чего не хватает чтобы получить нужные тебе данные. Isaev пишет: 2 - В не запущеном бинарнике (просто из своей проги) RTTI базовых типов лежит в начале бинаря: Code:
Все классы основываются на базовых типах, т.е. их дескрипторы содержат указатель на "предка". То есть тебе надо парсить RTTI которые лежат вначале бинаря и потом искать xref. ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 28 августа 2008 16:55 · Личное сообщение · #12 |
|
Создано: 28 августа 2008 17:56 · Личное сообщение · #13 mak пишет: помоему это и требовалось нифига не это... Нужно RTTI не базовых типов, а на некую рекурсивную структуру или так называемый "список наследственности" через который можно определить какой компонент чьим потомком является и какие имеет свойства и события... т.е. как бы воссоздать *.dfm ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 28 августа 2008 18:37 · Личное сообщение · #14 Isaev пишет: Нужно RTTI не базовых типов, а на некую рекурсивную структуру или так называемый "список наследственности" через который можно определить какой компонент чьим потомком является и какие имеет свойства и события... т.е. как бы воссоздать *.dfm 1. Ищешь по маске / сигнатуре вызовы функций, создающих экземпляр твоего компонента 2а. В цикле обрабатываешь все вызовы этих функций, получая указатель на RTTI типов 2b. Указываешь ручками интересующий RTTI 3. Идешь к предкам этого компонента (см. указатель на предка) 4. Начиная с предков анализируешь таблицу обработчиков, каждый из потомков добавляет только новые виртуальные методы и методы работы с полями компонента ----- DREAMS CALL US |
|
Создано: 28 августа 2008 21:39 · Личное сообщение · #15 |
|
Создано: 28 августа 2008 23:40 · Личное сообщение · #16 ARCHANGEL пишет: так что ж этот брутфорс нихрена не даёт при упаковке ехе файлов UPXом, а потом при ручной распаковке? Был бы брутфорс, не обсирасля б т.к. указатели то никуда не делись Ну вот. Сам себе противоречишь. То говоришь что деде всего лишь табличку показывает и ничего сложного нет, то, что после упекса уже ничего не показывает. упекс табличку стирает? А не показывает только потому что брутфорсит он именно секцию "BSS" а после ручного анпака ее нет в хэдере. Да и вообще у него много привязок к именам, поэтому и валится. Isaev пишет: т.е. как бы воссоздать *.dfm Дык dfm же в ресурсах лежат. ----- Yann Tiersen best and do not fuck |
|
Создано: 29 августа 2008 02:45 · Личное сообщение · #17 |
|
Создано: 29 августа 2008 03:11 · Личное сообщение · #18 PE_Kill пишет: Дык dfm же в ресурсах лежат. Лежат, только оттуда имена только можно вытянуть, а адреса обработчиков событий потом всё равно нужно по RTTI искать, а где она? mak пишет: Я тоже об этом подумал , но ничего не нашел в обыкновенной форме с мессагой , файл не пакован вроде , ресурсы не видны. там немного в друдом виде всё представлено, но можно вытащить... dfm лежит в RT_RCDATA, смотри в сторону EnumResourceNames ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 29 августа 2008 12:11 · Личное сообщение · #19 =) Одын товарсч вот что пишет В VMT каждого класса есть ссылка на родителя. Глобальной "структуры" нет. есть неплохой скриптик для разбора дельфёвского RTTI для иды как пример, в то время ида еще не поддерживала классы РТТИ Delphi_Typeinfo.idc - parses Delphi classes RTTI. You need to edit the script before loading to set the correct Delphi version. It then registers a few hotkeys (sorry, GUI users) to parse the class VMT/typeinfo. bcc.idc - parsing Borland C++ tpids and exception infos. Inspired by IDA parser, which didn't work for all cases so I tried to improve it ms_typeinfo.idc - extracts a class name for a VMT if the RTTI for it is present. ti_incl.idc, utils.idc - support files for Delphi_Typeinfo.idc. Need to be placed in the IDA IDC subdir (IDA limitation? I couldn't get #include work outside IDC dir) Code:
Вот именно об этом я говорил в самомо начале , то есть Поиск через VMT должен быть универсален. d90e_29.08.2008_CRACKLAB.rU.tgz - typeinfo_idc_10.zip ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 29 августа 2008 12:17 · Поправил: Hexxx · Личное сообщение · #20 |
|
Создано: 29 августа 2008 12:21 · Поправил: Hexxx · Личное сообщение · #21 mak пишет: =) Одын товарсч вот что пишет Я тоже такой товарищ: www.codebreakers-journal.com/downloads/cbj/2004/CBJ_1_2_2004_Hex_Classes_Restoration.pdf А толку... если тут люди никак не могут сформулировать чего хотят. Isaev пишет: Нужно RTTI не базовых типов, а на некую рекурсивную структуру или так называемый "список наследственности" через который можно определить какой компонент чьим потомком является и какие имеет свойства и события... т.е. как бы воссоздать *.dfm Так вот я тебе предлагаю обратную рекурсию, т.е. идти от базовых типов вверх. Потому что в коде используются не указатели на начало RTTI дескрипторов, а на середину таблиц виртуальных методов. Isaev пишет: dfm лежит в RT_RCDATA Там лежат тока параметры для элементов форм, т.е. координаты, цвет и т.д. ----- Реверсивная инженерия - написание кода идентичного натуральному |
|
Создано: 29 августа 2008 12:39 · Личное сообщение · #22 |
|
Создано: 29 августа 2008 13:08 · Личное сообщение · #23 |
|
Создано: 29 августа 2008 17:03 · Поправил: =TS= · Личное сообщение · #24 Вопрос всем, слушаем ВНИМАТЕЛЬНО: Как ОДНОЗНАЧНО, БЕЗ ПОИСКА ПО МАСКЕ (а с каких-либо структур, параметров фунций) узнать местоположение RTTI базовых типов? Hexxx пишет: Все классы основываются на базовых типах, т.е. их дескрипторы содержат указатель на "предка". То есть тебе надо парсить RTTI которые лежат вначале бинаря и потом искать xref. согласен, так тоже можно (если грамотно организовать процедуру поиска ссылок, ида часто находит не все), но надо БЕЗ ПОИСКА найти RTTI базовых типов. Я просто это говорю, т.к. копал делфи с 3 по 9 версии, и вот там совершенно по разному могут лежать эти RTTI, тем более текстовые названия могут быть обфусцированы PS. Щас при анализе я реально хожу от потомка к предкам и дочерним компонентам... PPS. Очень интересует DCC32.EXE и LNKDFM90.DLL для 9го (2005) Delphi ----- DREAMS CALL US |
|
Создано: 29 августа 2008 17:30 · Личное сообщение · #25 Hexxx это я смотрю тебе сказать нечего , судя по последним коментам. У нас тут обсуждают а не умничают. Если тебе это ни о чем не говорит это твои проблемы =TS= Я напишу в приват , вот файлы. 70bd_29.08.2008_CRACKLAB.rU.tgz - 2005.rar ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 29 августа 2008 18:13 · Личное сообщение · #26 |
|
Создано: 30 августа 2008 00:09 · Личное сообщение · #27 |
|
Создано: 01 сентября 2008 03:43 · Личное сообщение · #28 Isaev пишет: Лежат, только оттуда имена только можно вытянуть, а адреса обработчиков событий потом всё равно нужно по RTTI искать Если обработчик события указан в design time, он (адрес) тоже сохраняется в ресурсах exe и более того все design time свойства всех компонентов лежат ввиде связанных списков. Я тут глянул что делает DeDe - ищет начало ресурсов, а затем наполняет списки компонентов и их свойств. Конечно, это не работает в случае динамического назначения обработчиков... |
|
Создано: 01 сентября 2008 12:32 · Личное сообщение · #29 mak пишет: Hexxx это я смотрю тебе сказать нечего, судя по последним коментам. Та вот как раз есть что сказать. Но в отличии от тебя, у меня есть что сказать по теме. Ща начался просто флуд и уход от темы. Кидают все подряд, что хоть каким-то краем связано с VCL и Delphi. А саму проблему реально не решают. ----- Реверсивная инженерия - написание кода идентичного натуральному |
<< . 1 . 2 . |
eXeL@B —› Основной форум —› Нахождение кода обработки событий! |