Сейчас на форуме: 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




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

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

Не должно оно падать, дий может крутить любой протектор. Есть один косяк с памятью на wow, точнее пока из апп не произошла выборка в область памяти и не снят аттр WRITECOPY, то память из другого процесса писать нельзя. Странно что на 8 wow инжект вообще работает

-----
vx




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

Создано: 10 сентября 2019 15:45 · Поправил: rukop84
· Личное сообщение · #3

SDK, захотел повторить Ваши действия из видео-руководства:
- скачал самый первый крекми как на видео;
- разбил видео-инструкции по работе с визором на составляющие шаги;
- и застрял в следующем:

- после шага 5.1 у меня выскакивает Плохое сообщение (Wrong serial!). А на видео оно появляется аж на шаге 6.3. Тестирование провожу на OllyDbg_2.01 в ОС Win_7_32-bit. Может надо еще произвести какие-то доп. настройки в OllyDbg или в самом визоре?


Составляющие шаги по работе с визором:

Шаг 1. Скопировать 'crackme.exe' в папку с визором, переименовать в 'app.exe'

Шаг 2. Запустить на исполнение 'Ij.exe'

Шаг 3. В OllyDbg:
3.1 присоединиться к запущенному процессу (File -> Attach -> app.exe)
3.2 запустить программу на выполнение (Debug -> Run или F9)

Шаг 4. В крэкми:
- ввести любые Имя_пользователя и Пароль

Шаг 5.
5.1 в крэкми: клик по кнопке cHECK
5.2 в OllyDbg: клик по окну дампа
5.3 активировать крекми (поместить в фокус) и еще раз нажать на кнопку cHECK

Шаг 6.
6.1 в окне дампа перейти по адресу [30003008]
6.2 установить значение флага G_ON равным 1
6.3 активировать крекми -> нажать кнопку 'cHECK' -> дождаться Плохого сообщения (Wrong serial!)

Шаг 7.
7.1 OllyDbg -> Pause
7.2 и дальше из Окна дампа в Окно дизассемблера следуют ручные переходы по измененным значениям и уже непосредственный анализ кода


Хочется еще разобраться и в самой логике Шага 5. Ну, например, понятна логика в следующем:
- визором построить карту исполнения каждой функции программы с правильным паролем;
- затем с неправильным паролем (где будет уже другой маршрут выполнения программы);
- и визором подсветить адреса, где маршрут отклонился
А в видео-руководстве по логике программа "бежит" по одному и тому же маршруту, но изменения в адресах есть, откуда это и как оно получилось?



Ранг: -1.9 (гость), 3thx
Активность: 0.160.1
Статус: Участник

Создано: 10 сентября 2019 16:37
· Личное сообщение · #4

rukop84 пишет:
визором построить карту исполнения каждой функции программы с правильным паролем;
а у вас правильный пароль есть откуда-то?



Ранг: -26.7 (нарушитель), 7thx
Активность: 0.060.08
Статус: Участник

Создано: 10 сентября 2019 16:59 · Поправил: sty
· Личное сообщение · #5

PEvgen пишет:
а у вас правильный пароль есть откуда-то?


Тут, видимо, для понятия принципа работы, взят крекми с заранее известными данными (пароль и т.п.).

P.S. Кстати, тема же по методу К.К., а у Криса же там не крекми, а программа до окончания пробного периода и после.




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

Создано: 10 сентября 2019 17:08
· Личное сообщение · #6

rukop84

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

-----
vx


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

Ранг: -1.9 (гость), 3thx
Активность: 0.160.1
Статус: Участник

Создано: 10 сентября 2019 17:52
· Личное сообщение · #7

sty пишет:
Тут, видимо, для понятия принципа работы, взят крекми с заранее известными данными (пароль и т.п.).

P.S. Кстати, тема же по методу К.К., а у Криса же там не крекми, а программа до окончания пробного периода и после.

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



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

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

difexacaw пишет:
Я там кнопку не отпускаю

Ура-а-а-а, получилось!!! Ну, теперь вроде бы все пазлы сошлись

Также еще хотел уточнить про смысл остальных опций визора. В инструменте их всего 5:
- G_ON
- G_IN
- G_Cn
- G_Un
- G_Cp

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




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

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

