Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
FAQ по ломке программ by Vallkor

Оформил: DeeCo
Автор: http://www.cracklab.narod.ru

Бредисловие:
Вот и осмелился я наконец написать обзор часто задаваемых вопросов о
взломе программ. Многие вопросы здесь задавал себе как-то и я. Теперь же изложу их ответы. Да, кстати, любые вопросы можно задать мне по адресам:
vallkor@ukr.net
vallkor@chat.ru
vallkor@etel.dn.ua
Приступим...

Q: Какие виды защиты используют программы и какие методы их взлома?
A: наиболее распространенный вид защиты - защита серийным номером, т.е. по вашему имени или по специальному шаблону генерятся серийные номера. Заполучить их просто с помощью любого дебагера (отладчика), я рекомендую SoftIce. При этом важно "словить" событие, которое происходит при неправильном вводе серийного номера. Как правило это MessageBox - сообщение об ошибке, но если программа написана в Делфи - то там messagebox не канает, т.к. "продвинутый" Делфи не использует стандартное сообщение Windows.
Есть временная защита, т.е. программа работает 30 дней - тут совсем всё просто, можно написать за 5 имнут программу, которая бы переводила на секунду время назад, запускала нужную нам программу и возвращала бы время назад;
Просто почитайте литературу по ломке программ.

Q: где взять такую литературу.
A: искать нужно литературу по защите программного обеспечения. На рынках часто продают диски с названиями "Все для хакера" - там много полезной инфы. Есть куча туториалов (пояснений) - т.е. описаний, как нужно ломать ту или иную программу, я рекомендую регулярное издание команды CiA - "tKC's tutorials". Просто введите в любом поисковике заветные слова и куча инфы вам обеспечена. Совет (который мне тоже кто-то советовал): "читайте всё подряд, даже если не понимаете - потом будете знать, где искать". ЗЫ: www.reversing.net - русскоязычный и класный.

Q: Какими инструментами пользуются кракеры?
A: Тут однозначно не ответишь. Ведь программ существует уйма и у каждого свои вкусы. Могу лишь сказать свои вкусы:
- SoftIce (как отладчик (дебагер) )
- WinDASM (как декампилятор)
- Qview (как hex-редактор и дизассемблер)
- RegMon и FileMon (для просмотра обращений программы к внешним файлам и системному реестру)

Q: Что такое декампилятор?
A: Это программа, которая из машинного кода программы получает исходный код на ассемблере.

Q: А можно ли получить исходный текст на языке, на котором была написана программа?
A: Если знать на каком языке написана прога (компилятор) то теоритически можно, но практически ещё не видел.

Q: Какие программы для начала лучше поломать для тренировки?
A: Желательно самые самодельный, типа супердиалер или суперблокнот.
Я лично захожу на сервер ShareWare-ных программ и качаю всё подряд - из 10 одна стоящая найдётся. Впринципе, сломать самодельную программу ничего не стоит.

Q: Как сломать защиту на проверку компакт диска?
A: Предлагаю классический вариант:
- Ставим брекпоинт на функцию GetVolumeDriveType (т.е. определение вида носителя) и программа проверяет компакт ли это диск (т.е. сверяет результат с 00000005)
- теперь хекс-редакоторм меняем 005 на 003 (т.е. жесткий диск)
- Создаем любым эмулятором компакт-дисков из директории Fake диск нашей программы.
- Теперь программа найдя жесткий диск подумает, что это сидюк и потом обнаружит на нём все нужные файлы и конечно запустится.

Q: Я ломая программу изменил хекс-редактором программу и она запустилась с сообщением "Программа была изменена. Переустановите её". Как отключить проверку на изменения кода программы?
A: Это, пожалуй, самый модный приём в защите програмы от посягательств.
Называется он CRC - алгоритм проверки программы на изменения. Отключается он не просто, но есть один способ:
- копируем оригинальную программу в безопасное место и делаем изменения в коде программы
- ставим прерывание на функцию GetModuleFileName и проходя по коду
Изменённой программы дебагером записываем все переходы (jnz,jz...) на бумагу
- запускаем "нормальную" программу и сравниваем все переходы с записанными
- после нахождения различия уже всё будет просто, меняем к примеру jnz на jz и дело в шляпе.

Q: Я дизассемблировал программу WDAsm'om и увидел там пустоту!
A: тут, скорее всего, программа защищена каким-то пакером или протектером.

Q: Что такое пакер и как с ним бороться?
A: Пакер - это программа, которая запаковывает (сжимает) нужную программу и прикрепляет распаковщик. При этом при запуске этот распаковщик распаковывает запакованную прогу и передает её управление. Из известных
пакеров: UPX, ASPack etc. Есть ещё так называемые Протектеры, они действуют так же как и пакеры, только не просто запаковывают прогу а и зашифровывают сам её код, таблицы импорта и экспорта, да все что угодно, при этом такие проги напичканы различными антиотладочными средствами и т.д. Из пакеров: ASProtect, VBox,PESHiELD etc.

Q: Есть ли стандартные примеры быстрого взлома?
A: Вопрос не совсем понятен. Есть стандартная ошибка многох программ: когда серийный номер сгенерён, то он не затирается, а остаётся в памяти очень часто прямо рядом с неправильным серийным номером (Что очень глупо). Т.е. нам стоит открыть SoftIce и ввести строку поиска:
s ds:0 l ffffffff "введенный_номер" - и где-то рядом в памяти будет нужный серийник.

Q: Я ломал программу и поставил прерывание bpx messageboxA, но софт айс не выскочил, хоть сообщение об ошибке (messagebox) выскакивает исправно.
A: попробуй:
bpx MessageBox
или
bpx MessageBoxW
Q: Сколько уходит времени на взлом программы?
A: У меня, либо программа ломается сразу (5 мин) либо не сразу (до 2 дней - по настроению). А вообще чётких терминов нет, они ограничены только умелостью самих программ.

