Сейчас на форуме: tyns777, bezumchik (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Один из методов взлома по Крису Касперскому
<< . 1 . 2 . 3 .
Посл.ответ Сообщение

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 06 сентября 2019 13:12
· Личное сообщение · #1

Здравствуйте, ув. Профессионалы! В общем понравился один прием взлома описанный Крисом Касперским.

Суть метода в следующем:
1. Прогнать трейсером программу с правильным паролем. Сохранить лог в файл_1
2. Прогнать трейсером программу с неправильным паролем. Сохранить лог в файл_2
3. Сравнить два лога и найти место, где программа отклонилась от исходного маршрута

про сам метод прочитать можно, например, здесь:
https://exelab.ru/F/action=vthread&forum=1&topic=4492


Теперь осталось проверить как это все работает на практике:
1. Подопытной зверюшкой взял cracme от CrueHead'а. В этом крэкми:
- если Логин будет содержать в себе цифры, то получите подряд два плохих сообщения
- иначе одно плохое сообщение

2. Делаю лог трассировки программы с правильным Логином (не содержащим цифр):
- открываю крэкми в OllyDbg 2.01 -> открываю окно run trace -> Ctrl + F11
- вызываю окно ввода рег. данных -> Ввожу правильный Логин (без цифр) и любой пароль (кнопку ОК еще не нажимаю)
- в окне run trace очищаю лог (чтобы не было ничего лишнего, когда нажму кнопку ОК) и даю команду на сохранение лога в txt-файл
- нажимаю кнопку ОК по форме с рег. данными -> появляется одно плохое сообщение -> OK (по сообщению) -> в окне run trace выбираю stop log
- 1-й лог готов

3. Проделываю аналогичные действия с неправильным Логином (содержащим цифры):
- появляется 1-е плохое сообщение -> ОК -> 2-е такое же сообщение -> OK
- и дальше как обычно: окно run trace -> ПКМ -> стоп лог
- 2-й лог готов

4. Далее при помощи плагина Compare в Notepad++ делаю их сравнение. Но оба лога на удивление полностью одинаковые!!!


Сама цель создания Темы:
- это разобраться в описанном методе и научиться находить отличия в алгоритме выполнения программы при помощи трассировки

Круто конечно, если кто-нибудь поможет разобраться с трассировкой в OllyDbg и данным крекми. Но в принципе я не зациклен только на одном инструменте. Если кто-то уже имел успешный опыт в описываемом способе, но при помощи др. инструментов, то буду рад, если поделитесь своим опытом.

Крекми и сделанные логи трассировки выкладываю здесь

f335_06.09.2019_EXELAB.rU.tgz - Crackme.rar




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 18 сентября 2019 14:47
· Личное сообщение · #2

rukop84 пишет:
У Криса Касперского точно такое есть

я имел ввиду ник на этом форуме это его был вроде

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 18 сентября 2019 14:50
· Личное сообщение · #3

rukop84

Я специально запустил это исходным билдом, что бы небыло разницы, сам проверь.

> А у Вас термин "ветвление" - это что-то иное!!!

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

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

> делать сравнения трасс с перезапуском программы?

Для этого нужно отключать адресную рандомизацию --> Link <--. Легально это сделать вроде бы как нельзя >W7?, хотя я не разбирался подробно. В любом случае по простому не получится.

-----
vx




Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 18 сентября 2019 14:53 · Поправил: rukop84
· Личное сообщение · #4

Isaev пишет:
я имел ввиду ник на этом форуме это его был вроде

- это ветераны форума могут знать




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 18 сентября 2019 15:34
· Личное сообщение · #5

rukop84



Если вместо карты X, построить карту R/W^

-----
vx




Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 18 сентября 2019 16:11 · Поправил: rukop84
· Личное сообщение · #6

difexacaw пишет:
В вывод идёт ветвление:ветвь(последовательность изменений в условиях), а не адреса блоков, так как блоки связаны ветвлениями.

Хорошо, тогда пускай определения терминов будут такими:
1. "Ветвление" - это то, что Вы написали выше
2. "Развилка" - это любой условный переход (одна единственная инструкция, не блок)

И тогда уже встает вопрос сугубо практического характера:
- можно ли с помощью визора гарантированно определить самую первую инструкцию с условным переходом (развилку), с которой программа начинает выполняться по другому маршруту?

difexacaw пишет:
Если вместо карты X, построить карту R/W^
очень занятно. Без перекомпиляции инструмента можно включить эту опцию?




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 18 сентября 2019 16:28
· Личное сообщение · #7

rukop84

> определить самую первую инструкцию с условным переходом (развилку),

Так ведь это и происходит, новые ветвления(точнее условия) идут в лог в порядке их выполнения.

> Без перекомпиляции инструмента можно включить эту опцию?

С памятью сложнее, чем с исполнением. Нужно определять адресуемый размер, для этого нужно пересобрать ксед. Это долго, может займусь на днях хз.

-----
vx




Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 18 сентября 2019 18:02 · Поправил: rukop84
· Личное сообщение · #8

difexacaw пишет:
Так ведь это и происходит, новые ветвления(точнее условия) идут в лог в порядке их выполнения.

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


Добавлено спустя 21 минуту
difexacaw пишет:
Так ведь это и происходит, новые ветвления(точнее условия) идут в лог в порядке их выполнения.
может оно так и идет в лог (я не знаю), но в результатах визора отображается точно не адрес 401387




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 18 сентября 2019 20:23
· Личное сообщение · #9

Конечно понимаю, что иногда хочется экзотики, но вообще-то этот крякмис разматывается бряком на GetDlgItemTextA, и бряком на обращение к памяти. За пару минут, а не недель. Овчина правда стоит выделки?

-----
2 оттенка серого





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 18 сентября 2019 20:50 · Поправил: difexacaw
· Личное сообщение · #10

f13nd

Во первых тут он полностью разобран автоматикой, тоесть крутнул и посмотрел. Но пациент попался очень тугой.

rukop84

Ты не обижайся, но ты выбрал свой лимит на вопросы. Мне уже это надоело. Если ты не можешь разобраться в десятке инструкций самых простых, то о чём может идти речь. Ты завис на какой то фигне. У меня нет желания это разбирать, лучше я тут рядом решу рандом с крэкми, там действительно интересно.

Когда получится отпиши.

-----
vx




Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 18 сентября 2019 21:54 · Поправил: rukop84
· Личное сообщение · #11

f13nd пишет:
крякмис разматывается бряком на GetDlgItemTextA, и бряком на обращение к памяти. За пару минут, а не недель. Овчина правда стоит выделки?

весь интерес состоит именно в самом подходе методом трассировки. А сам крэкми просто взят для примера

Почему собственно возник такой интерес:
Недавно (1-2 месяца назад) делал обход защиты одной программы. Дак, там после ввода рег. данных не выскакивало никаких сообщений о том, что все хорошо или плохо. Программа все равно работала. Но самое интересное если что-то было не так (неверные рег. данные, или в программе был изменен код) программа начинала работу правильно, а дальше просто зависала. Оказалось это был один из механизмов защиты. И добрался до него именно с помощью трассировки. Теперь я могу находить участки кода с подобными защитами и без снятия трассы, но тогда он просто выручил.

p.s.: прога была написана на dotnet, и для дотнета трейсеры известные. А вот как проводить трассировку в др. приложениях - в этом я сейчас и разбираюсь




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 18 сентября 2019 22:07 · Поправил: difexacaw
· Личное сообщение · #12

rukop84

Ты не смог даже десять строк сбилдить. Тебе f13nd обьяснит популярно. Ты сам ничего не смог сделать, даже разобраться в готовом. Честно говоря это первый человек, при этом ньюби, на которого я потратил тут столько времени.

-----
vx





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 18 сентября 2019 22:13
· Личное сообщение · #13

rukop84 пишет:
Дак, там после ввода рег. данных не выскакивало никаких сообщений о том, что все хорошо или плохо

Известный прием, изобретен еще когда разработчики вдруг догадались о мантре "bpx MessageBoxA". Они необязательно после ввода контролируются, тупо сохраняет и проверяет при запуске. Точно так же можно проследить что с введенными данными происходит, расставив бряки куда надо. Трассировка может понадобиться разве что если по-нормальному покажется слишком просто и скучно.

-----
2 оттенка серого


| Сообщение посчитали полезным: difexacaw

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 18 сентября 2019 22:44
· Личное сообщение · #14

Профессор Ядра difexacaw предлагаю оставить наш с Вами спор по поводу визора и найденного с помощью него первого адреса с развилкой в трассе. Я просто переключусь на тестирование др. инструментов.

Тем более, что штатный трейсер ollydbg это делает корректно при некоторой сноровке.

Вот еще напоследок скрин того, что находит визор:





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 18 сентября 2019 22:44 · Поправил: difexacaw
· Личное сообщение · #15

f13nd

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

Добавлено спустя 4 минуты
rukop84

Спасибо за тесты, но они не нужны инструмент древний как говно мамонта --> Link <-- тут я выложил сборку когда посчитал что после тысяч тестов он стал стабилен, единственный анстаб из всей существующей защиты был на asprotect, это я кстате так и не решил, толи какая то фича с семплом, то ли баг с обработкой apc хз.)

