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

 eXeL@B —› Вопросы новичков —› Вопрос по инструкции JMP FAR
Посл.ответ Сообщение

Ранг: 0.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2015 16:33
· Личное сообщение · #1

Исследую программу Advanced Virtual COM Port. Исследовал успешно, пока не наткнулся вот на такой прыжок: JMP FAR 0033:7321271 . Гуглил - одна теория. Не могу понять, как определить в Ollydbg, куда конкретно осуществляется прыжок? Знаю точно, в результате прыжка происходит сверка пробного периода и ключа! Очень прошу помощи, так как мучаю прогу больше месяца: вошел в азарт, а в этом деле, я только начинаю.



Ранг: 53.9 (постоянный), 33thx
Активность: 0.050
Статус: Участник

Создано: 21 ноября 2015 16:40 · Поправил: deniskore
· Личное сообщение · #2

Это прыжок в wow64cpu (в х64 режим).
--> Почитайте <--

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

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

Создано: 21 ноября 2015 16:41 · Поправил: dosprog
· Личное сообщение · #3

Во flat32-модели такая инструкция не нужна.
Проверь, должна ли она реально выполняться.





Ранг: 0.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2015 17:15
· Личное сообщение · #4

Уточню вопрос, что значит 0033:7321271, как вычислить адрес перехода? Ведь после прыжка по F8 или F7, попадаю совсем непонятно куда, при этом, где произошла остановка (ADD ESP, 4), бряка на инструкции - НЕТ!!!?. Нажимаю еще раз F7, эта инструкция вообще игнорируется, а вместо этого происходит выполнение явно не одной инструкции, в результате которой в дампе появляется байт, указывающий на кол-во оставшихся дней пользования программой. Что за "магия", не пойму.



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

Создано: 21 ноября 2015 17:31 · Поправил: dosprog
· Личное сообщение · #5

На какой ОС это всё запускается?
Для какой ОС предназначена программа?

IranR пишет:
что значит 0033:7321271, как вычислить адрес перехода?


А что же тут вычислять, если он задан в самой этой инструкции?

--Добавлено--
#define X64_Start() X64_Start_with_CS(0x33) //Селектор 33h
#define X64_End() X64_End_with_CS(0x23) //Селектор 23h






Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 21 ноября 2015 17:34
· Личное сообщение · #6

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



Ранг: 0.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2015 17:37
· Личное сообщение · #7

Отладку веду на Win 64. Прога предназначена как для 64, так и для 32. Дебажу прогу, предназначенную для 32 разрядной, так как олля версии 1.10. Исследуемый екзешник я скопировал с ранее установленной на WIN 32.



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

Создано: 21 ноября 2015 17:40 · Поправил: dosprog
· Личное сообщение · #8

IranR пишет:
Отладку веду на Win 64. Прога предназначена как для 64, так и для 32.


Сперва нужно разобраться под x32 OC.
Там не должно быть этих межсегментных прыжков.


--Добавлено-- К следующему посту:
reversecode пишет:
должно быть


..ну тогда под х32 ОС Odbg должен верно отработать такой прыжок. Теоретически..
Или исключение.






Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 21 ноября 2015 17:46
· Личное сообщение · #9

должно быть, это прыжок скорее всего в защиту, была такая одна прога помню на лабе ее разбирали ))
но предварительно к этому прыгжку там подготовка идет к нему, и сразу понятно что это и зачем
а тс только в ольке кнопки умеет жать, да выспрашивать что это за jmp



Ранг: 0.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2015 17:49
· Личное сообщение · #10

dosprog пишет:
Сперва нужно разобраться под x32 OC
Вот тоже склоняюсь к этому, иначе видимо забуксую...


dosprog пишет:
А что же тут вічислять, если он задан в самой этой инструкции?

Когда инструкция например JMP 14514545, я конечно пониманию, что прыгну в 14514545 и не куда иначе, но как насчет интерпретации 0033:7321271 для новичка хотя бы?



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

Создано: 21 ноября 2015 17:52 · Поправил: dosprog
· Личное сообщение · #11

IranR пишет:
Когда инструкция например JMP 14514545, я конечно пониманию, что прыгну в 14514545 и не куда иначе, но как насчет интерпретации 0033:7321271 для новичка хотя бы?


Туда же. В 7321271. Но в 64-битном сегменте кода, описанном дескриптором с селектором 33h.
Под x32 такое обращение вызовет исключение, так наверное и задумано. В общем, надо пробовать.
И кстати, не факт, что того же самого не произойдёт и под х64 ОС.



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

