воскресенье, 8 мая 2016 г.

Кейгеним LinkReader + распаковка AsPack

В этой статье я опишу процесс создания кейгена для такой замечательной программы как LinkReader. Эта программа служит для облегчения выполнения заданий (копирования ссылок из браузера). Так же я расскажу про новые инструменты которые могут использоваться для анализа различного рода программ, ведь не olly едины.




Вот кстати по поводу таких "лицензионных соглашений", на самом деле это просто текст и никакой юридической силы не имеет. Если вы будете распространять программу без уведомления автора - он не побежит судиться с каждым школьником, ведь я уверен, что Delphi у него зарегано при помощи кейгена или чужого ключа, а следовательно его самого загребут первым делом. Но даже если Delphi всё же куплено - доказывать свои права автор будет долго и упорно.

Инструментарий

Инструмент сегодня будет новый:

  1. Отладчик: x64dbg.com
  2. Восстановление импорта: Scylla Imports Reconstruction
  3. IDR - без него никак.

Распаковка ASPack 2.12



Как обычно загрузим наш файл в отладчик для 32-х битных приложений:


Если вы оказались в модуле ntdll то просто жмёте F9 и попадаете в главный модуль. В главном модуле (на скрине выше) нужно сделать шаг при помощи клавиши F8. Когда выполнение программы остановлено на адресе 005ED002 выбираем:


Попадаем сюда:


Ставим хардварный брекпойнт и стартуем программу клавишей F9. Спустя пару секунд брякаемся где то тут:


Команда по адресу 005ED420 явно намекает нам что OEP где то тут: 4FD6D0. Давайте проверим, для этого клавишей F8 дойдём до нужного места:


Вот и OEP нашлось, ничего сложного.

Для понимания того что произошло объясню: В начале вы наверное заметили команду PUSHAD, это говорит о том, что будет выполнена и обратная команда POPAD, почти все упаковщики восстанавливают стек перед прыжком на OEP, этой особенностью мы и воспользовались для нахождения оригинальной точки входа.

Теперь сдампим нашу программку:


Запомните адрес, он понадобится нам для восстановления импорта:



  1. Запускаем программу и выбираем её процесс
  2. Вводим OEP и жмём IAT Auto Search
  3. Если на шаге 2 всё сделали правильно, то должны заполниться поля VA и Size, если это сделалось то жмём Get Imports
  4. Если все импорты валидные - фиксим дамп соответствующей кнопкой.
 Проверяем программу - если всё работает то переходим к следующей части.


Анализ программы


Загружаем программу в IDR и тапаем по кнопке проверки лицензии (bActivateClick):


Хорошо, теперь мы знаем какая функция отвечает за проверку и генерацию лицензии! Настало время отладки, загружаю я значит программу и опана, она завершается! Непорядок...


Оправдания "это защита от школьников" не катят, ибо навешан был не UPX.

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

Для начала занопим всё что не нужно:


Ого сколько места! Сюда должен влезть следующий код:

mov eax,dword ptr fs:[18]
mov eax,dword ptr ds:[eax+30]
mov byte ptr ds:[eax+2],0

Этот код устанавливает флаг отладки в false тем самым говоря функции isDebuggerPresent (которая находиться на более высоком уровне) что никакого отладчика нет и всё спокойно. Даже если автор додумался поставить проверку этой функции на модификацию/бряки и прочие непотребства - оно ему поможет чуть меньше чем никак.


Что бы сохранить изменения жмём ПКМ по выделенному коду и выбираем Patch, далее сами разберётесь. Кстати, не обязательно размещать код по центру, я это сделал для красоты.

Теперь можно спокойно отлаживать программу, перейдём в функцию генерации правильного ключа и посмотрим что там происходит:


Что бы было понятнее - я добавил комментарии к каждой функции. Но если у вас плохо с ассемблером - не беда! Этот отладчик может как и Hex Rays генерировать код, для этого выделяем всю функцию, жмём ПКМ и выбираем пункт "Decompile" в результате получаем следующий код имеющий синтаксис С++:


Даже если вы не знаете и С++ то алгоритм будет понятен если заменить все адреса на названия функций взятые из IDR. А переменным дать нормальные имена уже во время отладки. Но если и после этого ничего не понятно то объясню алгоритм генерации ключа  на пальцах, он довольно простой:  

  1. Используем строку ahrtkslpbz и ключ который нужен автору: k6a0a3l0h
  2. Берём через один символ начиная с первого
  3. Взяли k, получили его позицию в строке: 5
  4. Взяли a, получили его позицию в строке: 1
  5. Взяли L, получили его позицию в строке: 7
  6. Взяли h, получили его позицию в строке: 2
  7. Получили 561013702
  8. Используем строку dynfgxmiew и ключ 561013702
  9. Если символ w то подставляем 0 (ибо он десятый)
  10. Взяли символ с 6-й позиции: x
  11. Взяли символ с 10-й позиции: 0
  12. Взяли символ с 3-й позиции: n
  13. Взяли символ с 10-й позиции: 0
  14. Получили ключ активации 5x101n702

Пишем кейген


Мы же крутые крякеры, использовать Delphi для кейгена удел слабаков, мы заюзаем ассемблер (плохие парни так и делают). Для написания кейгена я использую FASM, вы можете использовать что угодно, на вкус и цвет только фломастеры.

При написание кейгена я сделал не большую хитрость, а именно:

decode    db 'ahrtkslpbz1234567890',0
generate  db '1234567890dynfgxmie0',0

Объясню что тут произошло: мы вместо того что бы переводить код в число сразу переводим его в код для активации затрачивая меньше процессорного времени.



Ну вот в принципе и всё, код очень простой и выложен на PASTEBIN. Да знаю что не идеал, можно было ещё кучей способов сделать но яж не каждый день пишу драйвера на асме и по этому сделал как мог.


Скачать все файлы из статьи можно тут: MEGA

 

invoke  ExitProcess



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

© VANS

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

  1. Анонимный13 мая 2016 г., 23:29

    Было интересно, ждем новых статей.

    ОтветитьУдалить
  2. )))) Опять эта прога, автор LinkReader видимо провинился чем то в этом мире.

    http://www.vans-soft.ru/2012/06/link-reader.html

    ОтветитьУдалить
  3. Анонимный16 июня 2016 г., 9:17

    а можно как то крякнутую версию скачать?

    ОтветитьУдалить
    Ответы
    1. Кряка нет, только генератор ключей.

      Удалить
  4. Спасибо тебе огромное за мануалы и взломанный софт. Сам имел практику взлома только на Android.

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