Сейчас на форуме: _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Добавление кнопки и своего кода
Посл.ответ Сообщение

Ранг: 10.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 октября 2011 15:38 · Поправил: tekton
· Личное сообщение · #1

Здравствуйте!

Значит проблема такая!
Мне надо добавить новую кнопку в чужое приложение, и что б
В Рестораторе скопировал строчку скрипта кнопки, вставил в другое окно, поменял индефикатор.
Новая кнопка появилась.

Прочитав >>> ЭТУ <<< статью,
понял что надо "найти адрес, по которому расположена оконная функция отработки сообщений.
И поставить код, производящий прыжок на код обработки"

Итак вопрос:
Как найти адрес, по которому расположена оконная функция ?
И дописать проверку нажатия моей кнопки?
Если можно пример на какой нибудь конкретной программе.


P.S. Будет ли отличаться обработка в оконной функции, в зависимости от языка на котором написана программа ?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2011 16:26
· Личное сообщение · #2

Будет, причем очень сильно. Огласите компилятор.

-----
Yann Tiersen best and do not fuck




Ранг: 10.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 октября 2011 16:46
· Личное сообщение · #3

Например С++
Но если честно, то хотелось бы научиться делать подобное и для других компиляторов.
P.S. Если можно, расскажите про основные компиляторы
И если можно с конкретными примерами...




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2011 17:34
· Личное сообщение · #4

Современные компиляторы юзают CRT и RTTI для обработки объектов и форм. В MS C это MFC, в Delphi это VCL, в MS VB тоже какая то хрень, это надо гпч спрашивать. По каждой из этих систем нужно разбираться досканально, либо использовать низкий уровень (Windows API) и трахаться эмулируя систему RTTI. Конкретно по каждой системе тебе никто ничего писать не будет, т.к. спецов можно пересчитать по пальцам одной руки безрукой мартышки. Хочешь сделать что то конкретное, выкладывай жертву и пиши что пробовал, что не получается, чем помочь.

-----
Yann Tiersen best and do not fuck




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 06 октября 2011 18:28 · Поправил: Hexxx
· Личное сообщение · #5

tekton пишет:
Как найти адрес, по которому расположена оконная функция ?И дописать проверку нажатия моей кнопки?

Если вам не важно чтобы код обработчика был именно коде программы, то SetWindowsHookEx вам в помощь. Хучите WH_CALLWNDPROC или WH_MSGFILTER и проверяете что пришло сообщение для вашей кнопки. И практически для любой программы это будет работать. Программа direct folders именно так свои кнопки и дорисовывает, правда хучит она создание диалога.

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 10.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 октября 2011 22:00 · Поправил: tekton
· Личное сообщение · #6

PE_Kill пишет:
спецов можно пересчитать по пальцам одной руки безрукой мартышки

Мда... Не думал что на столько всё серьёзно...
PE_Kill пишет:
выкладывай жертву

>>>Вот калькуль<<<
Над ним будем измываться
Добавил кнопку и менюшку (см. скрины).
Задача:
Найти в ольке оконную функцию и добавить обработчики кнопки и меню.
Добавляемый код... ну например стандартный MessageBox c каким нибудь сообщением.

Hexxx пишет:
И практически для любой программы это будет работать.


Было бы просто чудно...
Если можно пример как это всё сделать...

P.S. Такой штукой впервые занимаюсь, если можно по подробнее описывайте действия ...



Ранг: 23.2 (новичок), 8thx
Активность: 0.020
Статус: Участник

Создано: 06 октября 2011 22:03
· Личное сообщение · #7

tekton пишет:
Найти в ольке оконную функцию...


вот тут написано как найти
http://www.wasm.ru/article.php?article=ollydbg12



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 06 октября 2011 22:34 · Поправил: Veliant
· Личное сообщение · #8

Открываешь в IDA, ищешь где вызывается RegisterClassExW (01001836), чуть выше заполняется структура
Code:
  1. 010017EA  mov     [ebp+var_30.lpfnWndProc], offset CalcWndProc(HWND__ *,uint,uint,long)

