книги хакеры / журнал хакер / 129_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
|||
|
|
|
|
-xcha |
|
|
Исходникимодуляloop-AES так- |
жедоступнывUbuntu 9.04
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Чтобызашифроватькаталог/tmp (илилюбойдругой) таким |
|
витьdietlibc, минималистичнуюбиблиотекуязыкаСи, код |
|
способом, просторазмонтируйего(umount /tmp), добавьв/ |
|
которойбудетиспользованвобразеinitrd: |
|
etc/fstab следующуюстроку: |
|
|
|
|
|
# cd /usr/src |
|
/dev/sda3 /tmp ext2 defaults,loop=/dev/loop3,e |
|
# wget ftp://ftp.kernel.org/pub/linux/libs/ |
|
ncryption=AES128,phash=random/1777 0 0 |
|
dietlibc/dietlibc-0.32.tar.bz2 |
|
|
|
# tar -xjf dietlibc-0.32.tar.bz2 |
|
исмонтируйкаталогснова: |
|||
|
# cd dietlibc-0.32 |
||
|
|
# make |
|
# mount /tmp |
|
# install bin-i386/diet /usr/local/bin |
|
|
|
|
|
Командаmount неспроситпароля, апростоподключит/ |
|
2.Такженампонадобитсяутилитаaespipe, спомощью |
|
dev/loop3 кустройству/dev/sda3, создастновуюфайловую |
|
котороймызашифруемсуществующиенакорневомразделе |
|
систему, сгенерирует65 случайныхключейивоспользу- |
|
данные, непотерявих: |
|
етсяимидляшифрованиязаписываемыхданных. Права |
|
|
|
накаталог/tmp будутвыставленывзначение1777 (опция |
|
# cd /usr/src |
|
«phash=random/1777»). |
|
# wget http://loop-aes.sourceforge.net/ |
|
Обративнимание, чтовыборфайловойсистемыext2 вэтом |
|
aespipe-latest.tar.bz2 |
|
случаенетребование, апростоздравыйсмысл. Зачем |
|
# cd aespipe-v2.3e |
|
использоватьжурналируемуюфайловуюсистемувситуации, |
|
# CFLAGS="-O2" LDFLAGS="-static -s" ./ |
|
когдаФСзановосоздаетсяприкаждоммонтировании? |
|
configure |
|
СЦЕНАРИЙ4.ШИФРОВАНИЕ |
|
# make |
|
|
# make tests |
||
КОРНЕВОГОРАЗДЕЛА |
|
# cp -p aespipe /boot |
|
Четвертыйизаключительныйсценарийиспользованияloop- |
|
|
|
AES описываетпроцесснастройкисистемыдляшифрования |
|
3.Статическисоберемутилитуgpg, чтобыонанезависелаот |
|
корневогораздела. Сразуоговорюсь, чтоэтонепростаяпроце- |
|
библиотек, расположенныхвкорневомразделе: |
|
дура, котораяпотребуетсозданиякаталога/boot наотдельном |
|
|
|
разделеиналичияподрукойLiveCD илиотдельностоящего |
|
# cd /usr/src |
|
дистрибутиваLinux. Восновеметодалежитиспользование |
|
# wget ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg- |
|
небольшогообразаinitrd, которыйещедозагрузкизапустит |
|
1.4.9.tar.bz2 |
|
утилитыinsmod иlosetup, располагающиесявкаталоге/boot, |
|
# tar -xjf gnupg-1.4.9.tar.bz2 |
|
дляподключенияшифрующегоloop-устройстваповерхкорне- |
|
# cd gnupg-1.4.9 |
|
вогоразделаещедофактическойзагрузкисистемы. |
|
# patch -p1 </usr/src/loop-AES-v3.2g/gnupg- |
|
1. Первое, чтонеобходимосделать, — этоскачатьиустано- |
|
1.4.9.diff |
|
|
|
|
DVD |
dvd
Длябольшего удобствамысобрали всенеобходимые командывфайл im_too_lazy_to_type_ it.txt. Вместонабора командтебебудет достаточноделать copy’n’paste.
WARNING |
info
Вомногихдистрибутивахутилитыи драйверloop-AES
можноустановить средствамипакетногоменеджера, однако ядропридетсяпересобиратьвлюбом случае.
INFO |
info
•Описаннаявстатье утилитаaespipe — это отличныйинструмент, которыйможно использоватьдля получениядоступа кзашифрованному устройствуотовсюду,
напримеризFreeBSD.
•Вотличиеотдругих системшифрования,
драйверloop-AES
поддерживает прямуюиобратную совместимостьсболеераннимиядрами (вплотьдоветки2.0) иможетработатьс томами, зашифрованнымиещесамыми первымиверсиями драйвера89
XÀÊÅÐ 09 /129/ 09 |
089 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
|
|
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
UNIXOID |
|
|
w Click |
|
|
|
|
|
m |
|
|
||||
|
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
|
|
.c |
|
|
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
Настраиваемсборщик |
образаinitrd
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
NOW! |
o |
||||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
|
|
||||
|
|
|
|
to |
|
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
|
m |
|||
|
|
|
|
|
|
|
|
||||
|
w |
|
|
|
|
g |
|
|
|
||
Драйверloop-AES, ненапрягаясь, обгоняетdm-crypt какприработеp |
|
|
|
|
|
o |
|
||||
|
|
w |
|
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
|
.c |
|
|
|
|
|
df |
|
|
n |
e |
|
|||
сфайлами(слева), такивтестахiotest (справа) |
|
|
|
-x cha |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
#CFLAGS="-O2" LDFLAGS="-static -s"
./configure --prefix=/usr --enable- static-rnd=linux
#make
#rm -f /usr/share/man/man1/ {gpg,gpgv}.1.gz
#make install
#chown root:root /usr/bin/gpg
#chmod 4755 /usr/bin/gpg
Заметь, есликаталог/usr/bin находитсянена корневомразделе, бинарникgpg придется переместитьвкаталог/bin:
#cd /usr/bin
#mv gpg ../../bin
#ln -s ../../bin/gpg gpg
4.Скопируеммодульloop.ko вкаталог/boot, чтобыонбылдоступендомонтированиякорневого раздела:
#cp -p /lib/modules/2.6.28.9- noloop/extra/loop.ko /boot/modules- 2.6.28.9-noloop/
5.Какипрежде, создадим65 случайныхключей, которыебудутиспользованыдляшифрования корневогораздела:
#umask 077
#head -c 3705 /dev/random | uuencode -m — | head -n 66 | tail -n 65 \
| gpg --symmetric -a >/boot/ rootkey.gpg
6.Подготовимобразinitrd. Дляэтогопереходим вкаталогсисходникамиloop-AES (/usr/src/ loop-AES-v3.2g), открываемфайлbuild-initrd.sh
втекстовомредактореиисправляемнесколько переменных:
НАСТРОЙКАBUILD-INITRD.SH
#Использовать метод initramfs/ switch_root
#для переключения на зашифрованный корневой раздел
USEPIVOT=2
#Раздел, хранящий каталог /boot BOOTDEV=/dev/sda1
#ÔÑ boot-раздела
BOOTTYPE=ext3
#Корневой раздел CRYPTROOT=/dev/sda2
#ФС корневого раздела
ROOTTYPE=ext3
#Метод шифрования (AES128/AES192/ AES256)
CIPHERTYPE=AES128
#Клавиатура в режиме UTF-8. Это важно, если
#пароль к ключам содержит нелатинские символы
UTF8KEYBMODE=1
Отредактируемконфигурационныйфайлgrub (/ boot/grub/menu.lst), чтобызаписьонашемядре выгляделапримернотак:
#vi/boot/grub/menu.lst
title Ubuntu 9.04, kernel 2.6.28.9-noloop
root (hd0,0)
kernel /boot/vmlinuz-2.6.28.9- noloop
initrd /initrd.gz
Наконец, установимобразinitrd инаборнеобходимыхутилит(losetup, например) вкаталог/boot:
#./build-initrd.sh
7.Делозамалым: загрузитьсясLiveCD (либо другогодистрибутива), создатьнесколькофайловустройств(которыхможетнебытьдозапуска udev) изашифроватьсодержимоекорневого раздела. Монтируемкорневойразделхост-сис- темы(здесьидалее/dev/hda2):
#mount /dev/hda2 /mnt
Открываем/mnt/etc/fstab изаменяем«/dev/ hda2 / ext3 defaults 0 1» на«/dev/loop5 / ext3 defaults 0 1». Дваважныхзамечания: необходимоиспользоватьименно/dev/loop5, — этоимя прошитовinitrd; вUbuntu инекоторыхдругих дистрибутивахвместоименикорневогораздела можетбытьуказанегоUUID (уникальныйидентификационныйномер, используетсядлятого, чтобыядромоглонайтикорневойраздел, даже еслижесткийдискбудетподключенкдругому
каналу/компу). Теперьпроверимнасуществованиенесколькихфайловустройств(нужныдля работыутилит, помещенныхвкаталог/boot):
# ls -l /mnt/dev/{console,null,zero}
Еслитаковыхнесуществует— создадимих:
#mknod -m 600 /mnt/dev/console c 5 1
#mknod -m 666 /mnt/dev/null c 1 3
#mknod -m 666 /mnt/dev/zero c 1 5
Отмонтируемкорневойраздел:
#umount /mnt
#sync
Исмонтируемboot-раздел(mount-r/dev/hda1/ mnt),чтобывоспользоватьсяутилитойaespipeдля шифрованиясодержимогокорневогораздела:
#dd if=/dev/hda2 bs=64k \
| /mnt/aespipe -e AES128 -K /mnt/ rootkey.gpg -G / \
| dd of=/dev/hda2 bs=64k conv=notrunc
Уффф, этовсе, перезагружаемсяинаслаждаемсябезопасностью:
#umount /mnt
#sync
#reboot
ЗАКЛЮЧЕНИЕ
Каквидишь, loop-AES нетакужисложенвустановкеидостаточнопроствиспользовании(за исключениемчетвертогосценария, конечно). Спомощьюэтогонезамысловатогодрайвера можнозашифроватьswap, разделы, файлы, флеш-накопителиидажеCD-ROM. Впакетес исходникамидрайвератынайдешьподробное руководство, описывающее, кромевсегопрочего, процесснастройкишифрованияфайловой системызагрузочногофлеш-брелкаисоздания безопасногоLiveCD.z
090 |
XÀÊÅÐ 09 /129/ 09 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
r |
||||
P |
|
|
|
|
|
NOW! |
o |
|
|
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
UNIXOID |
|
|
w Click |
|
|
|
|
|
|
ЕВГЕНИЙ «VSHMUK» БЕЙСЕМБАЕВ / DIVER@EDU.IOFFE.RU, ICQ 308229460 / |
|||||
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
m |
||||||
w |
|
|
|
|
|
|
|
|
|
|||
|
w |
|
|
|
|
|
|
|
o |
|
||
|
|
|
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
|
.c |
|
|
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
Ebook-потрошитель
Применяемхирургию, чтобыраскрытьсекреты
Sony Bookreader PRS-505
ВокругнасполногаджетовсLinux наборту, иниктонемешаетучитьсянаошибкахпрофессионалов, вскрываягаджеты иизучая. Мнойбылакуплена«игрушка» — книгочиталкана электронныхчернилахSony BookReader PRS-505.
Букридер почтив сборе
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Нашацель— посмотреть, какиспользуетсяЛинуксво«взрослых», массовыхустройствах, оценитьнаходки «тамошних» профессиональныхли-
нуксоидов, поднабратьсяопытависследовании чужогософта, аможет, идобавитьвустройство что-тосвое.
ОФФЛАЙН
Итак, сначалапроведемоффлайновыйосмотр внутреннейпрограммы. Производительэлектронныхкнигпериодическивыкладываетна официальныйсайтсвежиепрошивки, исправляющиестарыеглюкиидобавляющиеновые.
Чтобынепотрошитьсодержимоеflash-карточек устройства, простоскачаемновуюверсию
(http://download.sony.com/prs/prs-505/ 1.1.00.18040/PRS-505%20Updater%201.1.00.18040. exe). Этопрограмма, которуюпроизводитель нампредоставилдляперепрошивкиридеров.
Онасодержитобразфайловойсистемыдля |
size 65536 CRC 0xc3e97789, edition |
||
заливкивустройство. Экзешник— всеголишь |
2768907732, 3306537355 blocks, |
||
самораспаковывающийсяархивWin-Zip, иего |
1718735798 files |
||
совсемнеобязательнозапускать, достаточно |
cramfs.Rootfs.img: Linux Compressed |
||
простораспаковатьlinux-утилитойunzip: |
ROM File System data, little endian |
||
|
|
size 65536 CRC 0xdb11801f, edition |
|
$ unzip PRS-505\ |
|
3444324402, 2364302859 blocks, |
|
Updater\ 1.1.00.18040.exe |
|
491549572 files |
|
|
|
raw.BootImg.img: DOS executable |
|
Помимовспомогательныхdll-екиконфигура- |
|||
(device driver) for DOS |
|||
ционныхфайловxml (книммыещевернемся), |
|
||
|
|||
враспакованномархивебудутжитьнужные |
Содержимоетретьегофайлапоказалосьмне |
||
образыФС, которыеизаливаютсявитогев |
подозрительным, этобылявнонеДОС-драйвер. |
||
устройство. Ониимеютрасширение*.img. |
Размер— 480 тысячбайт, почтиполностьюза- |
||
Пропустимэтиимиджичерезпрограммуfile и |
битединичками(дляболеебыстрогозаливаво |
||
посмотрим, чтоонаонихдумает: |
флеш, какяполагаю) иимеетнекотороеколи- |
||
|
|
чествовкрапленийчего-томалоосмысленного. |
|
$ file *.img |
|
Сначалаярешил, чтоэтокакой-тозагрузчик |
|
cramfs.Fsk.img: Linux Compressed |
|
(истинноеназначениестанетяснымпозднее). |
|
ROM File System data, little endian |
|
Файлыcramfs.Fsk.img иcramfs.Rootfs.img, |
|
|
|
|
092 |
XÀÊÅÐ 09 /129/ 09 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|
|||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
Разобранный |
|
|
|
|
-x cha |
|
|
|
|
девайс
Подпаялсяк отладочному порту. Ахтунг! КонтактGND на этойфоткезапаяннетам! Это
мойкосяк
рыйзапускаетфайлtinyhttp.sh, живущийвпредыдущейизученнойнамифайловойсистеме. А вотздесьужеинтересно. Зачемустройству, не имеющемуникакогосетевогоинтерфейса, ка- кой-тоhttp? Ладно, беремназаметкуиползем пофайловойсистемедальше.
Некоторыйинтересвызвалдрайверхваленыхэлектронныхчернил(http://ru.wikipedia. org/wiki/EInk), живущийпоадресу/lib/ modules/2.4.17_n12/kernel/drivers/video/ etrackfb.o. ПоискпоследовательностейASCIIсимволоввэтомдвоичномфайле(команда
«strings etrackfb.o») далследующийрезультат:
очевидно— образыфайловыхсистемвформа- |
Ну, во-первых, содержимоефайла/etc/issue |
kernel_version=2.4.17_n12 |
теCramFS. Попробуемихсмонтировать: |
дастнамверсиюокруженияLinux — коммер- |
author=E Ink |
|
ческийпроектMontaVista версии3.0 (www. |
description=8track FrameBuffer |
$ mkdir Fsk.FS |
mvista.com). Файлы/etc/passwd и/etc/sudoers |
Driver |
$ cd Fsk.FS |
расскажутоединственномпользователеэтой |
VGA e-ink 600x800 |
|
системы: «libro» сзашифрованнымпаролем |
|
|
|
|
# mount -t cramfs -o loop ../cramfs. |
«/ET3mqgcE1NTQ». Подкаталог/etc/rc.d |
Следовательно, электронныечернила |
Fsk.img . |
обозначитвсесервисыидемоны, которые |
представляютсяЛинуксукакграфический |
|
запускаютсявустройстве. Здесьвсестандарт- |
Framebuffer-совместимыйдисплей! Такчто, |
|
||
Внутри— каталогsony/ebook, авнем— под- |
но, еслибынеспрятавшийсявrcS.d скрипт |
еслизахотимпохачитьустройствоизаста- |
каталогиapplication, bin иFONT. Заглянемв |
S20libromount. Заглянуввнего, можноузнать, |
витьвыводитьнаэкранчто-то, отличноеот |
первыйиувидимкучудинамическихбиблио- |
чтоонмонтируетфайловыесистемы(в/opt , / |
книжек, — надолишьнаправлятьвыводнашей |
тек, скомпилированныхподархитектуруarmel, |
opt0 и/opt1), подгружаетдрайвераэкранчика, |
графическойпрограммыв/dev/fb0. Проявля- |
икучкувездесущихxml-файлов. Вкаталоге/ |
звука, usb-storage иflash-карточек, выводит |
етсяисмыслфайлаraw.BootImg.img — этото, |
bin — 4 бинарника, авFONT — шрифты. |
наружуприветствиеиустанавливаетдефолт- |
чтоотсылаетсявофреймбуфферпризагрузке |
Теперьпримонтируемфайлcramfs.Rootfs. |
ноевремя. Вобщем, все, отчегозависиткниго- |
ОС, тоестькартинкаслоготипоминадписью |
img. Внем— полноценнаяфайловаясистема |
читалка, делаетсяздесь. |
«Starting Up…». Размерфайлакакразравен |
GNU скаталогами: bin, Data, dev, etc, home, lib, |
Ячутьбылонеушелизподкаталога/etc дальше |
800x600 (=480000), побайтунапиксель. |
mnt, opt, opt0, opt1, proc, root, sbin, tmp, usr, var. |
пофайловойсистеме, новпоследниймомент |
Одноизособенностейустройства— разработ- |
Чтожеинтересногоздесьможнонакопать? |
заметилскриптикrc.d/rc3.d/S98librostart, кото- |
чикифизическипоместилинаразныефайло- |
XÀÊÅÐ 09 /129/ 09 |
093 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|||
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|
|||
|
|
|
|
to |
|
|
|
|
|
UNIXOID |
|
w Click |
|
|
|
|
|
m |
|
||||
|
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
|
.c |
|
|
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
|
||
|
|
|
|
-xcha |
|
|
|
|
|
Подключение ккомпьютеру
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
выесистемысобственноGNU (какуниверсальныйсофт) иустройство-зависимуюоболочку Fsk — то, чтоиделаетбукридербукридером. Сделано, эточтобыможнобылобыстрозаливатьобновлениякпрограммечтения, нетрогая системуцеликомиповышаяеебезопасность.
РАЗБИРАЕМ…
Внутренностиустройстваужедавноисследованытоварищамиigorsk, boroda иостальными энтузиастамисфорумаwww.the-ebook.org/ forum/viewtopic.php?t=7577. Намосталось толькоповторитьихподвиг, благо, инструкция поразборкетамимеется.
Сзамираниемсердцаразбираюсвоегохорошегодругаивнутриобнаруживаю:
•Центральный процессор FreeScale (Dragonball) MX-1 с архитектурой ARM926
•Микросхема NAND-Flash памяти Samsung (256 Мb)
•Микросхема NOR-Flash памяти Spansion (2 Мb)
•Две микросхемы оперативной памяти Samsung
•Контроллер карт SD/MMC+MemoryStick Ricoh
•Контроллер дисплея на FPGA Actel ProASIC3
•Цифро-аналоговый преобразователь для вывода звука
•Контроллер USB Epson S1R72V17
•Распайка под проприетарный отладочный разъем (100 ножек), маркирована как CN1501
Итак, никакогочудаиликрутойинженернойнаходкивнутрибукридеранет. Видиммикросхему NOR-памяти, вкоторой, скореевсего, живутзагрузчикиядро, потомукакименноэтоттипFlash умеетчитатьотдельнозаданныйбайт(Random Access). Рядом— NAND-Flash, где, очевидно,
живутфайловыесистемыи, собственно, сами книжки. ЛичноменяпорадовалаSDRAM-память вмаленькихBGA-корпусах. Темсамыминженерынехилосэкономилиместонаплате. Вообще, компоновщикамплатыидизайнерам корпусамояпохвалаизависть. Всеподогнано неимоверноточно, инигденезаметнорасточительства. Впихнутьвкорпусчто-нибудь, кроме того, чтовнеместь, мнепоказалосьневозможным. Короче, нидобавить, ниотнять. Разберемсясотладочнымразъемом. Очевидно, нанеговыводятсяJTAG-интерфейсымикросхем + какие-нибудьпорты, типапоследовательного отладочногоUART’асцентральногопроцессора. Такиесть. Ребятасфорума, названного выше, ужесделалигрязнуюработу, ввиде тыканияосциллографом, ивычислилипринад- лежащиеDBG-портуножки. Осталосьтолькок нимподпаяться. Припаиваемтонкиесеребря-
ныепроводак6(Transmit) и7(Receive) пинам,
атакженезабываемпро«земляной» контакт, которыйможновзятьилиот5-гопинаразъема
или— простосхватившисьзакорпусустройства. ЧерезпереходникRS-232/UART подключаемк COM-портукомпьютера.
ОНЛАЙН
Включаемустройство. Еслипортнастроенправильноивсезапаяноаккуратно, тонаблюдаем логзагрузкиЛинукса. Какзагрузказакончена, — логинимсясузнаннымииз/etc/passwd реквизитами(libro:librie). Системапускаетнаси вываливаетсообщение:
###fskLoad
###fskLoaded
latest nblconfig read from 0x0003b800 latest nblconfig written to 0x0003c000
#### xs_switcher_usbWatcher_ endUSBThread
#warning: global instead of local!
#warning: global instead of local! SYSNPM: sysnpm_pm_callback():163 Mem, CPU stopping...
Послечегоперестаетотвечатьнакоманды! Все хорошо, такидолжнобыть, этопроцесс-оболоч- каtinyhttp заметиланеактивностьпроцессора ивырубилаего, чтобысэкономитьаккумулятор. «Расшевелить» процессорможно, понажимав накнопкигромкости. Работатьтаксложно, поэтомуубиваемлишнее:
$ killall tinyhttp.sh $ killall tinyhttp
С этого момента нам доступна настоящая, полноценная система GNU/Linux на ядре
2.4!
Из лога загрузки (команда dmesg) можем узнать многое об аппаратной части девайса: например, что размер оперативной памяти 64 Mb и что flash-память разбита на очень много разделов на все случаи жизни. Взглянем на характеристики процессора:
root@(none):/proc# cat /proc/cpuinfo
Processor : ARM/CIRRUS Arm920Tsid(wb) rev 0 (v4l) BogoMIPS : 98.09
Features |
: swp half 26bit |
Cache type |
: write-back |
Cache clean |
: cp15 c7 ops |
Cache lockdown : format A |
|
Cache unified |
: harvard |
... |
|
Hardware |
: Motorola |
DragonBall MX1 (eBook-2)
Выходит, контроллер работает на частоте 100 МГц и имеет архитектуру ARM9.
А вот что Линукс примонтировал:
root@(none):/var# mount
/dev/root on / type cramfs (rw) proc on /proc type proc (rw) tmpfs on /dev/shm type tmpfs (rw) tmpfs on /tmp type tmpfs (rw) tmpfs on /var type tmpfs (rw) tmpfs on /etc type tmpfs (rw)
/dev/mtdblock10 on /opt1/keys type cramfs (rw)
/dev/mtdblock11 on /opt1/info type cramfs (rw)
/dev/mtdblock15 on /opt type cramfs (rw)
/dev/mtdblock16 on /opt0 type jffs2 (rw)
devpts on /dev/pts type devpts (rw)
Кстати, то, что имеет файловую систему cramfs — доступнотолькодлячтения. Особенностьфайловойсистемы, чтобытамдрайвер себенидумал.
ОБОЛОЧКА
Каксредифайловпрошивкиустройства, таки вприложении, поставляющемсяподWindows, можнозаметитьмножествоxml-файлов,
какодин, начинающихсясострочки«<fsk xmlns=»http://www.kinoma.com/Fsk/1»>». Это файлыдляоболочки, созданнойкомпанией Kinoma иприобретеннойSony (чтомелькаетв «титрах»). Вобщем, бинарникtinyhttp парсит этифайлыиделаетвсе, чторидерунужно: рисуетинтерфейс, подключаетбиблиотекидля разборафайлов, выполняетскриптыит.д. Назвалиего, конечно, странновато, ногде-тодаже логично. Нужнуюфункциональностьможно
094 |
XÀÊÅÐ 09 /129/ 09 |
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
добавитьвсистему, неприкасаяськкомпилятору. Пишем пообразуиподобиюновыеконфигиилиправимсуществующие, потомдобавляемшрифты, простенькиеигры— это возможно! «Язык» xml-файловнеоченьсложен, такчтовсе внашихруках.
Энтузиастывинтернетеужесоздалиальтернативные прошивкиспакетамилокализацииидажеупаковалиихв CramFS-образы. Средирекомендуемого— болеечитабельныешрифты, симпатичныеиконкиичасывуглуэкрана. Можнонеспешитьзаламыватьконфиги, асначалапосмотреть, чтопредлагаетсообщество. Ноеслихочетсячего-то своего, торасскажу, каксоздатьобразнапримерезаливки новыхшрифтов.
Ttf-шрифтылежатвкаталоге/opt/sony/ebook/FONT. В
идеале, ихнадопереименоватьвtt0003m_.ttf,tt0011m_. ttf,tt0419m_.ttf, атакжедатьвнутренниеимена:
Font family — Swis721 BT, Dutch801 Rm BT, Courier10 BT Font subfamily — Roman, Roman, Roman
Full font name — Swis721 BT Roman, Dutch801 Rm BT Roman, Courier10 BT Roman
Именнотакиеименапрописанывконфигахapplication/ kconfig.xml иapplication/resources/scripts/main.xml. По образуиподобиюнаписанноготамможноизменитьпредложенныестилинасвои:
<style font=»Courier10 BT»>
//Стиль для показа часов: жирный, размер 22 <style id=»time" size="22" style="bold" color="#FFFFFF"/></style>
<style font="Dutch801 Rm BT">
//Текст размером 12
<style id="text" size="12"/></style>
Втехжеконфигах, играясьсоскриптамииразметкой, можно добавитьвозможностейвоболочку. Финальныйаккорд— пакуемновуюФСвобраз:
# mkfs.cramfs ./new_opt ./new_opt.img
ПЕРЕПРОШИВКА
Простотакзаменитьнужныйфайлнаобновленныйсжатая файловаясистемаcramfs непозволяет. НадобудетеераспаковатьнаPC, внестиизмененияиспомощьюmkfs.cramfs запаковатьобратно, чтоибылопроделановпредыдущем разделе. Товарищigorsk написалнаборскриптов(Universal Flasher, качатьотсюда— www.mobileread.com/forums/ showthread.php?t=26831). Сихпомощьюможнозаменить
XÀÊÅÐ 09 /129/ 09
Внутренности вподробностях
старыйобразна созданный, атакже (внимание!) заменять отдельныефайлы, еслихочетсяпоэкспериментировать, не мучаясьскомпоновкамиобразов. Просто скидываемкучкуфай- ловнаFlash-карточку,
заменяемобразnew_opt.img нанаш, вставляемвбукридер иперезагружаемся. Есливсепрошлохорошо, иошибокв конфигахнет, томызаимеемобновленныйинтерфейс. Чащевсегопризаливкеиспорченногообразасистемане выходитизстрояидаетнамшансисправитьпроблему. Хотя иногдаоболочкаповреждаетсянастолько, чтобезтяжелой артиллерии(подпаиваниякотладочномупорту) необойтись. НоведьостальнаяфайловаясистемасGNU неубита, поэтомусполноценнойконсольюнесложноперепрошить устройстворабочейпрошивкойвручную, предварительно заливнафлешкусоответствующийобраз(приведенная нижепоследовательностьдействийпредложенаboroda):
//Создаем временный диск в памяти объемом 32 Мb root@(none):~# mount -o remount -t tmpfs -o size=32m /dev/shm /tmp
//Монтируем Flash-карточку
root@(none):~# mkdir /tmp/sd_card
root@(none):~# mount /dev/sdmscard/r5c807a1 /tmp/ sd_card
//Вынимаем оттуда образ во временный диск root@(none):~# cp /tmp/sd_card/new_opt.img /tmp
//Проверяем контрольную сумму
root@(none):~# md5sum /tmp/new_opt.img
//Проприетарный софт Sony для низкоуровневой работы с NAND-flash карточками
root@(none):~# /usr/local/sony/bin/nblsdm delete Fsk
root@(none):~# /usr/local/sony/bin/nblsdm create -i /tmp/new_opt.img -d 1 Fsk
//Сравниваем залитое
root@(none):~# /usr/local/sony/bin/nblsdm cmp -i /tmp/new_opt.img Fsk
root@(none):~# /usr/local/sony/bin/nblconfig -ksel normal
root@(none):~# sync root@(none):~# reboot
HTTP://WWW
links
•Хорошийсайтпро электронныекнижки сзамечательным форумом— www.theebook.org.
•Ещенемногосведенийовнутренностяхдевайса: http:// wiki.mobileread.com/ wiki/Sony_Reader_ hack.
INFO |
info
•UART — этот простоймеханизм позволяетпоследовательнопередать несколькобайт. Водномизпредыдущих номеровжурнала СергейДолинподробнонаписалонем врубрике«Фрикинг».
•Sony Bookreader PRS-505 — карман-
ныйкомпьютер, имеющийвместо стандартногоЖКили OLED-дисплеятак называемыйE-ink дисплейнаэлектронныхчернилах.
ПРОСТОРДЛЯЭКСПЕРИМЕНТОВ
Привычкаразбиратьпопадающиесяподруку(исобиратьобратно!) гаджетыдобавляетопытаипомогаетпри созданиичего-тосвоего. Мывзялиустройстводлячтения электронныхкниг, новместочтениясталиисследоватьего программнуюиаппаратнуюсуть. Ладноспроектированный исозданныйнабазезнакомогоиизученногоLinux, Sony Bookreader PRS-505 предоставляетширокийпростордля экспериментовитворчества. z
095