Archos 101

Archos 101

Archos 101 - туалетний девайс на Андроїд від компанії Archos, старша модель 8-го покоління їх «інтернет-планшетів» (gen8 - це все моделі 28/32/35/43/70/101). Замовляв з computeruniverse.de.

Коротке резюме: говно, причому тівоізірованное говно. Хоча це лікується - і штатно, через SDE, з втратою гарантії, і нештатно, експлойта, без втрати гарантії ... Завантажники Archos 101 і взагалі gen8 (а я підозрюю, що вони такі ж і у наступного покоління gen9) мною успішно зламані. Див #PWNED.

З усім цим Archos, правда, запізнився десь так на півроку, тому що коли вони таки випустили ці планшети, вже прокинулися і інші виробники, і у багатьох теж з'явився USB-HOST, при екрані, спочатку кращому, ніж у Архос - см . нижче хард-мінуси.

В общем-то хард-мінуси все і вбивають, тому що з софт-мінусами можна що-небудь вдіяти кастомними прошивками. Зараз ніби-то вже є новіші 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. Див. нижче.

Archos 101

Отже, вирішив нарешті повернутися з нетрів дизассемблирования до того, заради чого я його затіяв - до злому загрузчиков 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), потрібно:

Перше патчіть первинний завантажувач, друге - вторинний (якої / mnt / rawfs / avboot). Думка у тому, щоб замінити тіло функції verify_hash (). перевіряє підпис і повертає 0, тільки якщо вона коректна, на просто «return 0», що на ARM-асемблері звучить так:

Для цих маніпуляцій, правда, потрібен root. який на gen8 успішно виходить Archangel'ом, але тільки на прошивках старіше 2.3.xx ... Причому все прошивки після 2.1.08 не дають відкочуватися на більш старі (але завжди можна відкотитися куди завгодно за допомогою SDE). Так що root без втрати гарантії (срать на цю гарантію ...) все-таки може бути певною проблемою, маніпуляції краще робити, залишаючись на 2.1.xx або 2.2.xx. Правда я хз, чи можна взагалі знайти gen8 із заводською прошивкою 2.3.xx або 2.4.xx, так що в цілому, може, і все одно плювати.

Його напевно можна debrick'нуть, процесор в ньому TI OMAP 3630, і з великою ймовірністю виведений завантажувальний UART, якщо немає - то, можливо, виведений test point (пін процесора SYS_BOOT5) і, з'єднавши його з VCC, можна завантажитися з USB ... Але це - бааальшой геморой, так як спочатку його (тестпоінта) потрібно ще знайти вже все знайшов scholbert. а потім ще знайти / написати завантажувач, який зможе відновити систему ...

3G USB модеми

У багатьох виникає логічна ідея: використовувати разом з Архос 3G USB модеми, наприклад, поширені Хуавей різних моделей (E150 / 160/1 552 тощо). Однак є проблеми:

  1. Ці модеми після використання їх під виндой вимагають перемикання в потрібний режим через usb_modeswitch.
  2. Навіть коли зробиш usb_modeswitch, виявляється, що Archos 101 не містить в собі модуля ядра option.ko (CONFIG_USB_SERIAL_OPTION), необхідного для роботи цих модемів, а містить лише інший драйвер USB-модемів - cdc_acm, який ці Хуавей якраз не підтримує.
  3. Що ще важливо - власники 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».

А в 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.

Тобто, під час запису в / 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»

Системні формати

Archos gen8 has a single MMC chip, but it is programmatically splitted into / dev / mmcblk0 (512 MB) and the rest.

  • 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

Rawfs layout - designed to fit into 32MB partition with first stage bootloader (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