История взлома TiffCombiner


Tagged ,

Сегодня хочу рассказать историю взлома программы написанной на Visual Basic.
В качестве жертвы, совершенно случайно, попала мне в руки программа Tiff Combiner.
Программа умеет вытворять всякие штуки с tiff файлами, например склеивать, нарезать и все в том же духе. Программа является Shareware и работает 14 дней в триальной версии. так же у незарегистрированной версии существует ограничение на
одновременное количество склеиваемых файлов. Будем пробовать обходить эти ограничения 😉
Если честно, я терпеть не могу ковырять программы написанные на VB. Дизассемблированный код выглядит просто отвратительно и изобилует отвратительными VB функциями. ну что ж, переступим через себя и начнем.
Первое что я сделал — это посмотрел в PEiD, не упакована ли чем то программа. Мне повезло, авторы программы оказались довольно расторопными и не стали ее ничем защищать. В PEiD красовалась надпись Microsoft Visual Basic 5.0 / 6.0. Наверно единственным плюсом VB программ является их легкая декомпиляция, которая здорово помогает при реверсе. Существует довольно большое количество VB декомпиляторов, но я пользуюсь VBRezQ. Сею программу можно скачать на cracklab.ru.
На мой взгляд самая удобная и интуитивно понятная программа.
После декомпиляции, программа предстала практически в исходном виде. Заглянув в Process.Log можно увидеть все формы и модули программы. А их названия просто выдают себя. Чего стоит название CLASS12.CLS — Trial или CLASS22.CLS — SerialGenerator 😉
Прежде всего, меня конечно заинтересовал SerialGenerator, именно этот класс содержал алгоритм генерации серийного номера из вводимого логина. Хотя осмотрев Trial нашел
тоже весьма интересную функцию — Sub checkSerialCode(). Думаю если пропатчить там пару байт можно заставить программу принять любой серийник 😉 Но это не наш метод. С точки зрения реверса, правильным взломом является нахождение сериного
номера программы, а высшим пилотажем, это понять алгоритм генерации и написать KeyGen. Писать KeyGen я не стал, в общем то особо и в генерации серийника не стал ковыряться. Понял только что генерация происходит следующим образом: Берется логин, ксориться, а получающийся цифры разделяются группами по 5 цифр, затем идем процесс замены некоторых цифр на другие значения, например 27 меняется на Z3, 91 на 8F и так далее.


‘N * ref: «Z3»
‘N * ref: «27»
‘N * ref: Replace(
‘N * ref: __vbaStrMove
‘N * ref: __vbaStrCopy
‘N * ref: __vbaFreeStr
‘N * ref: __vbaGenerateBoundsError
‘N * ref: __vbaGenerateBoundsError
‘N * ref: «8F»
‘N * ref: «91»
‘N * ref: Replace(
‘N * ref: __vbaStrMove
‘N * ref: __vbaStrCopy
‘N * ref: __vbaFreeStr
‘N * ref: __vbaGenerateBoundsError
‘N * ref: __vbaGenerateBoundsError

Затем идет объединения этих 5циферных значений, между ними вставляется знак «-» .


‘N * ref: «-»
‘N * ref: __vbaStrCat
‘N * ref: __vbaStrMove
‘N * ref: __vbaStrCat
‘N * ref: __vbaStrMove
‘N * ref: «-»

В итоге получается серийный номер состоящий из 5 секций разделенных «-» . Это конечно все очень в общих чертах и возможно ошибочно, так как я уже говорил не задавался целью понять алгоритм генерации. На этом теоретический разбор закончен, настало время действовать.
В качестве отладчика я использую OllyDbg. После загрузки программы в отладчик, встает вопрос, как среди всего этого
безобразия найти нужный нам участок кода. Ставить бряки на функции подобно __vbaStrCat смысла нет, так как по ходу программы они очень распространены. Надо искать какие то редко встречающейся функции. В данном программе это оказалась
функция __vbaAryConstruct2. По всей программе она вызывается всего 12 раз. Из этих 12 не трудно найти начало Sub Serial_Generator(). У меня он оказался по адресу

004BB7F1 . FF15 74114000 CALL DWORD PTR DS:[; MSVBVM60.__vbaAryConstruct2

Ставим бряк на этот адресс и пускаем программу. Вводим Логин, любой серийный номер и жмем кнопку OK. После нажатия на кнопку Если далее жать F8 можно наблюдать как будут браться некие значения, далее буду заменятся цифры и наконец объединятся с «-» . По адресу :

004BFE45 . 8BD0 MOV EDX,EAX

мы получим готовый серийный номер, который будет находится в EAX. Аккуратно переписываем его себе и выключаем отладчик. Затем запускаем TiffCombiner вводим тот же логин что и первый раз и аккуратно выписанный серийник. Все, после этого программа будет зарегистрирована на введенный логин.

На этом EasyCrack закончен, мы имеем полноценную рабочую программу, не изменяя ее логики.

Данная статья написана строго в познавательных целях, дабы указать авторам программы на ее уязвимости. Взлом программного обеспечения карается по закону, так что будьте благоразумны, покупайте лицензионный софт. 😉 По понятным причинам, серийник не буду выкладывать.

© Человек_Разумный

Share:

No comments

RSS / trackback

Respond