Archos 101
Краткое резюме: говно, причём тивоизированное говно. Хотя это лечится — и штатно, через SDE, с потерей гарантии, и нештатно, эксплойтами, без потери гарантии… Загрузчики Archos 101 и вообще gen8 (а я подозреваю, что они такие же и у следующего поколения gen9) мною успешно взломаны. См #PWNED.
Содержание
Плюсы
- Большая (реально большая!) батарейка.
- Как ни странно, отличные стереодинамики, звук лучше, чем на многих ноутбуках :)
- Наличие USB-HOST с полноценным 0.5А питанием.
- Наличие прошивки SDE (Special Developer Edition) и полных (!) исходников ядра, с конфигом, можно собрать любой нужный модуль — например, можно подключать USB 3G модемы (желание возникает в связи с отсутствием 3G).
- Из коробки есть модуль ядра tun, есть BusyBox.
- Из коробки есть большая часть кодеков (кроме разве что MPEG2 и AC3), и HD видео девайс показывает.
- Неплохой процессор и GPU, 1247 попугаев в Quadrant’е.
- 10.1" экран, 802.11n. Но это уже почти у всех есть.
- Процессор TI OMAP 3630. Хорошо тем, что TI, потому что они предоставляют спеки, в отличие от анального Qualcomm’а со своими Snapdragon’ами.
Со всем этим Archos, правда, опоздал где-то так на полгодика, потому что когда они таки выпустили эти планшеты, уже проснулись и другие производители, и у многих тоже появился USB-HOST, при экране, изначально лучшем, чем у архоса — см. ниже хард-минусы.
Минусы
Хард:
- Экран ОТВРАТИТЕЛЬНЫЙ. Углы — сверху и снизу примерно одинаково средненькие, справа УЖАСНЫЙ, слева наилучший. Кроме того экран очень широкий, 1024х600 представляется не очень удобным разрешением. А ещё и глянцевый, постоянно смотришься в него как в зеркало.
- Камера ОТВРАТИТЕЛЬНАЯ — как на мобильниках 5-летней давности.
- Не заряжается по USB. Хотя это и следствие большой батарейки — она двумя амперами-то по-моему часа 4 заряжается, страшно представить, что было бы по USB. Но возможность зарядки по USB всё равно можно было предусмотреть.
- Маловато оперативки (256 Мб). Из-за этого девайс бывает не очень шустрый, хотя игрушки идут хорошо, HD видео девайс вполне показывает, и в Quadrant’е успешно получает 1247 попугаев!
- Нет ни 3G, ни GPS.
В общем-то хард-минусы всё и убивают, потому что с софт-минусами можно что-нибудь поделать кастомными прошивками. Сейчас вроде-бы уже есть более новые Archos gen9, которые, типа, поприличнее, но в руках не держал — и не горю желанием, потому что сильно лучшего качества экрана не жду. Да и весит Archos 101 G9 почти в два раза больше.
Однако, вот и софтовые минусы:
- Нет netfilter’а (а с ним ни tethering’а, ни openvpn несмотря на то, что есть модуль tun).
- Нет Android Market’а, хотя его и можно поставить руками (то есть там «нелицензионный» Android без денежных отчислений гуглу).
- Системный раздел смонтирован из squashfs, то бишь доступ туда только на чтение. То бишь, без SDE не ставится перманентный root, а только получается заново при каждом запуске программой Archangel.
- Fastboot’а нет, прошивать девайс себя так просто не даёт, в том числе recovery. Загрузчики проверяют цифровую подпись ядра, initrd, вторичного загрузчика. Но я их уже дизассемблировал и сломал!
- А установка SDE, вроде как, обнуляет области флеша с DRM-ключами… То есть дело не в DRM — контент, защищённый ДеРьМом, потеря небольшая, юзать его и так нельзя, даже чисто из принципиальных побуждений. Но тем не менее, ненавижу производителей, которые запрещают мне что-то делать с МОИМ девайсом!
- Поддержка usb flash drive не пашет. Требует допила, либо установки UrukDroid’а (модифицированной прошивки). Вообще похоже, что без UrukDroid’а делать на нём нечего (правда, на этих планшетах всегда делать нечего).
А для него нужен SDE, а SDE поганит прошивку. Так что ждём PWN’а.Уже PWNED!!! См. ниже.
PWNED
Итак, решил наконец вернуться из дебрей дизассемблирования к тому, ради чего я его затеял — к взлому загрузчиков Archos gen8 и gen9 (отключению проверки цифровой подписи), и проверить, получится ли. Archos crack bootloader diy free download, как бы сказал SEOшник.
По идее, это не так-то много и даёт — кастомные ядра можно и так устанавливать, это предусмотрено вторичным загрузчиком в виде «SDE». Но есть нюансы!
Во-первых, эти ПИДРы из Archos’а утверждают, что при установке SDE (произошедшей хотя бы раз) обнуляют DRM-ключи устройства (что в общем-то насрать) и гарантию (тоже насрать, чуть меньше, но всё же) — типа, в устройство ставится какой-то флаг, по которому они всегда могут понять, что «ОНО УСТАНАВЛИВАЛОСЬ, ЮЗЕР НИХАРОШИЙ».
Во-вторых, и что более важно — никакие эксперименты с SDE не дают возможности модификации загрузчиков и recovery (хер вам, а не ClockWorkMod). Невозможность модификации recovery всё-таки обижает, а модификация загрузчика дала бы возможность, например, объединить два mmc-девайса в один и нормально преодолеть идиотское ограничение в 512 Мб на систему — реально-то чип один, это он уже софтово (параметром модуля ядра) на два делится — 512 Мб mmcblk0 + всё остальное mmcblk1. Хотя на это, особенно исходя из «популярности» устройства, которой оно обязано говённому железу, надежды мало; скорее всего, никто модов загрузчика так никогда и не сделает. Собственно, Archos-энтузиасты, по-моему, ограничиваются людьми типа scholbert’а (XDA), которым gen8 достался в состоянии кирпича (bricked) и несколькими странными людьми вроде меня, купившими его честно, но не видящими ему применения.
Кстати, AOS-файлы прошивок тоже зашифрованы, но для их расшифровки есть aos-tools и нужные ключи уже тоже нашли.
Ну, и наконец, моральный нюанс. Неприятно иметь лоченный, даже частично, девайс. Всё-таки жалко, что Linux не GPLv3, тогда бы и загрузчики были открыты, и секретные RSA-ключи, используемые для прошивки :(. Вешать тивоизаторов НА СУКУ!!! Вот.
Так что было принято решение, не устанавливая SDE, отучить свой девайс быть тивоизированным.
По-лу-чи-ло-сь. Оба загрузчика (первичный и вторичный) успешно взломаны. Проверка цифровых подписей на моём девайсе теперь отключена.
Чтобы повторить это на своём девайсе (теоретически должно подходить и для других Archos gen8), нужно:
- заменить 8 байт по адресу 0x7520 от начала mmcblk0 с 7F402DE9003091E5 на 0000A0E31EFF2FE1.
- заменить 8 байт по адресу 0x14824 от начала mmcblk0p1 с 7F402DE9003091E5 на 0000A0E31EFF2FE1 (либо по адресу 0x14424 в файле /mnt/rawfs/avboot, но в rawfs как-то не очень пишется).
Первое патчит первичный загрузчик, второе — вторичный (которой /mnt/rawfs/avboot). Мысль в том, чтобы заменить тело функции verify_hash(), проверяющей подпись и возвращающей 0, только если она корректная, на просто «return 0», что на ARM-ассемблере звучит так:
MOV R0, #0 BX LR
Для этих манипуляций, правда, нужен root, который на gen8 успешно получается Archangel’ом, но только на прошивках старее 2.3.xx… Причём все прошивки после 2.1.08 не дают откатываться на более старые (но всегда можно откатиться куда угодно с помощью SDE). Так что root без потери гарантии (срать на эту гарантию…) всё-таки может быть некоторой проблемой, манипуляции лучше делать, оставаясь на 2.1.xx или 2.2.xx. Правда я хз, можно ли вообще найти gen8 с заводской прошивкой 2.3.xx или 2.4.xx, так что в целом, может, и всё равно плевать.
Внимание!
Если внезапно кто-нибудь будет повторять и по данным адресам обнаружит данные, отличные от 7F402DE9003091E5, ни в коем случае не меняйте — убьёте загрузчик, и девайс будет bricked, кирпичиком. Ну и вообще, в любом случае, все модификации загрузчика делайте оочень аккуратно и на свой страх и риск.
Его наверняка можно debrick’нуть, процессор в нём TI OMAP 3630, и с большой вероятностью выведен загрузочный UART, если нет — то, возможно, выведен test point (пин процессора SYS_BOOT5) и, соединив его с VCC, можно загрузиться по USB… Но это — бааальшой геморрой, так как сначала его (тестпоинт) нужно ещё найти уже всё нашёл scholbert, а потом ещё найти/написать загрузчик, который сможет восстановить систему…
Кстати, спасибо EiNSTEiN’у http://archos.g3nius.org/, идея взлома взята у него (он так же ломал Archos 5).
3G USB модемы
У многих возникает логичная идея: использовать вместе с архосом 3G USB модемы, например, распространённые Хуавеи разных моделей (E150/160/1552 и т.п). Однако есть проблемы:
- Эти модемы после использования их под виндой требуют переключения в нужный режим через usb_modeswitch.
- Даже когда сделаешь usb_modeswitch, оказывается, что Archos 101 не содержит в себе модуля ядра option.ko (CONFIG_USB_SERIAL_OPTION), необходимого для работы сих модемов, а содержит лишь другой драйвер USB-модемов — cdc_acm, который эти Хуавеи как раз не поддерживает.
- Что ещё важно — владельцы Archos 70 и ниже, можете забыть про модемы, либо придумывать внешнее питание, потому что Archos 70 даёт только 100мА питания на USB-порту — 3G-модемам этого мало.
Однако не всё так плохо, Archos выложил в OpenSource полные исходники ядра для планшетов gen8 (от A28 до A101). Причём не просто выложил, а с конфигом и полным набором инструментов кросс-сборки. Что даёт влёгкую собрать любые необходимые модули. А полученный до этого с помощью Archangel’а рут даёт возможность их установить.
Так что забирайте и радуйтесь (всё для штатной прошивки):
- Статически собранный под Archos бинарник usb_modeswitch: Media:A101_usb_modeswitch.zip. usb_modeswitch нужно вызывать с параметрами типа usb_modeswitch -H -v 12d1 -p 1446 (это мой разлоченный Huawei E150 от МТС), но для разных моделей модемов чиселки могут отличаться. После однократного usb_modeswitch модем можно вынимать и вставлять, он будет в правильном режиме. Если вставить под винду — вероятно, usb_modeswitch понадобится повторный. Ещё может быть полезно сказать модему AT^U2DIAG=0 средствами компьютера и HyperTerminal’а / minicom’а / echo AT^U2DIAG=0 > /dev/ttyUSB0.
- Собранный под Archos (прошивка 2.1.04) модуль ядра option.ko: Media:A101_option.zip
- Модифицированные скрипты /system/bin/tether_*.sh: A101_tether_start_usb.sh, A101_tether_at_cmd.sh, A101_tether_stop.sh. Все вместе одним архивом: Media:A101_tethers.zip. Их нужно скопировать в /system/bin, чтобы использовать стандартный пункт меню «Cell phone tethering».
Дополнительные ссылки:
- Ссылка на форум с инструкциями по сборке ядра: http://archivez.info/index.php/47/gen8-android-development/-howto-build-custom-kernel-libraries-and-applications-on-your-own-a891056.html
- Исходники ядра, библиотек и инструментов Archos: http://www.archos.com/support/download/software/sources/gen8-gpl-froyo.tgz
А в UrukDroid’е поддержка 3g модемов уже и так есть, кстати.
Аппаратная часть
- Выводы UART на Archos 101
- Выводы UART на Archos 70
- Выводы конфигурации загрузки на Archos 101; чтобы поменять порядок загрузки на внешние интерфейсы (USB → UART → внешняя SD-карта → внутренняя SD-карта), нужно подать высокий уровень на sys_boot5 (1.8V через 33 кОм резистор).
Тестирование загрузки с других устройств
Конфигурация загрузки Archos 101, имеющего процессор OMAP3630, задаётся 5-ю аппаратными выводами sys_boot[0:4]. Однако, у OMAP есть дополнительная фича — программная конфигурация загрузки. Если в специальную область памяти («scratchpad») записать специальную структуру, описанную в мануале, и потом дёрнуть программный reset (сброс) — процессор предпочтёт записанную конфигурацию аппаратной. Таким образом, ничего не перепаивая, можно заставить его инициировать процесс загрузки с любых возможных устройств, включая загрузку по USB или UART, а также загрузку с внешней карты памяти SD. Правда, с последней есть проблема — при включении питание на неё не подаётся, поэтому с неё так просто загрузиться не получится. Кроме того, (пока что) нет подходящего загрузика — точнее, есть U-Boot, но под него нет подходящей конфигурации. В целом, учитывая наличие исходников ядра, ничто не мешает её написать, но это должен кто-то сделать :)
А вот модуль для программного конфигурирования порядка загрузки я уже написал! Брать тут: Media:Omap softreboot.tar.bz2 (56 Кб). В архиве исходники и модуль, собранный для Archos’овского ядра 2.6.29-omap1.
Использовать так:
insmod omap_softreboot.ko cat /proc/omap_softreboot # посмотреть справку echo uart,usb > /proc/omap_softreboot # перезагрузиться с UART, потом USB
То есть, при записи в /proc/omap_softreboot модуль конфигурирует загрузку и сразу же перезагружает девайс. Можно указать до 4 загрузочных устройств через запятую, без пробелов. Каждое устройство может быть одним из:
- mmc1: Первый интерфейс MMC/SD (на Archos 101 — внешняя карта)
- mmc2: Второй интерфейс MMC/SD (на Archos 101 — внутренний флеш-диск eMMC)
- usb: Загрузка образа по USB
- uart: Загрузка образа по последовательному интерфейсу UART3 (как подключиться к нему на Archos 101 — см. выше)
Для удалённой загрузки по USB указывается «uart, usb», потому что просто «usb» как-то приводит процессор в замешательство и USB-устройство не появляется.
Есть и другие варианты, но все они актуальны скорее для других устройств, нежели для нашего Archos’а:
- nand: NAND-флешка
- onenand: OneNAND/Flex-OneNAND
- doc: DiskOnChip
- xip: NOR-флешка
- xip_wait: NOR-флешка с «wait monitoring»
Приятного хакинга :)
Системные форматы
Not a copy-paste, but also written by me, accidentally in English.
Archos gen8 has a single MMC chip, but it is programmatically splitted into /dev/mmcblk0 (512 MB) and the rest.
gen8 /dev/mmcblk0:
- 0x200 master boot record with OMAP CHSETTINGS
- 0x20000 primary bootloader
- 4 bytes size (0xbee8 on Archos 101)
- 4 bytes loading address (0x40200800)
- CODE…
- 50 MB rawfs partition with kernels
- 128 MB system partition
- 32 MB swap
- 324 MB data
Rawfs format:
- 0x200 bytes (1 block) rawfs superblock
- 4 byte magic number: 61 72 61 77 = «araw»
- 2 byte checksum, unused and zeroed
- 1 byte count of sections
- 25 reserved bytes
- 10 section entries:
- 4 byte offset from superblock end, in blocks
- 2 byte size, in blocks
- 32 byte zero-terminated name
- 4 byte flags (0 = nothing, 1 = writable)
- 4 reserved bytes
- sections:
- 1 block section header
- 4 byte magic number: 66 72 61 77 = «fraw»
- 2 byte checksum, unused and zeroed
- 2 reserved bytes
- 4 byte section size in bytes
- 4 byte flags
- 4 byte uid
- 4 byte gid
- 4 byte access mode
- 484 zero bytes
- (size from superblock entry) blocks — section data
- 1 block section header
Rawfs layout — designed to fit into 32MB partition with first stage bootloader (256 KB):
# | Name | Description | Reserved size | Real size |
---|---|---|---|---|
1 | avboot | secondary bootloader | 0x200 blocks (256 KB) | 100676 bytes |
2 | prod | some device settings (???) | 0x200 blocks (256 KB) | 0x420 bytes |
3 | params | parameter store (maybe also keystore???) | 0x200 blocks (256 KB) | 0x8000 bytes |
4 | recovery | recovery kernel+initramfs | 0x4000 blocks (8 MB) | 2872714 bytes (FW 2.1.4) |
5 | init | normal kernel+initramfs | 0x4000 blocks (8 MB) | 6353727 bytes (FW 2.1.4) |
6 | custom | developer edition kernel+initramfs | 0x4000 blocks (8 MB) | empty by default |
7 | banner | gzipped boot logo uncompressed size 0x258000 bytes (raw 1024x600 x 32bit color) | 0x200 blocks (256 KB) | 27706 bytes |
8 | fs | something unused | 0x3600 blocks (6912 KB) | empty |
TOTAL | 0xfe00 blocks (32512 KB = 32 MB - 256 KB) |
Rawfs по умолчанию не даёт ничего записывать, но в конфиге ядра есть CONFIG_RAWFS_FS_DISABLE_WRITEPROT — если сие включить, то по идее должна разрешить.
Код вторичного загрузчика («avboot») говорит нам о том, что по идее эта фиговина может загружаться не только с rawfs-раздела, а также с обычного FAT (FAT16?), но проверять я это не рискну, если не сделаю себе «UnBrickable» аппаратный мод, позволяющий загрузиться откуда-нибудь ещё, а не только с внутренней флешки.
Magic numbers of archos signature block:
- f0 89 e5 da — kernel+initramfs
- 5a 4d 66 58 («ZMfX») — secondary stage bootloader
- d5 84 c2 d3 — / filesystem (androidmerged.squashfs.secure)
Format of rawfs partitions with kernel/initramfs:
- 0x100 byte header with signature
- magic number: f0 89 e5 da
- 4 byte size of signature in bits (0x400 = 00 04 00 00 on «init» kernel, 0 = 00 00 00 00 on «custom» kernel).
- digital signature — 0x80 bytes = 0x400 bits. Zeroed on «custom» kernel.
- 00 00 00 00
- 4 byte full size of image (header+kernel+initramfs)
- 00 00 00 00 (also 00 01 00 00 in androidmerged.squashfs.secure)
- 4 byte (kernel size + 0x100) = initramfs offset
- 4 byte initramfs.cpio.gz size
- zeroes up to 0x100
- zImage
- initramfs.cpio.gz