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

 eXeL@B —› Вопросы новичков —› Для знатоков асма
Посл.ответ Сообщение

Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 24 октября 2007 11:02 · Поправил: tempread
· Личное сообщение · #1

В нашем распоряжении есть 4 статичных байта в изменяющемся коде. Есть регистр eax, в котором находится адрес такого вида 0xfd452bc3 (сама программа - это драйвер). Необходимо записать в eax число,как можно более близкое к максимальному положительному числу,используя 4 свободных байта для кода. И желательно, что бы работа кода не зависела от начального значения регистра eax.

На данный момент, я использую shr eax,4. Но я точно не могу быть уверен, что ВСЕГДА в eax будет подходящее мне значение... Так что жду предложений




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 24 октября 2007 11:47
· Личное сообщение · #2

tempread
Какое у тебя значение esp? что в самом стеке, есть ли подходяще значения?

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 24 октября 2007 12:37 · Поправил: tempread
· Личное сообщение · #3

Прервался на начале выполнения этих четырех байт:
[url=http://img81.imageshack.us/img81/3470/driverww4.png
]http://img81.imageshack.us/img81/3470/driverww4.png
[/url]

В первом посте сделал небольшую ошибочку, там вместо eax следует читать ebx.

tnt17
Дело в том, что нельзя сказать,код полностью линейный или нет. Поэтому нельзя быть 100% уверенным,что значения в стеке всегда будут такими.
Но если есть какие-то мысли - то сразу говори, а я уж буду их приспосабливать к конкретной ситуации

Значение, которое в ebx дальше в коде сравнивается с двордом,полученым функцией KeQuerySystemTime, у меня он равен 1C81623. Таким образом проверяется триал.(и это все в простеньком полиморфике)




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 24 октября 2007 13:37
· Личное сообщение · #4

tempread
4 байта маловато. есть возможность заменить сравнение со знакового на беззнаковое? т.е. пропатчить?

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 24 октября 2007 13:54 · Поправил: tempread
· Личное сообщение · #5

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

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

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


 eXeL@B —› Вопросы новичков —› Для знатоков асма
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати