Сейчас на форуме: Rio, CDK123, zds, tyns777, tihiy_grom, morgot, rmn (+5 невидимых)

 eXeL@B —› Программирование —› Патч запакованной длл
Посл.ответ Сообщение

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

Создано: 03 октября 2008 08:11 · Поправил: GoldFinch
· Личное сообщение · #1

Есть задача пропатчить запакованную длл (распаковывать неумею, учиться лень)
Я делаю так: пишу куданить в длл свой код, и меняю на него entrypoint
Code:
  1. _new_EP: ;новый EP
  2.       popd [_saved_ret_addr] ;сохраняем адрес возврата DllMain
  3.       pushd _make_patch ;заменяем адрес возврата DllMain на код перехвата
  4.       mov dword[__entrypoint_va], rva _old_entrypoint ;восстанавливаем EP чтоб не патчить каждый раз по-новой
  5.       jmp _old_entrypoint ;переход на старый EP
  6.       _saved_ret_addr dd 0
  7. _make_patch: ;здесь мы будем когда DllMain завершится и длл будет распакована
  8.       mov dword[va1],dw1 ;сам патч
  9.       ...
  10.       ;------------------------------
  11.       jmp dword[_saved_ret_addr] ;возврат в ОС

Собственно я хочу узнать, все ли в этом коде хорошо, может я чтото упустил или вообще есть способ получше %)



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

Создано: 03 октября 2008 08:16 · Поправил: GoldFinch
· Личное сообщение · #2

del



Ранг: 110.7 (ветеран)
Активность: 0.070
Статус: Участник
~ tPORt ~

Создано: 03 октября 2008 11:03
· Личное сообщение · #3

Если "_old_entrypoint" это еп прота то патч ваш скорее всего непрокатит, надо делать тоже самое но с оригинальным еп




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 03 октября 2008 12:12 · Поправил: coderess
· Личное сообщение · #4

GoldFinch легче научится распаковывать
http://dotfix.net/module.php?module=@6e786b366a717062776f70606168 http://dotfix.net/module.php?module=@6e786b366a717062776f70606168


все ли в этом коде хорошо

ну если АнтиВирус не орет на больно вирусную передачу управления... то все ок

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




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

Создано: 03 октября 2008 12:12 · Поправил: GoldFinch
· Личное сообщение · #5

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

coderess, а про фемиду такая же статья есть? А то я сдампил, пофиксил импорт, восстановил оеп, запустил - неработает о_О. Вот я и подумал что проще цеплять к любой длл код будет ее патчить в памяти. А для реверсирования достаточно дампа с восстановленным импортом.




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

Создано: 03 октября 2008 13:18 · Поправил: PE_Kill
· Личное сообщение · #6

LazzY пишет:
Если "_old_entrypoint" это еп прота то патч ваш скорее всего непрокатит

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

ADD Щас подумал. Даже если прот патчит PEB то код всё равно сработает первый раз, а остальные уже и не нужны, длл то уже пропатчена.

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




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

Создано: 06 октября 2008 11:12
· Личное сообщение · #7

А с .exe что-нибудь похожее сделать можно? Пока единственное что приходит на ум - это ставить таймер %)

(Несколько оффтоп, но не новую же тему создавать)




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

Создано: 06 октября 2008 12:04
· Личное сообщение · #8

Жжешь, реализовать таймер гораздо сложнее чем сделать еще один трэд. Я если совсем лень делаю трэдом.

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




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

Создано: 06 октября 2008 13:09
· Личное сообщение · #9

GoldFinch пишет:
а про фемиду такая же статья есть? А то я сдампил, пофиксил импорт, восстановил оеп, запустил - неработает о_О.

а релоки?

GoldFinch пишет:
Вот я и подумал что проще цеплять к любой длл код будет ее патчить в памяти. А для реверсирования достаточно дампа с восстановленным импортом.

это просто кто-то "очень хорошо" повесил фемиду и даже не включил проверку целостности файла




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 06 октября 2008 13:12 · Поправил: Maximus
· Личное сообщение · #10

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

Сама же проверка убирается на раз-два-три, читайте стотьи от ПЕКилла в соответствующем разделе.

-----
StarForce и Themida ацтой!




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

Создано: 06 октября 2008 13:16
· Личное сообщение · #11

Maximus
а разве тут идет речь о распаковке?




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 06 октября 2008 13:33
· Личное сообщение · #12

А то я сдампил, пофиксил импорт, восстановил оеп, запустил - неработает о_О.
Ну видимо да...

-----
StarForce и Themida ацтой!




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

Создано: 12 октября 2008 17:59 · Поправил: GoldFinch
· Личное сообщение · #13

Вдруг кому пригодится, тот же код что и 1м посте, только базонезависимый:
Code:
  1. macro TARGET __target_name {
  2.       virtual
  3.         file __target_name:0x3C,4
  4.         load __PE word from $-4
  5.         file __target_name:__PE+0x34,4
  6.         load __base from $-4
  7.         file __target_name:__PE+0x28,4
  8.         load __entrypoint dword from $-4
  9. ....
  10. __new_entrypoint:
  11. virtual at $
  12.         jmp __base+__entrypoint ;old EP (original prot. EP from file header)
  13.         load __skip_hook dword from $$+1
  14.       end virtual
  15. __switch:
  16.       jmp near __go_hook
  17.       ;-------------------------
  18. __go_hook:
  19.       call base1
  20.       ;-------------------------
  21. base1:pop edx
  22.       mov dword[edx+__switch+1-base1],__skip_hook
  23.       popd [edx+__saved_ret_addr-base1] ;save ret addr
  24.       call __switch ;========== !!!!
  25. __ret_hook: ;============ don't split this lines !!!!
  26.       call base2
  27.       ;-------------------------
  28. base2:pop edx
  29.       ;.... <<--- in-memory patch here
  30.       lea edx,[edx+__saved_ret_addr-base2]
  31.       jmp dword[edx]
  32.       ;-------------------------
  33.       __saved_ret_addr dd 0

Проверял на нескольких файлах запакованных фемидой какой-то версии.

ЗЫ: чето "$" отображается как & # 0 3 6 ;



Ранг: 38.6 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 12 октября 2008 20:10 · Поправил: bad_boy
· Личное сообщение · #14

del



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

Создано: 31 октября 2008 19:36
· Личное сообщение · #15

Весь код который был написан выше есть бред и ересь.
Патч должен выглядеть так (фасм):
Code:
  1. use32
  2. org 0x300 ;patch place rva
  3. ;=================================
  4.          pushd [esp+0x0C]
  5.          pushd [esp+0x0C]
  6.          pushd [esp+0x0C]
  7.          call 0x0006A014 ;prot ep rva
  8.          call @f
  9. @@:      pop eax
  10.          mov byte[eax-@r+0x322D4],0xEB ;in-memory patch place rva
  11.          ret 0x0C



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


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