Сейчас на форуме: bartolomeo, -Sanchez- (+3 невидимых)

 eXeL@B —› Вопросы новичков —› Поменять короткий джамп на длинный :s16:
Посл.ответ Сообщение

Ранг: 68.8 (постоянный)
Активность: 0.120
Статус: Участник

Создано: 03 марта 2006 07:45
· Личное сообщение · #1

Если бы нужно было поменять длинный переход на короткий,
то просто меняем и добавляем nop'ы,
но как сделать когда был
jz short loc_5130A5 в 2 байта
и нужно поменять на
jmp loc_5130A5, который перекрывает соседний код.
В HIEW вижу это как je 001130A5.
Так как сделать безусловный прыжок в 2 байта с места которое совсем рядом (113098)?



Ранг: 68.8 (постоянный)
Активность: 0.120
Статус: Участник

Создано: 03 марта 2006 08:05
· Личное сообщение · #2

Кстати кусок кода:

mov [ebp-80h], ax
lea ecx, [ebp-44h]
call ds:__vbaFreeVar
movsx eax, word ptr [ebp-80h]
test eax, eax
jz short loc_5130A5




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 03 марта 2006 08:12
· Личное сообщение · #3

mov [ebp-80h], ax
lea ecx, [ebp-44h]
call ds:__vbaFreeVar
movsx eax, word ptr [ebp-80h]
sub eax,eax
jz short loc_5130A5

-----
Yann Tiersen best and do not fuck




Ранг: 68.8 (постоянный)
Активность: 0.120
Статус: Участник

Создано: 04 марта 2006 04:07
· Личное сообщение · #4

PE_Kill пишет:
sub eax,eax
jz short loc_5130A5


Большое спасибо!
Прямо в яблочко!
Ты настоящий знаток ассемблера.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 04 марта 2006 10:48 · Поправил: Hellspawn
· Личное сообщение · #5

bash пишет:
Большое спасибо!
Прямо в яблочко!
Ты настоящий знаток ассемблера.


мда... куда мы катимся... такое уже спрашивают...
я мин 5 думал, что же он всё таки хочет =\
в аттаче табличка, сиди и учи =)
это совет...

bash пишет:
jmp loc_5130A5, который перекрывает соседний код.


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

bash пишет:
Так как сделать безусловный прыжок в 2 байта с места которое совсем рядом (113098)?


А ещё попробуй короткий безусловный прыжок, просто поправь
первый байт твоего условного прыжка на "EB" и всё будет =)

a52f_lectio5.gif.zip

-----
[nice coder and reverser]




Ранг: 68.8 (постоянный)
Активность: 0.120
Статус: Участник

Создано: 06 марта 2006 01:33 · Поправил: bash
· Личное сообщение · #6

Hellspawn пишет:
мда... куда мы катимся... такое уже спрашивают...

Ну не суди строго! Я же специально в этот подфорум писал.
За табличку отдельное спасибо! Коротко и ясно, советую всем.
Hellspawn пишет:
код, которые перекроется, будет всегда перепрыгнут

А это кстати здравая мысля...




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 марта 2006 16:16
· Личное сообщение · #7

bash пишет:
А это кстати здравая мысля

Это от ситуации зависит... Бывает что и не здравая...

-----
Yann Tiersen best and do not fuck





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 06 марта 2006 16:55 · Поправил: Hellspawn
· Личное сообщение · #8

PE_Kill пишет:
Это от ситуации зависит... Бывает что и не здравая...


я же написал, что

Hellspawn пишет:
(конечно это надо проверить, но в большинстве случаев так)


а после проверки, конечно она здравая
вообще по хорошему, не прыжки надо править...
а причину =) т.е. достаточно иногда бывает вписать в начало
какой-нибудь процедуры:
mov eax,1
ret.

и будет тебе счастье

-----
[nice coder and reverser]




Ранг: 68.8 (постоянный)
Активность: 0.120
Статус: Участник

Создано: 07 марта 2006 02:02
· Личное сообщение · #9

Hellspawn пишет:
достаточно иногда бывает вписать в начало
какой-нибудь процедуры:
mov eax,1
ret.
и будет тебе счастье


А-а-а! Это удовлетворить условие прыжка?
Здорово придумано! Столько простых и полезных вещей узнаю в этом подфоруме!




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 07 марта 2006 09:13 · Поправил: Hellspawn
· Личное сообщение · #10

bash пишет:
А-а-а! Это удовлетворить условие прыжка?
Здорово придумано! Столько простых и полезных вещей узнаю в этом подфоруме!


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

-----
[nice coder and reverser]




Ранг: 68.8 (постоянный)
Активность: 0.120
Статус: Участник

Создано: 08 марта 2006 20:59
· Личное сообщение · #11

Hellspawn пишет:
ну не одного прыжка, а вообще всех в программе (которые отвечают за регистрацию)

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



Ранг: 50.7 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 08 марта 2006 21:30
· Личное сообщение · #12

bash пишет:
Только непонятно как их все обнаружить (интересен только принцип)
- ручками =) F7,F8 и т.д. и т.п.

Hellspawn пишет:
Просто править десятки прыжков муторно, да и не
факт, что мы их все нашли...


Но иногда, как написал Hellspawn, вместо их нахождения этих прыжков, проще пропатчить процедуру проверки регистрации в зависимости от того, в каком виде она возвращаем результат. А найти её легче, чем 29 или 30 джампов =)

Hellspawn пишет:
mov eax,1
ret.

Это для случая, если после этой процедуры в EAX возвращается 0 - если прога не зарегистрирована и 1 - если прога зарегистрирована




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 08 марта 2006 23:57 · Поправил: Hellspawn
· Личное сообщение · #13

Klajnor пишет:
Это для случая, если после этой процедуры в EAX возвращается 0 - если прога не зарегистрирована и 1 - если прога зарегистрирована


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

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


ну ищешь хотя бы 1 прыжок, который надо править....
ну и смотришь, почему он выполняется (или не выполняется)... т.е. надо найти
"самое главное" условие и поправив его, будет тебе счастье...

-----
[nice coder and reverser]



 eXeL@B —› Вопросы новичков —› Поменять короткий джамп на длинный :s16:
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати