1. Теперь за форумную активность начисляются биткоины и другие криптоденьги. Подробнее.
    Скрыть объявление
  2. Появилась архивная версия форума arhiv.xaker.name, где собраны темы с 2007 по 2012 год.
    Скрыть объявление

Статья: отвязка от железа при помощи чужого ключа

Тема в разделе "Статьи, руководства, видео", создана пользователем Dr. MefistO, 19 июн 2012.

?

Понравилась ли вам статья?

  1. Да, спасибо! Все доступно и ясно написано.

    14 голосов
    100,0%
  2. Нет, статья не понравилась! Много чего непонятно написано.

    0 голосов
    0,0%
  1. Dr. MefistO
    Dr. MefistO Крывіч Глобальный модератор
    Симпатии:
    125
    Доброго времени суток, товарищи крякеры!
    Давненько я не писал статей о взломе... Но вот, время пришло!)

    Сегодня я расскажу вам о довольно таки универсальном способе отвязки программ от железа. Единственное условие, без которого ничего не выйдет: У вас должен быть правильный ключ, привязанный к какому-то чужому ID.

    Итак, что нам понадобится:

    Ссылки на ПО за вас найдет гугл. Для данной статьи я накидал простенькую программку deIDme, которая и послужит нам образцом для опытов.

    -= ССЫЛКА НА deIDme =-​


    Она имеет простенький функционал:
    1. Получить VolumeID диска C:\ через GetVolumeInformation;
    2. Получить сумму байт ID;
    3. Сравнить введенную пользователем сумму, с полученной;
    4. Если все ОК - вывести хорошее сообщение, иначе - плохое.

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

    Алгоритм действий такой:
    1. Внедрить в EXE-файл чужой ID;
    2. Внедрить процедуру, которая будет копировать внедренный нами ID на место считанного;
    3. Найти место, где программа получает строку ID или ее части;
    4. Вызвать данную процедуру после получения ID;
    5. Ввести ключ от чужого ID и радоваться.

    НАЧАЛО

    Давайте запустим наше тестовое приложение и осмотримся.

    Статья: отвязка от железа при помощи чужого ключа

    Я попробовал ввести любой ключ и получил "плохое" сообщение. Будем исправлять.

    ВНЕДРЕНИЕ

    Откроем CFF Explorer и в нем нашу программу. Нам нужен раздел Section Headers.

    [​IMG]

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

    Статья: отвязка от железа при помощи чужого ключа
    Статья: отвязка от железа при помощи чужого ключа

    Вводим размер, равный количеству символов в строке + 1 байт на 0x00 байт. Т.е. у меня выходит, что 12 символов с строке ID, и +1 на байт-терминант.

    ЗАРАНЕЕ ИЗВЕСТНО, что для чьего-то ID = 123456789020, ключ должен быть: 1388.
    Поэтому я в новую секцию вписал нужный идентификатор.

    Статья: отвязка от железа при помощи чужого ключа

    Теперь нужно узнать физический адрес данной секции. Запоминаем его.

    Статья: отвязка от железа при помощи чужого ключа

    Сохраняем изменения в файле. Закрываем CFF Explorer.

    Теперь открывает File Location Calculator и в нем нашу лабораторную крыску. Вводим файловое смещение и жмем Calculate.

    Статья: отвязка от железа при помощи чужого ключа

    Получаем значение: 40C000.​

    Теперь собственно модификация кода...

    Открываем модифицированное приложение в Olly Debugger. Я уже нашел место в коде, где происходит получение строки идентификатора: 40410D. Замечаем, что полученная строка находится по адресу: 148B78:

    Статья: отвязка от железа при помощи чужого ключа

    Сейчас нам нужно внедрить процедуру копирования нашей строки в нужное место и вызвать ее, не испортив остального кода. В статье об инжектировании кода в чужое приложение этот процесс подробно описан. Но я повторю вам основные моменты:
    1. Найти место, куда вставить нашу процедуру;
    2. Команды, которые будут на месте вызова процедуры перенести в код процедуры.

    Ищем место для внедрения процедуры

    Найти его довольно таки просто по повторяющимся одинаковым байтам. Обычно такие места можно найти ближе к концу программного кода. Это могут быть либо 0000, либо CCCC. Но их должно хватать.

    Статья: отвязка от железа при помощи чужого ключа

    Внедряем процедуру

    Выделяем как можно больше пустых команд и жмем клавишу Пробел. Поочередно в появившемся окошке вводим команды, согласно первому исходному коду в статье Manhunter'а:
    Код:
            pusha 
            cld 
            mov     edi,[lpDst] 
            mov     esi,[lpSrc] 
            mov     ecx,[dSize] 
            push    ecx 
            shr     ecx,2 
            rep     movsd 
            pop     ecx 
            and     ecx,3 
            rep     movsb 
            popa 
            ret 
    [lpDst] - адрес, КУДА будет копироваться НАША строка.
    [lpSrc] - адрес, НАШЕЙ строки.
    [dSize] - размер нашей строки в шестнадцатеричной системе счисления.

    Поэтому исправляем код на следующий:
    Код:
            pusha 
            cld 
            mov     edi, 148B78
            mov     esi, 40C000
            mov     ecx, D
            push    ecx 
            shr     ecx,2 
            rep     movsd 
            pop     ecx 
            and     ecx,3 
            rep     movsb 
            popa 
            ret 
    Получилась такая вот картина (замечаем, что процедура начинается с адреса 40435C):

    Статья: отвязка от железа при помощи чужого ключа

    Вставляем вызов процедуры

    Вставлять вызов мы будем по адресу: 40410D. А присваивание указателя на строку в регистр EDX мы допишем в нашу процедуру.
    Итак, запоминаем код, который будем менять, выделяем строчку, жмем пробел и пишем:

    Статья: отвязка от железа при помощи чужого ключа

    Теперь переходим в конец процедуры и немного ее модифицируем.

    Статья: отвязка от железа при помощи чужого ключа

    Собственно, модификация закончена.


    Сохраняем все изменения в файл, и пробуем его запустить.

    ADDENDUM

    Получился небольшой облом) Делаем небольшое исправление:

    Статья: отвязка от железа при помощи чужого ключа

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

    Сохраняем изменения, запускаем файл, проверяем чужой ключ. Модификация окончена!


    Статья: отвязка от железа при помощи чужого ключа

    Автор: Владимир Мефисто
    Специально для: XNT
     
    Последнее редактирование: 19 июн 2012
    19 июн 2012
    7 пользователям это понравилось.
  2. websters
    websters Banned
    Симпатии:
    3
    Вау, статья супер. Не знал о таком способе даже, спасибо большое, а то все патчинг да патчинг.
     
    19 июн 2012

Поделиться этой страницей

Загрузка...