Вот собственно она и есть. Теперь можешь в этом месте поменять указатель на свой код, в коде необходимо сделать нужные проверки (тип сообщения WM_COMMAND, ID кнопки) и если не твои, то отдать управление дальше оригинальной процедуре.



Ранг: 56.1 (постоянный), 9thx
Активность: 0.040
Статус: Участник

Создано: 06 октября 2011 23:14
· Личное сообщение · #9

PE_Kill пишет:
Современные компиляторы юзают CRT и RTTI для обработки объектов и форм. В MS C это MFC, в Delphi это VCL, в MS VB тоже какая то хрень, это надо гпч спрашивать. По каждой из этих систем нужно разбираться досканально, либо использовать низкий уровень (Windows API) и трахаться эмулируя систему RTTI. Конкретно по каждой системе тебе никто ничего писать не будет, т.к. спецов можно пересчитать по пальцам одной руки безрукой мартышки. Хочешь сделать что то конкретное, выкладывай жертву и пиши что пробовал, что не получается, чем помочь.

Ого, как загнул. Никто ж не просит встраиваться так, чтоб мать родная не отличила.
Если есть окно, то есть и оконная функция, которая находится ну как угодно: либо хуком RegisterClass* и DialogBox*, либо получением адреса оконной функции через GetWindowЧто-тоТам (GetWindowClass?) и в случае необходимости (если оконная функция — в стандартной библиотеке) докапывания до обращения к коду программы, либо вообще через Spy++ от микрософта.
Единственная проблема: эта оконная функция может быть одной и той же для разных окон. Ну тут уж как-нибудь отличим нашего клиента. Идентификатор контролу какой-нибудь совсем уникальный приделаем.



Ранг: 60.6 (постоянный), 20thx
Активность: 0.070
Статус: Участник

Создано: 06 октября 2011 23:22
· Личное сообщение · #10

Возможно скажу глупость, но не проще ли сделать новый пункт меню? Проблем убавится на 90%




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2011 23:38
· Личное сообщение · #11

vptrlx пишет:
Ого, как загнул. Никто ж не просит встраиваться так, чтоб мать родная не отличила.

Если дописывать не HelloWorld!, то придется разобраться, иначе смысла конечно же не имеет, как в данном случае с калькулятором.

-----
Yann Tiersen best and do not fuck




Ранг: 56.1 (постоянный), 9thx
Активность: 0.040
Статус: Участник

Создано: 07 октября 2011 00:10
· Личное сообщение · #12

btw: совершенно глупая мысль — если в ресурсах лежит DIALOG, то он и создаваться может только как окно со своей оконной функцией.
То есть: если удалось нахаляву вставить свой контрол, то и работать его можно заставить нахаляву.

Если же форма лежит как какая-нибудь RCData, то и вставить нахаляву может не получиться, но если получилось, то для функционирования надо думать. Либо создавать контрол в онлайне, найдя окно уже после запуска программы.



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 07 октября 2011 01:00 · Поправил: Hexxx
· Личное сообщение · #13

tekton пишет:
Если можно пример как это всё сделать...

--> Link <-- пример того как можно добавить свое меню во все запущенные приложения windows, по которому любое приложение можно будет свернуть в tray.

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 18.8 (новичок), 21thx
Активность: 0.030
Статус: Участник

Создано: 09 октября 2011 05:52
· Личное сообщение · #14

vptrlx пишет:
Если же форма лежит как какая-нибудь RCData, то и вставить нахаляву может не получиться

Для эти случаев писать либу, патчить основную прогу для подгрузки своей DLL, оттуда мониторить окна и проводить соответствующие манипуляции. Так разбирался с всем известным мессенджером QIP только дальше пары-тройки друзей идея не ушла


 eXeL@B —› Вопросы новичков —› Добавление кнопки и своего кода
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати