Заливка дампа памяти процесса как вариант снятия защиты программы

Тема в разделе "WASM.BEGINNERS", создана пользователем fingoldo, 3 мар 2012.

  1. fingoldo

    fingoldo New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2005
    Сообщения:
    9
    Ребят, подскажите, возможен ли такой теоретический сценарий взлома приложения Win.
    защита построена так:
    1) ключевые процедуры приложения защищены числовыми ключами, которые разбросаны по коду и математически искажают результат
    2)вторая часть ключей, которая может правильно разблокировать результат, читается программой с сервера производителя во время старта
    3) в каждый экземпляр программы зашит индивидуальный ID
    4) сервер проверяет, если обратившийся экземпляр (ID) не работает с другого IP, и является оплаченным - выдаёт правильные ключи, которые правильно расшифровывают ключевые процедуры внутри экзешника

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

    Однако после получения правильного ответа область памяти приложения полностью "расшифрована".

    Собственно, вопрос: есть ли способ как-то сохранить дамп памяти, а потом, запуская приложение, тупо заменять ВСЮ его память на сохранённый дамп и оживлять?
    Защита стоит на стандартном EXE и на COM.
     
  2. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Память либо дампиться (кусками или целиком в зависимости от того как шифруется) либо код исполняемого файла обрабатывается статически (при знании алгоритма и ключа).
    Для дампа либо OllyDBG, PETools для стстики hiew например.
     
  3. fingoldo

    fingoldo New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2005
    Сообщения:
    9
    Спасибо, чем сдампить образ самого exe, я знаю.
    вопрос в том - можно ли приаттачить к exe память из дампа, а потом "оживить" поток с этой памятью?
     
  4. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Если расшифровка происходит один раз, то в отладчике убедитесь что программа расшифрована в памяти, затем сдампите файл, восстановите импорт и вырежете расшифровку, что-бы не портилось правильные данные. Или просто подсуньте программе известный ключ (т.е. нечто тип эмулятора сервера). Если расшифровка/шифровка происходит постоянно то можно воспользоваться следующим методом: прибить шифровшик в памяти подождать пока все расшифруется и затем повторить то что описано выше.
     
  5. fingoldo

    fingoldo New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2005
    Сообщения:
    9
    Ладно, может, я чего-то не понимаю.
    В двух словах подскажите.
    Вот открываю я PE Tools, нахожу в списке свой процесс (уже полностью расшифрованный).
    Далее что? Команда Dump full?
    Хорошо, допустим, сделал.
    Убиваем процесс, запускаем снова.
    Теперь у него ключи в памяти зашифрованы.
    Как теперь залить ему дамп памяти? Какие кнопки жать?
     
  6. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Вам смотрите что нужно, вы сдампили PE-Tools'ом, получили расшифрованный файл на диске но с изгаженной таблицей импорта, ее нужно востановить. после этого у вас будет расшифрованный файл, который Вы сможете запустить, но он скорее всего вылетит так как попытается расшифровать уже рашифрованные данные поэтому расшифровшик нужно вырезать т.е. сделать так что-бы он не отрабатывал и все.
     
  7. fingoldo

    fingoldo New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2005
    Сообщения:
    9
    Да нет же, сам файл не упакован вообще!
    Никакой пакер на нём разработчики не использовали.
    И таблицы импорта никто не сбивал, защиты от дампирования там никакой нет.
    Мой вопрос не в том, как сделать дамп образа файла, а в том, можно ли сделать дамп всего пространства оперативной памяти приложения, чтобы, запустив это приложение в сл. раз, подгрузить ему эту память, "как будто оно никогда и не выключалось".
     
  8. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    а понял, вы области знаете где ключи храняться?
     
  9. fingoldo

    fingoldo New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2005
    Сообщения:
    9
    я знаю, только, что эти области при каждом запуске выделяются динамически.
    А ключи туда закачиваются каждый раз online, с сервера.
     
  10. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    я бы сделал так поменял когд который получет ключ и записывал туда всегда правильный ключь а общение с сервером выкинул.
     
  11. fingoldo

    fingoldo New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2005
    Сообщения:
    9
    Я тоже так хотел вначале сделать, но там каждый день ключи разные, т.к. запрос уходит на сервер зашифрованный, и в него вкючается текущая дата + там "соль" какая-то, не хочется разбираться подробно, всё дизассемблируя...
    Думал, может, как-то хитро сдампить можно :)
     
  12. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    вообщем сложно так сказать, что-то в принципе можете програмулину загрузчик написать (для пробы ) которая попробует записать память по нужным адресам. но скорее всего обломится. вероятнее всего без дизассемблирования и сознания работы алгоритма никак.
     
  13. fingoldo

    fingoldo New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2005
    Сообщения:
    9
    Понятно, спасибо!