среда, 14 октября 2009 г.

Обходим защиту электронной книги

Помните, в предыдущей статье я рассказывал, как защитить данные от копирования из программы? Сегодня я расскажу о том, как обойти защиту электронной книги и всё же скопировать информацию из неё.

Напомню, что защита электронных книг строится на запрете копирования текста оттуда и запрете снимков экрана клавишей PrintScreen (в предыдущей статье я рекомендовал очищать буфер обмена после попадания в него текста или картинки).

Но HiAsm предоставляет нам компонент для снимков экрана безх использования клавиши PrintScreen и буфера обмена! Вот такой замечательный HiAsm! И нужный нам компонент ScreenShort находится на вкладке "Окно" панели компонентов. У него всего три точки. Метод нужно вызвать для снимка, на событие выдаётся картинка, а точка данных принимает идентификатор окна, которое нужно снять.

Идентификатор окна - это число, которое любое окно и визуальный компонент Windows получает при запуске. Оно выбирается произвольно, но один и тот же идентификатор для разных окон быть не может, он всегда уникален. Идентификатор визуальных компонентов HiAsm можно считать с точки нижней Handle. Для получения идентификаторов чужих окон производится поиск окон компонентом WinEnum со вкладки "Окна", этот компонент выдаёт загловки окон и их идентификаторы.

Ещё нам нужно решить, какое событие приведёт к снимку. Нажатие кнопки использовать нельзя, ведь форма должна быть свёрнуа на панель задач, чтобы не загораживать окно снимаемой программы. Как вариант - нажатие кнопки в Windows.

Скачать схему HiAsm

Для отлавливания нажатия клавиш не на форме испльзуется компонент KeyHook. Ему требуется библиотека Hook.dll, которая находится в папке Plug рядом с HiAsm. Её рекомендуется класть рядом с программой. Компонент выдаёт код клавиши, а Case его проверяет на равенство 13 (это код клавиши Enter) и при равенстве делает снимок. Так как идентификатор мы не указали, то снимается весь экран. Рисунок сохраняется на диске C:.

Если нужно снять не весь экран, а только часть - окно книги, например, то нужно сначала найти это окно и передать его идентификатор компоненту ScreenShort. Поиск окон производится компонентом WinEnum с той же вкладки.

Скачать схему HiAsm

Здесь используются два списка: видимый - для заголовков окон, невидимый - для идентификаторов, причём, как видно из кода, положение заголовков и идентификаторов соответствует друг другу, так что при выборе заголовка окна можно брать из невидимого списка его идентификатор под тем же номером строки, что и заголовок. А затем используется компонент Memory. В остальном снимок делается так же.

Ну и напоследок покажу, как сделать скриншот активного окна, то есть того, которое отображается поверх всех и имеет синюю (а не серую) строку заголовка.

Скачать схему HiAsm

Как видите, это очень просто, потому что у KeyHook есть точка свойств, с которой можно считать идентификатор активного окна.

6 комментариев:

  1. В ХР программа срабатывает - жмешь кнопку "Искать", выбираешь в списке нужное окно и потом жмешь Enter. Но только в снимок окна попадает и окно рабочей формы. Как этого избежать?
    В Висте ничего не работает... ;0(

    ОтветитьУдалить
  2. Свернуть окно. Скриншот - это снимок прямоугольника окна, и если что-то есть постороннее, то снимается и оно.

    ОтветитьУдалить
  3. а можно создать перехватчик клавиш чтобы он сохранял клавиши и расшифровывал

    ОтветитьУдалить
  4. Разумеется. Используйте компонент KeyHook со вкладки "Разное".

    ОтветитьУдалить
  5. если будет время напишите мне pnv99game@gmail.com
    и объясните как расшифровывать
    и сохранять что перехватило

    ОтветитьУдалить
  6. ._. Я ничего не понял..

    ОтветитьУдалить