Q: Что такое FrogIce?
A: Это патчер для SoftIce. Он предназначен для того, чтобы работать с программами, которые определив, что загружен СофтАйс не грузились. Но после его обнародывания новые программы используют другие методы определения, поэтому если какая-то программа не хочет запускаться или выдает глупые сообщения - найдите самый свежий Патчер такого рода.
}{Отя я лично этой фигнёй не пользуюсь - подумай сам, ведь до момента обнаружения софтайсом пользоваться ещё можно :)

Q: что такое IceDump?
A: Это плагин для СофтАйса. В нем куча новых, недостающих в айсе функций.
Вот некоторые из них:
/dump <from> <length> <filename> - дампит область памяти в файл. Проигрывание компакт-дисков прямо из айса, проигрывание MP3 файлов из айса, а также на радость многим встроен тетрис. Короче, скачайте IceDump и почитайте доки (они там небольшие).

Q: Что такое IDA?
A: Это Интерактивный Дизассемблер. Но работать новичку с этой штукой, это все равно что на дачу ездить на космическом корабле, а раз ты задал такой вопрос, то смело бери другой дизассемблер - WDasm32

***************************
*Дополнение (1) от Fess'a *
***************************

Q: А можно ли получить исходный текст на языке, на котором была написана программа?
A: Иногда, максимально близко к исходному коду, но точно никогда.
И для таких компиляторов, которые оставляют много мусора в exe-файле.
Таких как Visual Basic и частично Delphi.


Q: Какие программы для начала лучше поломать для тренировки?
A: Крякмисы для начинающих, коих в сети немеренно.

Q: Как сломать защиту на проверку компакт диска?
A: Мои методы такие
1) GetDriveTypeA.
2) Устанавливаем игру. Переключаем имя CD-ROMa на другое, перезагружаем.
Если прога начинает кричать, что диск не найден (cd не вынимаем). То значит она записала куда-то имя диска. Берем FileMon и RegMon и ищем куда. Исправляем.
3) Идем в kernel.dll (Оттуда берется функция) и заменяем mov eax,03000000 на eax,05000000, т.е. все ЖД становятся CDюками. Но некоторые игры могут не понять юмора. Так что надо сохранить старый kernel
4) Если игра полностью установилась на ЖД. И проверяет только наличие CD. Можно так. Берем настоящий диск смотрим метку тома (в основном для опред. настоящности CD проверяют метку тома). Ищем ее во всех файлах программы. Если нашлась, то делаем так. Берем любой другой CD, который постоянно у Вас смотрим там метку тома. И в проге старую метку заменяем на новую. Комментарий не для печати: Они что там все тупые за океаном. Хотя бы проверку на свободное место. На присутствие всех файлов. Попытаться сделать запись на CD. Идиотизм. М-да.... Лишь наши пытаются что-то сбацать (Руссобит), но еще слабовато.

Q: Я ломая программу изменил хекс-редактором программу и она запустилась с сообщением "Программа была изменена. Переустановите её". Как отключить проверку на изменения кода программы?
A: Еще проще. Она пишет, что "Проге Плохо". Дизассемблируем смотрим где находится
эта строка. Смотрим откуда она вызывается (чуть выше). И исправляем там переход. Или ставим бряк на MessageBox и исправляем переход.

Q: Есть ли стандартные примеры быстрого взлома?
A. Ставим бряк на введеный s/n (см. Взлом Delphi). Запускаем процедуру проверки и ждем, когда прога будет его проверять с настоящим.

Q: Особенности взлома Делфи?
A: Простой взлом. Пусть не исполует стандартные функции GetWindowTextA и MessageBox зато можно поймать так:
В окне ввода нэйма и сернама. Вводим их. Нажимаем Ctrl-D. Вводим команду s 0 l ffffffff "ваш_сернам". После того как найдет это будет в районе 8xxxxxxx. Ставим бряк bpmb <адрес найденой строки> rw . Теперь Ctrl-D, нажимаем Ок. Вываливаемя в Soft-Ice. Жмем F12 раз 8 пока не увидим примерно такую строку mov eax, xxxxx. Проходим ее по F10. Вводим d eax. Если в окне данных появился ваш сернам, то удаляем страрый бряк bc*. Ставим новый bpmb eax rw. А дальше по обстоятельствам.

Q: Особенности взлома C++?
A: Сложность зависит от мастерства автора. В понимании все просто ведь пишется на чистом API. Но если автор знает, что делает, то взлом может быть долгим.

Q: Особенности взлома Visual Basic?
A: В моем понимании самый если не самый сложный взлом, то самый тормозной. Компилятор так издевается над программой, что превращяет ее в фиг знает что. Могу посоветовать только прогу VBREF, которая после Win32Dasm по его листингу ищет в exe-шинике строки, которые VB хранит в другом формате, не как все. То же делает и один из патчей к Win32Dasm. VB использует свои функции, описание которых я пока не видел, понимается только по смыслу. Новичкам не советую.
Q: Я распаковал программу запакованную exe-паком, почему она не дизассемблируется в Win32Dasm? (Комментарий не для печати: Я тоже долго это искал.)
A: Exe-паковщики исправляют таблицу размещения в PE. Но можно поступить так: Запускаем ProcDump32. Запускаем в нем PE-Editor. Открываем распакованный файл. Нажимаем Sections. Там в нажимаем на первой секции (в C++ это .text) правой кнопкой, выбираем Edit и в поле Characteristics вместо C0000040 пишем E0000020. Так же можно сделать и с секцией .rsrc. Почему так смотри стандарт PE.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay