· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› system dll in memory patch

Посл.отвђт Сообщенiе


Дата: Июн 9, 2004 18:21:44 · Поправил: bogrus

Хочу пропатчить одну из системных dll и т.к. в файле это сделать нельзя , думаю это сделать в памяти для выбранного процесса . SFC надеюсь там не проверяет :)
Патч заключаеться в правке нескольких байт секции кода .

Скажите'c , как там со сбросом в своп , подгрузкой из образа на диске , атрибутами страниц памяти .
Может мой патч затерется оригиналом ?


Дата: Июн 9, 2004 18:40:57

> Скажите'c , как там со сбросом в своп
что упало с возу, то... нет, не пропало ;)
будет вытащего из свопа в отпаченном виде

> подгрузкой из образа на диске
модифицированные страницы попадают в своп,
немодифицированные вытесняются вникуда,
подкачиваясь непосредственно из exe/dll файла

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

> Может мой патч затерется оригиналом ?
нет не затрется и у тебя будет персонально отпаченная dll,
но все остальные этого не заметят, т.к. винда поддерживает копирование при записи.
варварский способ его отключения - сброс WP в CR0, но это можно делать тоько с уровня драйверов. корректный способ приводить не буду, т.к. лично мне хватает и варварского ;)


Дата: Июн 9, 2004 20:05:51

Пока понятно , спасибо .
Скажу ещё , что я собираюсь патчить (RESEARCH всё-таки) .

Не секрет , что многие проги начисто доверяют Crypto API , а посредник между ними это несколько системных dll .
Таким образом правкой этих dll в памяти мы их нагло обманываем . И что примечательно , сами выбираем кому лгать , а кому говорить правду и ещё это не зависит от используемого ими криптопровайдера .

Например win2ksp4 и ф-ция CryptVerifySignature (advapi32.dll) :
7907A550 E8 25 00 00 00      call    sub_7907A57A
7907A555 89 45 E4            mov     [ebp+var_1C], eax
7907A558 8D 45 DC            lea     eax, [ebp+var_24]
7907A55B 50                  push    eax
7907A55C FF 15 08 13 06 79   call    ds:RtlFreeUnicodeString
7907A562 83 4D FC FF         or      [ebp+var_4], 0FFFFFFFFh
7907A566 8B 45 E4            mov     eax, [ebp-1Ch]
Правим последние 3 байта например на 6A0158 (push 1,pop eax) и любая прога (шаровара например) получает результат о валидности проверяемой ею сигнатуры .

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

Как идея , стоит её развивать ?


Дата: Июн 9, 2004 20:47:58

Смотря чего тебе надо, старче, смотря чего тебе надо...


Дата: Июн 9, 2004 22:28:43

Да , довольно специфическая тулзень была Б , но и криптопровайдеры , сертификаты , подписи не зря существуют , а тут их одним махом так обманывать ...
Идея мне нравиться , я так понял особо препятствий нет , буду кодить по-тихоньку .


Дата: Июн 10, 2004 00:38:57

ну валидность сигинатуры то поимеешь, а что будешь делать с decode/encode ?


Дата: Июн 10, 2004 10:39:52 · Поправил: bogrus

А ничё не буду делать . Вернее пока не представляю это возможным . И смысл , т.е. если кто-то , что-то зашифрует , то естественно правкой пары байт я это не расшифрую :)
Но вот , когда мучительно юзают decode/encode , потом это дело восемь раз хешируют , а проверяют этот хеш всего одной функцией , то этого вполне достаточно . Например ф-ция WinVerifyTrust (wintrust.dll) , проверяет всякие объекты через провайдеры , причём её не вызвать без окна , но возвращает только ERROR_SUCCESS в случая успеха .

з.ы. немного не в тему , но интересный линк , как у чела появилась идея расшифровать винт после EFS , её тут же подхватили мелкософт,елкомсофт и пассваре :)


Дата: Июн 10, 2004 11:52:36

В принципе это работа лоадера , выполняющего примерно такой скрипт :
exe=target.exe ; createprocess
delay=0 ; sleep
dll=target.dll ; search
offset1=0x00019950 ; check
sign=E8250000008945E48D45DC50FF1508130679834DFCFF8B45E4
offset2=0x00019966 ; patch
patch=6A0158
exit
Я некоторые видел , но они не патчат dll , может кто встречал такой ?


Дата: Июн 10, 2004 12:16:05

Это можно сделать через Debug API под XP, т.к. там есть DebugActiveProcessStop и после проделанного можно будет отпустить процесс, или сделать через псевдо бряки(jmp $) без Debug API, всё вполне тривиально ;-) Принцип простой, тормозим процесс на EP и правим нужную DLL'ку.


Дата: Июн 10, 2004 13:34:31 · Поправил: bogrus

Да и ищё ... Скрипт будет немного больше , т.к. необходимо хранить сигнатуры требуемых патчей для разных версий dll (ОС) , а лоадер должен выбирать нужную .
Короче делать ли универсальный , я не знаю . Могу где-нить потихоньку выкладывать сигнатуры таких ф-ций .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.055