Выше семпл, займись им интересно что получится.

-----
vx


| Сообщение посчитали полезным: rukop84

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 18 сентября 2019 23:03
· Личное сообщение · #16

Учитель f13nd, все верно говорите. Но раз я начал тему с трассировкой, то хочу и добраться до ее логического завершения.
Любое дело должно: Начинаться -> Продолжаться -> Завершаться (доводиться до результата). И Тема с трассировкой не исключение

Др. подходы от меня никуда не убегут. А эффективно обучаться я могу только методом одно дело за один раз

| Сообщение посчитали полезным: difexacaw

Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 18 сентября 2019 23:22
· Личное сообщение · #17

rukop84 пишет:
Я просто переключусь на тестирование др. инструментов.

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

п.с. и судя по скрину выше, у тебя 7-ка, и та херня там не воркает от слова совсем.

| Сообщение посчитали полезным: rukop84


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 18 сентября 2019 23:33 · Поправил: difexacaw
· Личное сообщение · #18

SReg

> динаморио, пинтул от интела

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

Добавлено спустя 8 минут
SReg

Безуспешная попытка через SDE(PIN) снять трассу --> Link <--

- это невозможно.

ди-о это вообще какая то школьная дич, работающая на кривых патчах.

-----
vx




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 18 сентября 2019 23:59
· Личное сообщение · #19

difexacaw пишет:
- это невозможно.

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

difexacaw пишет:
эти тулза не могут снимать трассу.

ага, а раньше могли:
--> Link <--
--> Link <--
вообщем, умываю руки с этой темы.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 19 сентября 2019 00:01 · Поправил: difexacaw
· Личное сообщение · #20

SReg

Я проверил под отладчиком выложенный в паблик Интелом билд SDE. Там обработка пакетная - блок в буфер, при этом его мод, выход их циклов и тп. Затем напрямую управление туда отпускается. Не нужно ваших сказок. Никакой там трассировки нет. А есчо там Int 0x2e

-----
vx




Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 19 сентября 2019 18:11
· Личное сообщение · #21

Профессор Ядра difexacaw, в общем:
- скомпоновал я визор из обновленных файлов по ссылке, которую дали;
- протестировал;
- получил результат один в один как на скрине в этом сообщении --> Link <--




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 19 сентября 2019 18:25 · Поправил: difexacaw
· Личное сообщение · #22

rukop84

А что не так собственно пошло ?

Что выше модер написал, так он без какого либо понятия, какую то дич в пример привёл. Сделай тоже самое этими инструментами..

И что значит скомпоновал, там билд достаточный для запуска любой защиты. dr-io, это просто жесть --> Link <--