rukop84

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

> по логике программа "бежит" по одному и тому же маршруту, но изменения в адресах есть, откуда это и как оно получилось?

Проверка ведь один раз выполняется, при нажатии на ввод. Вот эти блоки обработки и выделяются. Если процедуры проверки ключа вызываются повторно, то они не будут видны. Если повторно ввод выполнить, то лог пустой будет.

-----
vx




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

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

difexacaw пишет:
> по логике программа "бежит" по одному и тому же маршруту, но изменения в адресах есть, откуда это и как оно получилось?

этот вопрос отпал после того, как Вы ответили про то, что не отпускаете кнопку....

И тогда получается все очень просто. Пазл сошелся:
1. До установки флага: строится карта исполнения, где помечается каждая функция
2. После установки флага: происходит сравнение трасс
Вот и все, противоречий вроде бы никаких нет

Др. словами, я не знал раньше, что кнопка нажимается только один раз




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

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

Потом попробую сделать аналогично, но не с выборкой на исполнения кода, а на RW(выборку данных), тоесть построить карту R/W. Интересно что получится.

-----
vx




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

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

difexacaw пишет:
построить карту R/W. Интересно что получится.

если окажется работоспособным, то может очень крутой инструмент получиться



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

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

В общем очень долго и много эксперементировал со штатным трейсером OllyDbg 2.01 и скорее всего буду продолжать тесты, так как не до конца еще все ясно. Например:
- почему он пишет трассу, но при этом пропускает ключевые участки (ради которых собственно запись трассы и велась). Чувствую, что это связано как-то с событиями GUI о которых говорил Профессор Ядра difexacaw
- и как настроить трейсер, чтобы он гарантированно записывал то, что от него требуется

Мастер Medsft, извиняюсь, к Вашему инструменту еще не успел подобраться

Сформулирую еще раз цели и задачи создания Темы, так как это все как-то размылось в ходе обсуждения.

Исходные данные:
п.1) cracme от TrueHead'a --> Link <--
п.2) Login_1: 'RKP', Password_1: '12345' -> появится одно плохое сообщение
п.3) Login_2: 'RKP98', Password_2: '12345' -> будет два плохих сообщения (т.к. логин содержит цифры)
п.4) Login_3: 'Assa', Password_3: 'A764' -> будет хорошее сообщение (т.к. это правильные данные)
п.5) Инструменты, предложенные участниками форума:
_____- штатный трейсер OllyDbg 2.01
_____- визор от Профессора Ядра difexacaw --> Link <--
_____- Tracer 1.03 от Мастера Medsft --> Link <--
_____- плагин для IDA Pro, предложенный участником VOLKOFF --> Link <-- (кстати, после публикации ссылки на нашем форуме, на github'е ее вроде бы забанили)

Постановка Задачи:
1) записать трассы с данными из п.2) и п.3). Сравнить их, найти в коде первую развилку
2) записать трассы с данными из п.2) и п.4). Сравнить их, найти в коде первую развилку
3) проделать вышеописанные действия с помощью инструментов из п.5)
4) определить инструменты, которым вообще "по зубам" подобного рода задачи


Что уже проделано:
-----------------------------------------------------------------------------------
Визором проделан пункт задачи 1):
difexacaw пишет:
Если ввести с цифрами то из изменений одно ветвление CC 40138B:4013AC

Развилка найдена неверно, элементарная проверка в коде программы это подтверждает
-----------------------------------------------------------------------------------

Штатным трейсером OllyDbg 2.01 проделан пункт задачи 1):
найденная развилка: 00401387-0040139C, сделал скрин: --> Link <--
Развилка найдена верно. Простой тест с заменой условного перехода на безусловный это подтверждает
-----------------------------------------------------------------------------------




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 17 сентября 2019 14:58 · Поправил: ClockMan
· Личное сообщение · #14

rukop84 пишет:
и как настроить трейсер, чтобы он гарантированно записывал то, что от него требуется

RMB >RunTrace>AddSection


-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




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

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

ClockMan, задать диапазон трассировки - это кажется первое, что я проверял, когда проводил свои тесты. Все равно он не пишет то, что требуется.

