2009-06-10 2 views
3

У меня есть приложение MFC, которое мне было предоставлено (без исходного кода), которое открывает окно с кнопкой «Обновить», после чего после нажатия на кнопку выполняется очень длинное обновление.Изменение программы для подделки кнопки

Я хотел бы изменить программу, чтобы при создании окна (или в другом месте, таком как DoModal) в программу было отправлено сообщение, чтобы заставить его думать, что нажата кнопка.

Я уже некоторое время занимался этим в Ida Pro и OllyDbg безрезультатно. Я смотрел, возможно, используя PumpMessage, но это не принесло успеха.

Любые советы?

ответ

3

Если вам не нравится идея использования вторичного «макро» программы, вы можете патч бинарного оригинальной программы на вызовите обработчик BM_CLICK на кнопке. Если вы можете найти место для вызова (минимум 5 байтов без аргументов), вы можете сделать это только с помощью OllyDbg (после редактирования кода, выберите его и выберите «Копировать в исполняемый файл» -> «Выбор» из правого щелчка меню). В противном случае вам нужно создать новый раздел кода с помощью редактора PE (например, LordPE или PE Tools) и добавить туда свой код (обычно вы хотите изменить вызов в программе на переход к вашему разделу, где вы выполните первоначальный вызов плюс вызов обработчику кликов кнопки, затем вернитесь к старой позиции после вашего исправленного перехода).

+0

Как и где я могу разместить этот патч? – samoz

+0

Если вы не собираетесь создавать новый раздел, вы можете попробовать найти «кодовую пещеру», которая представляет собой практически небольшую область памяти, которая не используется программой. Обычно это может быть в «мертвом» коде (код, который никогда не вызывается программой, по крайней мере, не в тех случаях, когда вы собираетесь его использовать), или в пространстве, оставленном компилятором для выравнивания (как правило, t получить более 15 байтов). –

+0

Ознакомьтесь с этой статьей: http://www.codeproject.com/KB/cpp/codecave.aspx - он не описывает добавление нового раздела (что является средним основанием между использованием пещер кода и DLL). Если вы согласны с добавлением DLL в пакет, вы можете просто добавить DLL в таблицу импорта (опять же с помощью PE-редактора), а затем исправить соответствующий код из вашей DLL, используя простые операции указателя. –

1

Существует несколько способов сделать это с использованием методов автоматизации тестирования, но самым простым является просто получить дескриптор окна для нужной кнопки и отправить его BM_CLICK message. Это предполагает, что у вас есть рабочее знание C/C++ в Windows. Если нет, есть другие средства, использующие .NET или другие технологии. Я не знаком с ida-pro или ollydbg.

-1

Просто создать 2-ую программу, которая будет обед его и отправить мыши с помощью SendInput(...)

0

Посмотрите этот модуль perl win32 :: guitest это может помочь вам сделать это. Вы можете написать с ним скрипт perl и вставить его в свою программу. или вы можете использовать win32 api, которые обертывают ваши требуемые потребности и используют их.

Смежные вопросы