ads slot

Latest Posts:

Срочно нужен инженер схемотехник! Опыт проектирования схем в Altium Designer; ТК; Подробнее здесь

Взлом программы Архив Документов

Взлом программы Архив Документов:



Доброго вам здравия) Если вы читаете эту статью, значит у вас опять чешутся руки, и вам опять хочется чего-то поломать! :) Как и мне, в общем. ;)



Программа "Архив документов" - позволяет автоматизировать процесс делопроизводства в организации.

Пациент у меня сегодня не как обычно "на дельфе". Он у меня "на Бацике") Чего я за него взялся? Сам не знаю) Просто набраться опыта...



Итак, инструментарий:

VB Decompiler Pro (поможет нам найти начало некоторых процедур);

Olly Debugger (я использую вторую ветку);

Руки, голова)



Готовы? Поехали...



ЧАСТЬ I: АНАЛИЗ, НАХОЖДЕНИЕ ДАННЫХ



Давайте запустим прогу, посмотрим, что мы имеем (и в прямом, и в переносном...) :)

Видим сплэш, который нам говорит: "версия: 2.28 демо". Ну что ж, грузимся дальше. Видим, что главное окно программы утверждает - это демо.

Переубедим? А как же))



Закрываем прогу. Открываем VB Decompiler, жмякаем File->Open Program. Ждем окончания анализа. Готово.



Теперь нужно найти сплэш-скрин. Обычно они так и называются: frmSplashSplashScreen, и т.д. Ищем в ветке Code раздел frmSplash, а в нем единственную процедуру - открытие этой формы (FromOpen_***).






Клацаем туда.... О ужас! Я, как бы знаком с VB но меня всегда от него воротило) Вот и сейчас... Главное, что нам тут нужно узреть - это адрес начала процедуры, ну или ее основного кода. В моем случае это -00838CA0. Запомните его. На этом первая часть закончена. Приступим собственно ко взлому.







Цитата:










Заметка:

сначала я думал, что нужно будет искать и начало кода загрузки главной формы, но, этого не понадобилось.




ЧАСТЬ II: Модификация кода



Грузим Olly Debugger. Рекомендую перед тем, как втыкать в него нашу программу, поставить в каждом окне шрифт с поддержкой UNICODE. Делается это так:

Большие скрины (развернуть)




желтыми пятнами я указал места, где нужно тыкнуть мышкой (ну или рядом где-нибудь).






Теперь дальше...

Грузим прогу. Жмем ПКМ->Goto->Expression..., вводим ранее записанный адрес: 00838CA0, переходим, и ставим сюда бряк (F2).



Запускаем программу (F9).

Вываливаемся на том месте где начинается загрузка сплэша. Теперь начинается самое муторное. Потихоньку жать кнопку F8 (пошаговое исполнение команд без захода в процедуры) до тех пор, пока не увидим, что в регистре EAX будет надпись "версия 2.28 (демо)":






Так, значит место конкатенации (склеивания строк), где происходит дописывание "(демо)" мы немного пропустили. Как его найти? Совсем не тяжело. Крутим листинг (дизассемблированный код) программыВВЕРХ до тех пор, пока не наткнемся на ближайший условный переход (в нашем случае JNE):






Нам нужно сделать так, чтобы программа перепрыгивала место где клеится надпись о демке в любом случае. Значит сделаем этот переход безусловным (JMP). Запоминаем адрес этой команды, а лучше ставим на нее бряк (брейкпоинт - кнопка F2), и перезапускаем программу в Olly Debugger. Жмем однократно кнопку F9 (запустить) столько раз, чтобы остановится на нашем переходе.



Жмем по нему двойным щелчком, либо клавишей Пробел. Меняем команду с:


Код:



jne    008394D2



на


Код:



jmp    008394D2



Пускаем программу дальше кнопкой F9...



Хо-хо)) Надпись Демо исчезла, но теперь программа ругается на то, что она Закончилась. :(



Читаем информацию в справке пользователя (файл Help.chm):


Цитата:










Ограничение демо-версии:

Вы можете работать с программой в течение 30-ти дней.




Так, значит 30. В шестнадцатеричной системе счисления это будет 1E. В Olly Debugger есть такая классная штука, как поиск констант. Давайте найдем эту цифру.



Рекомендую вернуться к этому прыжку, который мы только что исправили, перезапустив программу в Olly Debugger снова, и дойти опять до брейкпоинта на том JNE, и исправить его как мы это уже делали.




Цитата:










Заметка автора:

Искать константу в виде числа дней я додумался сам. Часто помогает искать временные ограничения. Как это будет выглядеть в коде? Предположительно, это должно быть сравнение в команде:


Код:



cmp    XXXXXXXX, 1E



где XXXXXXXX - какой-то адрес в памяти, либо смещение, например:


Код:



cmp    dword ptr ss:[XXX], 1E







Жмем Search for->Constant..., вводим сюда 1E и... (ВНИМАНИЕ) Если не хотите долго рыться во всем коде в поисках данного сравнения, заметим, что уведомление, что мы закончились, появилось после предыдущего прыжка, который мы исправили. Значит для удобства и быстрейшего поиска, вписываем в основное поле число 1E, и ставим галочку Forward. Жмем ОК. Теперь, нажимая каждый раз клавишиCtrl+L, ищем команду, похожую на ту, что я предположил.



Делал я это долго, но все же нашел. Адрес команды: 9F9287. Но лучше поищите сами - лучше поймете, что такое крякинг!)) ;)



Ставим сюда бряк. Оп-па - остановились. Так, что делать дальше. Вариантов много. Я выбрал такой: исправить сравнение так, чтобы оно выполнялось всегда:


Код:



cmp    dword ptr ss:[ebp-6C8], 1E

jg      short 009F92CD




на


Код:



cmp    dword ptr ss:[ebp-6C8], -1E

je      short 009F92CD





Цитата:










Пояснение:

В первоначальном варианте было сравнение с цифрой 1E, и, ЕСЛИ БОЛЬШЕ, прыжок туда, где показывается "плохой мессыдж".



В новом варианте я сделал сравнение с заведомо нереальным числом дней - отрицательным, и сравнение типа ЕСЛИ РАВНО.



Конечно, такой ситуации быть не может, поэтому программа должна будет заработать.



Как я определил, в какую сторону надо сравнивать, и что на что менять, почему туда нельзя прыгать, а туда - можно? Чисто экспериментальным путем))




Пробуем запустить дальше... И, Алле-оп, вуаля) :yahoo:



Программа зарегистрирована, и демо-ограничения сняты! Теперь сохраним наши творения: на всех местах, где мы меняли код, делаем ПКМ->Edit->Copy to executable. Теперь в этом окошке, с модификациями жмем ПКМ->Save file... (в диалоговом окне жмем Да), сохраняем файл под другим именем.



Готово! Всем спасибо, что дочитали до конца)



Автор статьи:

Владимир Мефисто



P.S. Писал я как можно подробнее. Если что-то не уловили - спрашивайте!

Если все поняли - отпишитесь обязательно! Спасибо.





Share on Google Plus

Автор Мaкс Маб

Я простой житель планеты земля.

Комментарии

comments powered by HyperComments

Алексей Навальный

Мухамеду Али было 74 года

ali from Mab on Vimeo . Он говорил, что хотел бы дожить до ста лет. Мохаммед Али – один из самых известных боксеров в истории мировог...

Получайте обновления на Email

Проблемы на работе?