Школота столкнулась с обратным вызовом ядра и не знает что с этим делать. А есчо это всё куплено продано:

Code:
  1. * Copyright (c) 2011-2019 Google, Inc.  All rights reserved. 
  2. * Copyright (c) 2006-2010 VMware, Inc.  All rights reserved. 


Не правда что выше модер сказал, это всё работает на всей линейке. При этом в последних сборках проблема теневых вызовов решена полным NX на всё АП. Любой возврат отслеживается. Хотя не понимаю зачем я это всё и кому обьясняю..

-----
vx




Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 19 сентября 2019 18:50
· Личное сообщение · #23

difexacaw пишет:
А что не так собственно пошло ?

визор при тестировании дает некорректный результат: неправильный адрес самой первой развилки

difexacaw пишет:
И что значит скомпоновал, там билд достаточный

- в том архиве, что Вы дали по ссылке: там папка -> в которой еще несколько папок -> в каждой из которых еще... и так далее... ну, Вы понимаете...
- и пока поймешь какие файлы нужны для работы визора, пока каждый из 6 файлов найдешь и скопируешь в отдельную папку... ну, Вы поняли...




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 19 сентября 2019 18:57
· Личное сообщение · #24

rukop84

> неправильный адрес самой первой развилки

Я тебе уже побробно обьяснял, если ты не способен разобраться в десятке инструкций, то закрой это всё - метод тыка по типу твоего гадания - изменил условие.. не годится.

Что ты всё пристал с этой фигнёй ко мне, выдаёт то что есть. Что то не нравится - сделай своё, тебе вон надавали тулз что закапаешься!

-----
vx




Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 19 сентября 2019 19:33 · Поправил: rukop84
· Личное сообщение · #25

Эврика!!! Я сейчас сравнивал трассы принципиально иным подходом:
- через анализ покрытия кода и до меня дошло почему в результаты визора заносится вовсе не адрес первой развилки. Вот скрин:


Добавлено спустя 6 минут
Готово, можно смотреть на скрин

Добавлено спустя 1 час 21 минуту
Эврика-а-а-а-а-а! Я понял как находить адрес первой развилки в маршруте с помощью визора:
- Крис в своей книге писал, что при подходе, который использует Профессор Ядра difexacaw нужно не только сравнивать первый массив со вторым, но и второй с первым!!!

Тут же проделал это на практике:
- сравнил 2-й массив с 1-м с помощью визора. И о-о-о, чудо!!! Визор корректно определил эту развилку!!!

Добавлено спустя 16 часов 6 минут
Инструменты для себя - подобрал,
желаемые навыки - прокачал,
Всем Спасибо! Тема Закрыта

Инструменты выбрал следующие:
1. штатный трейсер OllyDbg 2.01;
2. штатный инструмент Hit trace в OllyDbg 2.01 (для сравнения трасс через анализ покрытия кода);
3. визор для OllyDbg 2.01 от Профессора Ядра difexacaw

Главные ключевые особенности, которые были выявлены в ходе тестирования:
1. Для того, чтобы штатный трейсер корректно записал трассу следует дебаггер ставить на паузу. И затем уже с паузы запускать командами 'Trace into' или 'Hit trace'
2. Если Вы будете искать самую первую развилку (с которой трассы меняют маршруты) через анализ покрытия кода, то Вам придется сравнивать не тольку Трассу_1 с Трассой_2, но и Трассу_2 с Трассой_1
3. Чтобы произвести корректное сравнение трасс, Вам понадобятся:
- Notepad++;
- к нему плагин Compare;
- и Ваш хорошо прокачанный навык по работе с регулярными выражениями (для корректного сравнения логи трасс придется чистить, а сделать это можно с помощью регуляр. выражений)


<< . 1 . 2 . 3 .
 eXeL@B —› Вопросы новичков —› Один из методов взлома по Крису Касперскому
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати