![]() |
eXeL@B —› Вопросы новичков —› Добавление кнопки и своего кода |
Посл.ответ | Сообщение |
|
Создано: 06 октября 2011 15:38 · Поправил: tekton · Личное сообщение · #1 Здравствуйте! Значит проблема такая! Мне надо добавить новую кнопку в чужое приложение, и что б В Рестораторе скопировал строчку скрипта кнопки, вставил в другое окно, поменял индефикатор. Новая кнопка появилась. Прочитав понял что надо "найти адрес, по которому расположена оконная функция отработки сообщений. И поставить код, производящий прыжок на код обработки" Итак вопрос: Как найти адрес, по которому расположена оконная функция ? И дописать проверку нажатия моей кнопки? Если можно пример на какой нибудь конкретной программе. P.S. Будет ли отличаться обработка в оконной функции, в зависимости от языка на котором написана программа ? ![]() |
|
Создано: 06 октября 2011 16:26 · Личное сообщение · #2 |
|
Создано: 06 октября 2011 16:46 · Личное сообщение · #3 |
|
Создано: 06 октября 2011 17:34 · Личное сообщение · #4 Современные компиляторы юзают CRT и RTTI для обработки объектов и форм. В MS C это MFC, в Delphi это VCL, в MS VB тоже какая то хрень, это надо гпч спрашивать. По каждой из этих систем нужно разбираться досканально, либо использовать низкий уровень (Windows API) и трахаться эмулируя систему RTTI. Конкретно по каждой системе тебе никто ничего писать не будет, т.к. спецов можно пересчитать по пальцам одной руки безрукой мартышки. Хочешь сделать что то конкретное, выкладывай жертву и пиши что пробовал, что не получается, чем помочь. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 06 октября 2011 18:28 · Поправил: Hexxx · Личное сообщение · #5 tekton пишет: Как найти адрес, по которому расположена оконная функция ?И дописать проверку нажатия моей кнопки? Если вам не важно чтобы код обработчика был именно коде программы, то SetWindowsHookEx вам в помощь. Хучите WH_CALLWNDPROC или WH_MSGFILTER и проверяете что пришло сообщение для вашей кнопки. И практически для любой программы это будет работать. Программа direct folders именно так свои кнопки и дорисовывает, правда хучит она создание диалога. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 06 октября 2011 22:00 · Поправил: tekton · Личное сообщение · #6 PE_Kill пишет: спецов можно пересчитать по пальцам одной руки безрукой мартышки Мда... Не думал что на столько всё серьёзно... PE_Kill пишет: выкладывай жертву Над ним будем измываться ![]() Добавил кнопку и менюшку (см. скрины). Задача: Найти в ольке оконную функцию и добавить обработчики кнопки и меню. Добавляемый код... ну например стандартный MessageBox c каким нибудь сообщением. Hexxx пишет: И практически для любой программы это будет работать. Было бы просто чудно... ![]() Если можно пример как это всё сделать... P.S. Такой штукой впервые занимаюсь, если можно по подробнее описывайте действия ![]() ![]() |
|
Создано: 06 октября 2011 22:03 · Личное сообщение · #7 |
|
Создано: 06 октября 2011 22:34 · Поправил: Veliant · Личное сообщение · #8 Открываешь в IDA, ищешь где вызывается RegisterClassExW (01001836), чуть выше заполняется структура Code:
Вот собственно она и есть. Теперь можешь в этом месте поменять указатель на свой код, в коде необходимо сделать нужные проверки (тип сообщения WM_COMMAND, ID кнопки) и если не твои, то отдать управление дальше оригинальной процедуре. ![]() |
|
Создано: 06 октября 2011 23:14 · Личное сообщение · #9 PE_Kill пишет: Современные компиляторы юзают CRT и RTTI для обработки объектов и форм. В MS C это MFC, в Delphi это VCL, в MS VB тоже какая то хрень, это надо гпч спрашивать. По каждой из этих систем нужно разбираться досканально, либо использовать низкий уровень (Windows API) и трахаться эмулируя систему RTTI. Конкретно по каждой системе тебе никто ничего писать не будет, т.к. спецов можно пересчитать по пальцам одной руки безрукой мартышки. Хочешь сделать что то конкретное, выкладывай жертву и пиши что пробовал, что не получается, чем помочь. Ого, как загнул. Никто ж не просит встраиваться так, чтоб мать родная не отличила. Если есть окно, то есть и оконная функция, которая находится ну как угодно: либо хуком RegisterClass* и DialogBox*, либо получением адреса оконной функции через GetWindowЧто-тоТам (GetWindowClass?) и в случае необходимости (если оконная функция — в стандартной библиотеке) докапывания до обращения к коду программы, либо вообще через Spy++ от микрософта. Единственная проблема: эта оконная функция может быть одной и той же для разных окон. Ну тут уж как-нибудь отличим нашего клиента. Идентификатор контролу какой-нибудь совсем уникальный приделаем. ![]() |
|
Создано: 06 октября 2011 23:22 · Личное сообщение · #10 |
|
Создано: 06 октября 2011 23:38 · Личное сообщение · #11 |
|
Создано: 07 октября 2011 00:10 · Личное сообщение · #12 btw: совершенно глупая мысль — если в ресурсах лежит DIALOG, то он и создаваться может только как окно со своей оконной функцией. То есть: если удалось нахаляву вставить свой контрол, то и работать его можно заставить нахаляву. Если же форма лежит как какая-нибудь RCData, то и вставить нахаляву может не получиться, но если получилось, то для функционирования надо думать. Либо создавать контрол в онлайне, найдя окно уже после запуска программы. ![]() |
|
Создано: 07 октября 2011 01:00 · Поправил: Hexxx · Личное сообщение · #13 tekton пишет: Если можно пример как это всё сделать... ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 09 октября 2011 05:52 · Личное сообщение · #14 vptrlx пишет: Если же форма лежит как какая-нибудь RCData, то и вставить нахаляву может не получиться Для эти случаев писать либу, патчить основную прогу для подгрузки своей DLL, оттуда мониторить окна и проводить соответствующие манипуляции. Так разбирался с всем известным мессенджером QIP только дальше пары-тройки друзей идея не ушла ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Добавление кнопки и своего кода |