Теория Плагинов, моего младшего брата

Дата публикации 18 окт 2017 | Редактировалось 10 янв 2018
Cogitations poenam nemo patitur (лат.)
Никто не несет наказания за мысли
Введение
Статья 1280
Четвёртой части Гражданского кодекса РФ, вступившей в силу 01.01.2008 г.
Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ
«1.
Лицо, правомерно владеющее экземпляром программы для ЭВМ или экземпляром базы данных (пользователь), вправе без разрешения автора или иного правообладателя и без выплаты дополнительного вознаграждения:
1) внести в программу для ЭВМ или базу данных изменения исключительно в целях их функционирования на технических средствах пользователя и осуществлять действия, необходимые для функционирования таких программы или базы данных в соответствии с их назначением, в том числе запись и хранение в памяти ЭВМ (одной ЭВМ или одного пользователя сети), а также осуществить исправление явных ошибок, если иное не предусмотрено договором с правообладателем;
2) изготовить копию программы для ЭВМ или базы данных при условии, что эта копия предназначена только для архивных целей или для замены правомерно приобретенного экземпляра, в случаях, когда такой экземпляр утерян, уничтожен или стал непригоден для использования. При этом копия программы для ЭВМ или базы данных не может быть использована в иных целях, чем цели, указанные в подпункте 1 настоящего пункта, и должна быть уничтожена, если владение экземпляром таких программы или базы данных перестало быть правомерным.
2. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения изучать, исследовать или испытывать функционирование такой программы в целях определения идей и принципов, лежащих в основе любого элемента программы для ЭВМ, путем осуществления действий, предусмотренных подпунктом 1 пункта 1 настоящей статьи.
3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой, при соблюдении следующих условий:
1) информация, необходимая для достижения способности к взаимодействию, ранее не была доступна этому лицу из других источников;
2) указанные действия осуществляются в отношении только тех частей декомпилируемой программы для ЭВМ, которые необходимы для достижения способности к взаимодействию;
3) информация, полученная в результате декомпилирования, может использоваться лишь для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, не может передаваться иным лицам, за исключением случаев, когда это необходимо для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, а также не может использоваться для разработки программы для ЭВМ, по своему виду существенно схожей с декомпилируемой программой для ЭВМ, или для осуществления другого действия, нарушающего исключительное право на программу для ЭВМ.
4. Применение положений, предусмотренных настоящей статьей, не должно наносить неоправданный ущерб нормальному использованию программы для ЭВМ или базы данных и не должно ущемлять необоснованным образом законные интересы автора или иного правообладателя»
***

Итак, нам что-то не нравится в программе, которую мы приобрели. Мы хотим большего, мы можем большее.
Варианта два: если программа поддерживает возможность подключения модулей сторонних разработчиков в виде специально предоставляемого интерфейса расширения функциональности (Plugin interface) – то все просто: достаточно изучить документацию для разработчиков Plugin’ов и прибавить функциональность программы, добавив к ней свою dll, отвечающую стандартам установленным разработчиками программы. Этот первый вариант, обычно поддерживают компании, занимающиеся серьезными разработками (например, оч. мощная технология COM в Windows, возможность добавления защиты от спама и вирусов в TheBat! и т.д.). Второй вариант – при отсутствии поддержки сторонних разработчиков (такой софт появляется обычно что бы свести затраты к минимуму), ввести эту поддержку самим, благо мы живем в России, где это разрешено действующим законодательством, и абсолютно «по боку» что написал автор по этому поводу в своей лицензии, если таковая прилагается, главное в этом направлении не выйти за рамки закона и не использовать чужой исходный код в своих разработках (т.е. не заниматься открытым плагиатом).
Рассмотрим 2-ой случай. Мы можем написать абсолютно любой прибомбас в виде dll к существующему софту, но как его с ним «склеить», получать/обрабатывать и передавать данные и вообще с чего начать? Декомпилировать или нет?
Естественно нужен пример, причем рабочий и интересный нам. Определимся, что нас сегодня из софта не устраивает.
Блокнот из винды – вроде нормально работает, калькулятор тоже. В край существует множество альтернатив всему софту, которым мы повседневно пользуемся. Наконец, можно написать разработчикам содержательное письмо с включениями в виде готовых алгоритмов и исходного кода (как я сделал однажды с WinRAR) и авторы выпустят заплатку или промежуточную версию, если это стоящие разработчики действительно стоящего ПО.
Так где же у нас альтернатив нет? И функциональность чего нас не устраивает?
С легким сердцем возьмем в качестве примера, клиент матрикс для обмена контентом и определимся, что мы в нем хотим видеть чего у нас нет и появится не скоро (если появится вообще)...
Да уж, проще написать что устраивает (это то что хоть он вообще запускается)…но все же можно составить небольшой список из огромного перечня, используя приоритеты.
Итак, что не устраивает и как хотелось бы (мои приоритеты могут отличаться):
  1. Навязчивая панель SMS с ее звуком, хотелось бы иметь возможность отключать;
  2. Нет возможности отключать отдачу файлов анлимщикам, хотелось бы иметь такую возможность;
  3. Нет подсчета бонусов/затрат в рублях, хотелось бы иметь возможность подсчитывать;
  4. Нет возможности протоколировать отдаваемые файлы и при доказательствах поддержке программы, что я заработал на контенте, приходится делать снимки экрана, что не всегда возможно, муторно и является подозрительной чушью, хотелось бы иметь такую возможность: пусть сверяют мой лог с логом на сервере.
  5. Остальное, может подождать, главное написать «скелет», на который потом можно будет «наращивать мясо».
Инструменты:
1. Знания: Win32/64 API, прочитанный Рихтер, наличие доступа к MSDN и знание языка на котором будем писать (здесь Cи);
2. Среда разработки (здесь все описывается для MS VS 6);
3. Сниффер сокетов (рекомендую WPE PRO или написать свой), оконный сниффер (подойдет SPY или SPYX из состава MSVS, но рекомендую InqSoft Window Scanner или написать в последствии свой);
4. PE-редактор (например CFF Explorer).
Декомпилировать/дизассемблировать мы ничего не будем, поэтому соответствующие инструменты нам не нужны.
С чего начать? Наверное с того что бы как-то «прицепить» нашу dll к программе. Существует много способов, предусмотренных разработчиками Microsoft, известных с начала Windows и вовсе не являющимися как многие думают хакерскими. В пользовательском режиме (на 3-м кольце защиты) это и внедрение dll в чужой процесс при помощи хуков, удаленных потоков, отладочных механизмов, изменения в памяти таблицы импорта и т.д.
Мы, что бы не заморачиваться, используем как раз хакерский, жестко внедрив свою библиотеку в таблицу импорта LGPL библиотеки id3lib.dll идущей в комплекте с матриксом или не хакерский перекомпилировав id3lib с связыванием с нашей dll. Жесткое статическое внедрение в секцию импорта легко выполняется при помощи CFF Explorer и других программ позволяющих править PE заголовки файлов.

1 2.976
RET

RET
Well-Known Member

Регистрация:
5 янв 2008
Публикаций:
17