На текущий момент в OllyDbg 2.01 вроде бы нашел такую удачную комбинацию:
1. это как ты уже озвучил, задать жесткий диапазон (Trace -> Set protocol -> (+)Protocol only the following memory ranges: 00401000..00402000
2. запустить крекми, ввести логин и пароль (кнопку OK еще не нажимать)
3. поставить OllyDbg на паузу и затем уже с паузы запускать сочетанием ctrl+F11
4. нажать на кнопку ОК
Вот тогда вроде бы он пишет маршрут как от него хотят!!!




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

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

rukop84\вторая олька уг,первую юзай

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: -26.7 (нарушитель), 7thx
Активность: 0.060.08
Статус: Участник

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

Ув., MultiMan'ы, а плавный переход к принципу действия визора от difexacaw или PINа будет?
А то может быть у вас цель в трассировщике OllyDbg найти PIN?

Если что, то можно объедениться с > родственной веткой < и попытаться получить "чистую" трассу после нажатия кнопки равно (=) на калькуляторе.
Калькулятор можно взять x32 от WinXP.




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

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

rukop84

> Развилка найдена неверно, элементарная проверка в коде программы это подтверждает

Пруф со скринами желательно. Дий пилился года и обкатан на всех известных протекторах под 86. Возможно какие то опции выключены, короче нужны подробные данные. Скорее всего это какой то у вас косяк, так как тулз не универсален, выше я приводил пример. Он используется не как инструмент с гуем, а компилирутся-запускается-вновь компилится после поправок необходимых. Тот билд с которого был снят видос собран с включённым трансляторм адресов, но с выключенными ловушками на память. Управление теоретически может уйти из под визора при активном отладчике, так как он манипулирует контекстами(асинхронная загрузка контекста в цпу) удалённо.

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

Используй либо это, либо отладчик. Совместить их не получится. Я им только память смотрю, так удобно.

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



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

Почему в этом случае что то в логе отличается - мне глубоко пофиг, другой билд. Я через это тысячи семплов прогнал.

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

Собирается фильтрующая события либа, в данном случае для обработки карты код вообще приметивен:

Code:
  1. XmTrap proc uses ebx esi edi Ip:PVOID, Ip2:PVOID, Class2:ULONG, State:PTST
  2.          mov ebx,State
  3.          assume ebx:PTST
  4.          mov edi,Ip
  5.          mov esi,Ip2
  6.  
  7.          invoke IcGet, Edi
  8.          .if !Carry?
  9.                  .if (G_Image.Base < Edi) && (G_Image.Limit > Edi)
  10.                         .if G_ON && Class2
  11.                               .if Class2 <= TYPE_JCX
  12.                                    lea edx,G_Cp
  13.                                    mov ecx,G_Cn
  14.                                    mov D[edx][ecx*8][0],esi
  15.                                    mov D[edx][ecx*8][4],edi
  16.                                    inc G_Cn
  17.                               .else
  18.                                    lea edx,G_Up
  19.                                    mov ecx,G_Un
  20.                                    mov D[edx][ecx*8][0],esi
  21.                                    mov D[edx][ecx*8][4],edi
  22.                                    inc G_Un
  23.                               .endif
  24.                         .endif
  25.                  .endif
  26.          .endif
  27. Skip:
  28.          invoke IcSet, Esi
  29.          ret
  30. XmTrap endp


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

-----
vx




Ранг: -26.7 (нарушитель), 7thx
Активность: 0.060.08
Статус: Участник

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

difexacaw пишет:
Дий пилился года


difexacaw, а можете описать принцип действия вашего визора ( дий)?
Что там инжектится и как формируется выход нужных данных (ну или "выхлоп" )?


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




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

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

sty

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

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

-----
vx




Ранг: -26.7 (нарушитель), 7thx
Активность: 0.060.08
Статус: Участник

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

difexacaw пишет:
Пин трассу не снимает, он блоки копирует в буфера, там их фиксит и выполняет, при этом есчо и в вирт машине.


Тут тогда, видимо, нужно с терминологией определиться. Я под трассой подразумеваю последовательность выполненных инструкций в коде, а уж где они выполняются, в ВМ или еще где, это дело десятое. Главное чтобы это было достоверным.


difexacaw, а на второй мой вопрос в посте №19 у вас есть мнение?
Возможно ли, в принципе, получение "чистой" трассы?



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

Создано: 17 сентября 2019 23:37 · Поправил: rukop84
· Личное сообщение · #22

difexacaw пишет:
> Развилка найдена неверно, элементарная проверка в коде программы это подтверждает

Пруф со скринами желательно.


Да, все очень просто. Скрины не нужны, просто следите за ходом рассуждений.
Когда Вы проводили тест, то:
- трасса_1 (с одним плохим сообщением) была: 'difexacaw' + 'любой пароль'
- трасса_2 (с двумя плохими сообщениями) была: 'difexacaw98' + 'любой пароль'
- результатом стало то, что визор выдал Вам всего одну единственную развилку, которую Вы и написали: "из изменений одно ветвление CC 40138B:4013AC"

Теперь как очень просто делается проверка полученного результата:
- просто изменяется условный переход на безусловный и делается тест. То есть, если результат правильный, то теперь при вводе данных 'difexacaw98' + 'любой пароль' мы должны получить не два плохих сообщения, как раньше, а одно (так как программа теперь будет бежать по одной и той же трассе). А ЭТОГО НЕ ПРОИСХОДИТ!!!

Правильный найденный адрес развилки будет такой: 00401387-0040139C (можете проверить сами)




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

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

rukop84

> что визор выдал Вам всего одну единственную развилку, которую Вы и написали: "из изменений

Из изменений" значит что разница между двумя логами, вот я есчо раз посмотрел. Без цифр:

Code:
  1. 30003030             00401387  crackme.00401387
  2. 30003034             00401389  crackme.00401389
  3. 30003038             0040138B  crackme.0040138B
  4. 3000303C             0040138D  crackme.0040138D
  5. 30003040             0040138F  crackme.0040138F
  6. 30003044             00401394  crackme.00401394
  7.  
  8. 30003048             00401387  crackme.00401387       <--
  9. 3000304C             0040139C  crackme.0040139C
  10.  
  11. 30003050             004013CA  crackme.004013CA
  12. 30003054             004013CC  crackme.004013CC
  13. 30003058             004013CA  crackme.004013CA
  14. 3000305C             004013D1  crackme.004013D1
  15.  
  16. 30003060             004013E8  crackme.004013E8
  17. 30003064             004013EA  crackme.004013EA
  18. 30003068             004013E8  crackme.004013E8
  19. 3000306C             004013F5  crackme.004013F5
  20. 30003070             00401243  crackme.00401243
  21. 30003074             00401245  crackme.00401245


С цифрами:
Code:
  1. 30003030             00401387  crackme.00401387
  2. 30003034             00401389  crackme.00401389
  3. 30003038             0040138B  crackme.0040138B
  4. 3000303C             0040138D  crackme.0040138D
  5. 30003040             0040138F  crackme.0040138F
  6. 30003044             00401394  crackme.00401394
  7.  
  8. 30003048             0040138B  crackme.0040138B       <--
  9. 3000304C             004013AC  crackme.004013AC
  10.  
  11. 30003050             004013E8  crackme.004013E8
  12. 30003054             004013EA  crackme.004013EA
  13. 30003058             004013E8  crackme.004013E8
  14. 3000305C             004013F5  crackme.004013F5
  15. 30003060             00401243  crackme.00401243
  16. 30003064             00401245  crackme.00401245


Разница в последовательности [30003048]: 401387.40139C -- 40138B.4013AC. Читать нужно внимательно, если сам поленился проверить.

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

Попробуй что нибудь посложнее, этот же семпл накрытый obsidium



fffb_18.09.2019_EXELAB.rU.tgz - CRACKME.7z

-----
vx




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

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

difexacaw пишет:
Разница в последовательности [30003048]: 401387.40139C -- 40138B.4013AC. Читать нужно внимательно, если сам поленился проверить.

Профессор Ядра difexacaw, вот у Вас и ошибка. Причем ошибка в самом подходе (в концепции):
- Вы сопоставляете строку №08 со строкой №08, а так делать нельзя (результат получиться некорректным).
- разные трассы имеют разное количество шагов. И в одном маршруте одна и та же развилка может находиться на шаге №08, а в другом маршруте - на шаге с совсем др. номером

Правильно найденный переход без цифр будет: 401387 - 40139C
Правильно найденный переход с цифрами будет: 401387 - 401389

Даже не знаю как Вам еще объяснить. Ну, вроде бы и так все очевидно. Ну, не верите мне - просто сделайте тест, как я писал в предыдущем сообщении (с заменой условного перехода на безусловный)




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

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

rukop84

Никакой ошибки нет, я написал про разницу - первые три ветвления одинаковы для двух случаев, а дальше обработка идёт разная.)

