Жертва: Ziegler Collection for C++ Builder 5
Пыточные инструменты:
- W32Dasm
- Spy++ / WinSight32
- HIEW или другой шестнадцатеричный редактор
Цель данной статьи - показать, как можно
обойти ограничения шароварных
компонентов для Builder'a и Delphi. Жертвой
будет набор компонентов Ziegler Collection для
C++ Builder 5 (http://www.torry.net/vcl/packs/interfacehuge/zcc5.exe).
Если попробовать запустить файл не из-под
Builder'а, то получим вот такой облом.
Напряжем слегка мозги :). Посмотрим файл
через F3, к примеру, в Total Commander'е, и поищем
строчку "Sorry". Результат будет
следующий:
Подними взгляд на строчку выше. Видишь,
написано TAppBuilder TPropertyInspector? Люди,
знакомые с ООП, поймут, что это имена
классов. Но классов чего? Запусти Builder и
Spy++ из комплекта Visual Studio или WinSight32 из
поставки Builder'а или Delphi.
Как видно, это классы окон.
Окончательно в этом можно убедиться
продизассмив файл. Я предпочитаю
использовать W32Dasm:
Как видно, программа ищет окна по их классу. Если не находит, то выдает сообщение и закрывается. В связи с этим возникают следующие пути решения:
1. Написать программу, которая бы создавала окна с нужными классами.
2. Пропатчить экзешник.
3. Пропатчить скомпилированый bpl-файл.
Разберем более подробно каждый вариант:
№1: Все достаточно просто. В программе создать 2 формы, поменять им свойства "Name" на AppBuilder и PropertyInspector. Или, как вариант, написать то же самое на гольном WinApi, что и было мной проделано.
№2:
а) Поменять строчки типа "jne 0040F6EF" после вызова функции FindWindow на "jmp 0040F6EF".
б) Заменить поиск окон TAppBuilder и TPropertyInspector на, к примеру, Progman и ToolbarWindows32. Вместо недостающих символов поставь 00.
№3: Принцип тот же самый, но модификации должен подвергнуться файл zc1_rt_c05_0220.bpl. Это посложнее, но гораздо лучше всех предыдущих вариантов.
Исходник с эмулятором + исходник, демонстрирующий работу с эмулятором (поиск и закрытие программы)
+ различия между оригинальным и крякнутым zc1_rt_c05_0220.bpl:
demo.rar.
P.S. На всякий случай еще несколько классов, присущих IDE:
TMenuBuilder
TAppication
TAlignPalette