![]() |
eXeL@B —› Вопросы новичков —› Один из методов взлома по Крису Касперскому |
<< . 1 . 2 . 3 . |
Посл.ответ | Сообщение |
|
Создано: 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 и данным крекми. Но в принципе я не зациклен только на одном инструменте. Если кто-то уже имел успешный опыт в описываемом способе, но при помощи др. инструментов, то буду рад, если поделитесь своим опытом. Крекми и сделанные логи трассировки выкладываю здесь ![]() ![]() |
|
Создано: 18 сентября 2019 14:47 · Личное сообщение · #2 |
|
Создано: 18 сентября 2019 14:50 · Личное сообщение · #3 rukop84 Я специально запустил это исходным билдом, что бы небыло разницы, сам проверь. > А у Вас термин "ветвление" - это что-то иное!!! Нужно учитывать способ вывода в лог. К примеру 401387 появляется два раза, как по твоему, если по этому коду уже был выполнен проход ? В вывод идёт ветвление:ветвь(последовательность изменений в условиях), а не адреса блоков, так как блоки связаны ветвлениями. В начале проверяется карта для текущего адреса, если он не описан, то выводится предыдущий:текущий, после этого помечается предыдущий. Если эту логику изменить, то вывод совсем другим получится. > делать сравнения трасс с перезапуском программы? Для этого нужно отключать адресную рандомизацию ----- vx ![]() |
|
Создано: 18 сентября 2019 14:53 · Поправил: rukop84 · Личное сообщение · #4 |
|
Создано: 18 сентября 2019 15:34 · Личное сообщение · #5 |
|
Создано: 18 сентября 2019 16:11 · Поправил: rukop84 · Личное сообщение · #6 difexacaw пишет: В вывод идёт ветвление:ветвь(последовательность изменений в условиях), а не адреса блоков, так как блоки связаны ветвлениями. Хорошо, тогда пускай определения терминов будут такими: 1. "Ветвление" - это то, что Вы написали выше 2. "Развилка" - это любой условный переход (одна единственная инструкция, не блок) И тогда уже встает вопрос сугубо практического характера: - можно ли с помощью визора гарантированно определить самую первую инструкцию с условным переходом (развилку), с которой программа начинает выполняться по другому маршруту? difexacaw пишет: Если вместо карты X, построить карту R/W^ очень занятно. Без перекомпиляции инструмента можно включить эту опцию? ![]() |
|
Создано: 18 сентября 2019 16:28 · Личное сообщение · #7 rukop84 > определить самую первую инструкцию с условным переходом (развилку), Так ведь это и происходит, новые ветвления(точнее условия) идут в лог в порядке их выполнения. > Без перекомпиляции инструмента можно включить эту опцию? С памятью сложнее, чем с исполнением. Нужно определять адресуемый размер, для этого нужно пересобрать ксед. Это долго, может займусь на днях хз. ----- vx ![]() |
|
Создано: 18 сентября 2019 18:02 · Поправил: rukop84 · Личное сообщение · #8 difexacaw пишет: Так ведь это и происходит, новые ветвления(точнее условия) идут в лог в порядке их выполнения. да, не происходит такого. 401387 - вот адрес инструкции с которой начинается развилка в маршрутах, а визор в результатах показывает др. адрес ![]() Добавлено спустя 21 минуту difexacaw пишет: Так ведь это и происходит, новые ветвления(точнее условия) идут в лог в порядке их выполнения. может оно так и идет в лог (я не знаю), но в результатах визора отображается точно не адрес 401387 ![]() |
|
Создано: 18 сентября 2019 20:23 · Личное сообщение · #9 |
|
Создано: 18 сентября 2019 20:50 · Поправил: difexacaw · Личное сообщение · #10 f13nd Во первых тут он полностью разобран автоматикой, тоесть крутнул и посмотрел. Но пациент попался очень тугой. rukop84 Ты не обижайся, но ты выбрал свой лимит на вопросы. Мне уже это надоело. Если ты не можешь разобраться в десятке инструкций самых простых, то о чём может идти речь. Ты завис на какой то фигне. У меня нет желания это разбирать, лучше я тут рядом решу рандом с крэкми, там действительно интересно. Когда получится отпиши. ----- vx ![]() |
|
Создано: 18 сентября 2019 21:54 · Поправил: rukop84 · Личное сообщение · #11 f13nd пишет: крякмис разматывается бряком на GetDlgItemTextA, и бряком на обращение к памяти. За пару минут, а не недель. Овчина правда стоит выделки? весь интерес состоит именно в самом подходе методом трассировки. А сам крэкми просто взят для примера Почему собственно возник такой интерес: Недавно (1-2 месяца назад) делал обход защиты одной программы. Дак, там после ввода рег. данных не выскакивало никаких сообщений о том, что все хорошо или плохо. Программа все равно работала. Но самое интересное если что-то было не так (неверные рег. данные, или в программе был изменен код) программа начинала работу правильно, а дальше просто зависала. Оказалось это был один из механизмов защиты. И добрался до него именно с помощью трассировки. Теперь я могу находить участки кода с подобными защитами и без снятия трассы, но тогда он просто выручил. p.s.: прога была написана на dotnet, и для дотнета трейсеры известные. А вот как проводить трассировку в др. приложениях - в этом я сейчас и разбираюсь ![]() |
|
Создано: 18 сентября 2019 22:07 · Поправил: difexacaw · Личное сообщение · #12 |
|
Создано: 18 сентября 2019 22:13 · Личное сообщение · #13 rukop84 пишет: Дак, там после ввода рег. данных не выскакивало никаких сообщений о том, что все хорошо или плохо Известный прием, изобретен еще когда разработчики вдруг догадались о мантре "bpx MessageBoxA". Они необязательно после ввода контролируются, тупо сохраняет и проверяет при запуске. Точно так же можно проследить что с введенными данными происходит, расставив бряки куда надо. Трассировка может понадобиться разве что если по-нормальному покажется слишком просто и скучно. ----- 2 оттенка серого ![]() |
|
Создано: 18 сентября 2019 22:44 · Личное сообщение · #14 Профессор Ядра difexacaw предлагаю оставить наш с Вами спор по поводу визора и найденного с помощью него первого адреса с развилкой в трассе. Я просто переключусь на тестирование др. инструментов. Тем более, что штатный трейсер ollydbg это делает корректно при некоторой сноровке. Вот еще напоследок скрин того, что находит визор: ![]() ![]() |
|
Создано: 18 сентября 2019 22:44 · Поправил: difexacaw · Личное сообщение · #15 f13nd Товарищ сможет развлечься самостоятельно на своём семпле накрытом протектором. Прот выбрал рандомом, это будет реальный пример. Тот билд дий на нём не покатит. Добавлено спустя 4 минуты rukop84 Спасибо за тесты, но они не нужны инструмент древний как говно мамонта Выше семпл, займись им интересно что получится. ----- vx ![]() |
|
Создано: 18 сентября 2019 23:03 · Личное сообщение · #16 Учитель f13nd, все верно говорите. Но раз я начал тему с трассировкой, то хочу и добраться до ее логического завершения. Любое дело должно: Начинаться -> Продолжаться -> Завершаться (доводиться до результата). И Тема с трассировкой не исключение Др. подходы от меня никуда не убегут. А эффективно обучаться я могу только методом одно дело за один раз ![]() |
|
Создано: 18 сентября 2019 23:22 · Личное сообщение · #17 rukop84 пишет: Я просто переключусь на тестирование др. инструментов. Это нужно было сделать неделю назад, чем тратить время и пытаться завести абсолютно нерабочее гавнище. См. в сторону готовых дби фреймворков(динаморио, пинтул от интела), которые работают, есть документация и семплы на гитхабе п.с. и судя по скрину выше, у тебя 7-ка, и та херня там не воркает от слова совсем. ![]() |
|
Создано: 18 сентября 2019 23:33 · Поправил: difexacaw · Личное сообщение · #18 SReg > динаморио, пинтул от интела Помойму вот это самое говнище как вы говорите из дби. Тс этим не заведёт даже этот хеловорд, так как два эти тулза не могут снимать трассу. Добавлено спустя 8 минут SReg Безуспешная попытка через SDE(PIN) снять трассу - это невозможно. ди-о это вообще какая то школьная дич, работающая на кривых патчах. ----- vx ![]() |
|
Создано: 18 сентября 2019 23:59 · Личное сообщение · #19 difexacaw пишет: - это невозможно. возможно. нужно написать обвязку в пару строк, в интернете много примеров. документация есть, когда осилишь человеческий яп - можешь сам проверить. difexacaw пишет: эти тулза не могут снимать трассу. ага, а раньше могли: вообщем, умываю руки с этой темы. ![]() |
|
Создано: 19 сентября 2019 00:01 · Поправил: difexacaw · Личное сообщение · #20 |
|
Создано: 19 сентября 2019 18:11 · Личное сообщение · #21 Профессор Ядра difexacaw, в общем: - скомпоновал я визор из обновленных файлов по ссылке, которую дали; - протестировал; - получил результат один в один как на скрине в этом сообщении ![]() |
|
Создано: 19 сентября 2019 18:25 · Поправил: difexacaw · Личное сообщение · #22 rukop84 А что не так собственно пошло ? Что выше модер написал, так он без какого либо понятия, какую то дич в пример привёл. Сделай тоже самое этими инструментами.. И что значит скомпоновал, там билд достаточный для запуска любой защиты. dr-io, это просто жесть Школота столкнулась с обратным вызовом ядра и не знает что с этим делать. А есчо это всё куплено продано: Code:
Не правда что выше модер сказал, это всё работает на всей линейке. При этом в последних сборках проблема теневых вызовов решена полным NX на всё АП. Любой возврат отслеживается. Хотя не понимаю зачем я это всё и кому обьясняю.. ----- vx ![]() |
|
Создано: 19 сентября 2019 18:50 · Личное сообщение · #23 difexacaw пишет: А что не так собственно пошло ? визор при тестировании дает некорректный результат: неправильный адрес самой первой развилки difexacaw пишет: И что значит скомпоновал, там билд достаточный - в том архиве, что Вы дали по ссылке: там папка -> в которой еще несколько папок -> в каждой из которых еще... и так далее... ну, Вы понимаете... - и пока поймешь какие файлы нужны для работы визора, пока каждый из 6 файлов найдешь и скопируешь в отдельную папку... ну, Вы поняли... ![]() |
|
Создано: 19 сентября 2019 18:57 · Личное сообщение · #24 rukop84 > неправильный адрес самой первой развилки Я тебе уже побробно обьяснял, если ты не способен разобраться в десятке инструкций, то закрой это всё - метод тыка по типу твоего гадания - изменил условие.. не годится. Что ты всё пристал с этой фигнёй ко мне, выдаёт то что есть. Что то не нравится - сделай своё, тебе вон надавали тулз что закапаешься! ----- vx ![]() |
|
Создано: 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 —› Вопросы новичков —› Один из методов взлома по Крису Касперскому |
Эта тема закрыта. Ответы больше не принимаются. |