Сейчас на форуме: tyns777, cppasm, dutyfree (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Как дописать несколько байт в секцию кода PE файла и исправить секции и заголовок?
Посл.ответ Сообщение

Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 25 мая 2017 15:47
· Личное сообщение · #1

Всех приветствую!
Пробую свои силы в реверсе программного обеспечения. Надо снять триал с программы SignCut.
Она производит активацию через интернет, использую ключ, введеный пользователем.
Путем исследования в дебаггере нашел такой кусок кода (см. рисунок).
MOV DWORD PTR [edx+0x203c], EAX - в память записывается содержимое регистра EAX.
Если программа зарегистрирована, то EAX должен быть равен 0.
Если менять код на MOV DWORD PTR [edx+0x203c], 0 - то он не совпадает по длине, соотвественно уезжают все секции в exe файле. Я увеличиваю .text секцию на 5 байт. Как сделать файл рабочим?

1827_25.05.2017_EXELAB.rU.tgz - Безымянный.JPG



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 25 мая 2017 16:02
· Личное сообщение · #2

Никак. Не надо так делать. Поищи свободный кусок, сделай JMP, свою работу и JMP обратно.

-----
старый пень





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

Создано: 25 мая 2017 17:19 · Поправил: -=AkaBOSS=-
· Личное сообщение · #3

ну выше же виден код
Code:
  1. 4CA0B3: CALL [ATOI]

результат вызова будет в eax, который потом записывается в переменную
вот вместо этого куска и напиши
Code:
  1. xor eax, eax
  2. nop
  3. nop
  4. nop
  5. nop



Kindly пишет:
простой вариант с вычислением базы

а relative call или jmp - это недостаточно просто?




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 25 мая 2017 17:33 · Поправил: Kindly
· Личное сообщение · #4

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

Code:
  1. MOV EAX,DWORD PTR DS:[ESP+-X] << забираем соответствующее значение с базой из esp 
  2. MOV AX,0 << обнуляем последние 2 байта в регистре
  3. ADD EAX,XXXXX << добавляем VA размер до начала нашей секции с патч кодом
  4. JMP EAX/CALL EAX << по вкусу, но лучше JMP, чтобы не нарушать ESP значения.

-=AkaBOSS=- пишет:
а relative call или jmp - это недостаточно просто?

в данном случае проще простого, согласен.

Dimedrol20031985 пишет:
Она производит активацию через интернет, использую ключ, введеный пользователем.

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

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

-----
Array[Login..Logout] of Life





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

Создано: 25 мая 2017 19:35 · Поправил: -=AkaBOSS=-
· Личное сообщение · #5

Kindly пишет:
явно корректный результат нужно передавать до ATOL, все же это рантайм

Если патчится именно сама процедура разбирающая ответ сервера - то не обязательно.

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


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


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