-----
vx




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

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

difexacaw пишет:
Никакой ошибки нет

тогда непонятно почему визор выдал Вам неправильный результат: "из изменений одно ветвление CC 40138B:4013AC"




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

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

rukop84

Покажи где именно он это выдал.

-----
vx




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

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

выдвину такую гипотезу:
- если ошибок нигде нет, то Ваш инструмент определяет не первую развилку по которой программа изменяет маршрут, а развилку которая следует за первой

Добавлено спустя 3 минуты
difexacaw пишет:
Покажи где именно он это выдал.

да, Вы же сами писали в своем сообщении --> Link <--




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

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

rukop84

> Правильно найденный переход без цифр будет: 401387 - 40139C

Это ветвление заканчивает цикл. Собственно само тело цикла выделено есчо до этого ветвления.

> Правильно найденный переход с цифрами будет: 401387 - 401389

401387 -> 401389 это не ветвление, а передача управления на следущую за ним инструкцию(условие не выполняется). Тоесть конец строки не достигнут. Правильный переход с цифрами 40138B -> 4013AC.

Выше я же пояснил с двумя логами для непонятливых. Хорошо, давай на пальцах":

Code:
  1. 401383   mov al,byte ptr ds:[esi]
  2. 401385   test al,al
  3. 401387   je 40139C  ; Конец строки -> 40139C
  4. 401389   cmp al,41  ; < "A", цифры [30%39] -> 4013AC
  5. 40138B   jb 4013AC
  6. 40138D   cmp al,5A  ; >= "Z", -> 401394


С цифрами будет 40138B -> 4013AC. Без цифр будет 401387 -> 40139C. Как оно и выведено в лог --> Link <--. Отладчиком пройди да посмотри

-----
vx





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

Создано: 18 сентября 2019 13:58 · Поправил: Isaev
· Личное сообщение · #30

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

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

(1) Что-то я никак не уловлю суть... если мы знаем правильный пароль, что взламывать то?


(2) elraton это и был Крис?

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




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

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

Чувствую, что непонимание возникло в терминологии. Вот как меня учили:
- "ветвление" или "развилка" (на языке ДРАКОН) - это любой условный переход, где:
---- 1) если выполняется условие, то программа следует по одному маршруту;
---- 2) если не выполняется, то по другому маршруту
Это и есть развилка!!!

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

Профессор Ядра difexacaw, а лог Вы с помощью визора сделали? (если да, то как включается эта опция)

И еще вопрос:
- есть ли возможность с помощью визора делать сравнения трасс с перезапуском программы? Например:
1) снять визором трассу_1;
2) закрыть все программы, сделать какие-то изменения в системе;
3) снять визором трассу_2;
4) сравнить трассу_1 и _2

Добавлено спустя 15 минут
Isaev пишет:
(1) Что-то я никак не уловлю суть... если мы знаем правильный пароль, что взламывать то?

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

Isaev пишет:
(2) elraton это и был Крис?

У Криса Касперского точно такое есть, кажется в книге "Основы дизассемблирования". Если кто-то у кого-то скопипастил, то это их трудности

Isaev пишет:
(3) Если даже ограничиться прогами с триалом, то вылетим мы на первой проверки, которых потом может быть ещё десяток, но до них мы трейсом никогда не дойдём и не узнаем где они были
Одна концепция - решает одни задачи, характерные именно для нее. Др. задачи - решаются с помощью др. подходов, инструментов и т.д.


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