Ранг: 0.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2015 17:57
· Личное сообщение · #12

reversecode пишет:
а тс только в ольке кнопки умеет жать, да выспрашивать что это за jmp

Это наверно самая смешная шутка в твоей жизни...

Добавлено спустя 8 минут
dosprog пишет:
ну тогда под х32 ОС Odbg должен верно отработать такой прыжок. Теоретически..
Или исключение.

Вот это больше похоже на правду. Проверю, отпишусь.



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

Создано: 21 ноября 2015 18:09 · Поправил: dosprog
· Личное сообщение · #13

IranR пишет:
Это наверно самая смешная шутка в твоей жизни...

)) но кстати, reversecode явно что-то знает по сабжу. Я бы с ним не ругался.





Ранг: 0.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2015 18:17
· Личное сообщение · #14

dosprog пишет:
)) но кстати, reversecode явно что-то знает по сабжу. Я бы с ним не ругался.

Знает, так пусть пишет по сути, незнает- проходит мимо. По крайне мере, от тебя я больше получил полезной информации. Спасибо!




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 21 ноября 2015 18:17 · Поправил: reversecode
· Личное сообщение · #15

))
ТС бы для начала не одну голую инструкцию тыкал
а сразу пучек, которые идут перед джампом ))
тогда было бы понятно просто отбалды прыжек или прыжек в стаб

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

Ранг: 0.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2015 18:43
· Личное сообщение · #16

reversecode пишет:
ТС бы для начала не одну голую инструкцию тыкал
а сразу пучек, которые идут перед джампом ))

Считай, что вставил свои Две копейки. Болды!




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 21 ноября 2015 18:49
· Личное сообщение · #17

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



Ранг: 0.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2015 18:52 · Поправил: IranR
· Личное сообщение · #18

Спасибо за леща!!! Я как прочитал тутор Нирвахи, так и начал ее крякать. Половину я ее уже расколол. Даже с байт кодом, который она использует разобрался, если что! А ты видимо, новичков тролить только можешь?




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 21 ноября 2015 20:22
· Личное сообщение · #19

IranR, читай про сегментную адресацию в защищённом режиме.
JMP FAR выполняет переход по адресу в сегмент, указанный селектором (в данном случае - 0x33).
Этот адрес вполне может не соответствовать адресному пространству, которое ты видишь в отладчике.
Как вариант, в ольке назначь (временно, потом надо вернуть как было) какому-нибудь сегментному регистру (ds,fs,es,gs) значение 0x33, олька покажет базовый адрес сегмента. Приплюсуй к этому базовому адресу относительный (на который выполняется джамп) и увидишь, куда уходит управление при джампе. И да, там вполне может быть х64 код, который олька даже адекватно отобразить не сможет, не то что отладить.

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

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

Создано: 21 ноября 2015 20:49 · Поправил: dosprog
· Личное сообщение · #20

-=AkaBOSS=- пишет:
Приплюсуй к этому базовому адресу относительный (на который выполняется джамп)


Интересно. Откуда это там относительный?

Если уже гадать, так гадать - то вообще может быть и не адрес, а код действия для обработчика ошибки обращения к несуществующему сегменту.
Пробовать надо, в общем.






Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 21 ноября 2015 21:10 · Поправил: -=AkaBOSS=-
· Личное сообщение · #21

dosprog пишет:
Интересно. Откуда это там относительный?

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


добавлено уже после закрытия темы:
Я, на самом деле, не считаю тему сегментной адресации настолько лёгкой и понятной. Для начала - новичкам, столкнувшимся с подобным вопросом, лучше всё же сходить почитать про GDT и дескрипторы, её составляющие (отчасти освещено на васме в цикле статей "Процессоры Intel в защищённом режиме"), а потом уже более опытным взглядом смотреть на селекторы сегментов и содержимое сегментных регмстров. Для старых виндов (ХП и ранее) еще работала прожка DumpXDT - можно было черпать инфо о сегментах из неё. Для современных систем ничего не советую - сам не в курсе, отстал от моды...



Ранг: 0.6 (гость)
Активность: 0.010
Статус: Участник

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

dosprog, твои подозрения были обоснованны. На 32 ОС до этого аномального джампа дело не дошло, а пошло все логичным путем до инструкции INT 2e, после которой в дамп упал байт с оставшимся количеством дней. Спасибо!

AkaBOSS, мозайка в голове сложилась где указывается селектор, вполне доходчиво и толково!!! Спасибо!
Спасибо всем за ответы!


 eXeL@B —› Вопросы новичков —› Вопрос по инструкции JMP FAR
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати