Итак, прошёл целый 21 год после того как на рынок были выпущены телефоны Motorola C330, C350, C350L, C450, C550, E380, V150 и некоторые другие. И что же теперь нам остаётся делать? Конечно же самое время достать их с пыльных полок и глубоких ящиков стола, зарядить и начать патчить!
К моему большому сожалению, моддинг-сцена обошла эти телефончики стороной, несмотря на слабую защиту прошивок в них. Да и вообще сам процесс прошивки Motorola C350 был очень удобен, ведь для того чтобы прошить Motorola C350 не нужно было собирать схемки RS-232 <=> USB, паять колодки или же искать экзотические кабели подключения к компьютеру. Для прошивки нужен лишь обычный MiniUSB-кабель (любой), драйвера и официальный прошивальщик RSD Lite. Кроме того для моддинга прошивки телефона на современных Windows и Linux системах можно использовать виртуальную машину с предустановленным софтом.
1. Motorola USB Drivers 3.7.0: 32-bit | 64-bit
2. RSD Lite 3.8: Скачать
3. Образы виртуальных машин для телефонов Motorola, WinXP и Win2K для VirtualBox и VMware Player: Скачать из темы
Увы, несмотря на всю простоту прошивания и массовую распространённость этих телефонов, в публичном доступе не оказалось ни единого патча для них.
1. Hardware / Железная часть
Телефоны Motorola C330, C350, C450, C550, E380, V150 используют процессор Neptune LT/LCA их прошивки защищены BlowFish. Телефон Motorola C350L использует процессор Neptune ULS и его прошивка подписана RSA. Низкоуровневые отличия разных телефонов этой ветки представлены в таблице ниже:
Отличить Motorola C350 от Motorola C350L можно по следующим признакам:
1. Версия прошивок на C350 начинается с C350, тогда как прошивки C350L начинаются с R312
2. Если на этикетке под аккумулятором MSN/SE коды начинаются на С67/SE6 то это C350, а если на D22/SE7 то это C350L.
3. Если нет будильника и есть голосовой набор, то это C350, а если есть будильник, но нет голосового набора, то это C350L.
4. C350L чуть толще и тяжелее C350 за счёт более ёмкого аккумулятора.
2. Software / Программная часть
Касательно патчинга телефонов здесь будут рассматриваться в основном C350 и C350L, как самые распространённые. С упором на Motorola C350L, который был наиболее распространён на нашем рынке. Условно из 100% телефончиков похожих на Motorola C350 около 85% будут C350L, а остальные 15% — C350, C450, C550 и другие ещё более редкие модельки.
Перед внесением любых изменений в прошивку хорошим тоном будет сделать полный BackUp образа Flash-памяти телефона и отдельно BackUp калибровок. Сделать всё это можно следующими утилитами:
1. Программа Flash Terminal (подходит для снятия и залития Flash-образов): https://github.com/EXL/FlashTerminal/
2. Программа C350L_Backup: Скачать
3. Программа SeemXfer: Скачать
Подробно расписывать процесс снятия BackUp'а здесь не буду, так как в теме Бекапим наши телефоны и по соответствующим ссылкам всё подробно расписано. Рассматривать патчинг и обход защит будем на примерах с реальными прошивками, а не бинарными BackUp'ами.
2.1. Патчим Motorola C350
1. Скачиваем последнюю РСТ-прошивку C350_G_09.04.74R, например, по этой ссылке.
2. Распаковываем SHX-файл программой SBF-Recalc 1.2.9.1
3. Склеиваем CG0 и CG1 в один файл с помощью HEX-редактора или UNIX-like утилиты cat для удобного анализа в IDA:
4. Декриптуем файлы "C350*CG1.smg" и "C350_G_09.04.74R_FW.smg" убирая BlowFish утилитой fl_decr.exe из комплекта blowfish_flash_crypt.zip и сохраняя их как "C350*CG1.bin" и "C350_G_09.04.74R_FW.bin"
5. Загружаем в IDA Pro файл "C350_G_09.04.74R_FW.bin" со следующими параметрами, расставляем сегменты RAM и банки IRAM:
ROM: ROM start address: 0x00060000, Input file, Loading address: 0x00060000
RAM: Edit => Segments => Create segment...: RAM, 0x11000000-0x11100000
IRAM 1: Edit => Segments => Create segment...: IRAM 1, 0x01F93000-0x02000000
IRAM 2: Edit => Segments => Create segment...: IRAM 2, 0x01400000-0x01420000
Переходим в начало 0x00060000, там лежит 4-байтное число (жмакаем d несколько раз), это точка входа в прошивку, её адрес. Нажимаем g и начинаем анализ/патчинг.
6. Сделав патчи, которые нам требовались, переносим их в ванильную CG1, обязательно помня про смещение на 0xC8 для заголовка CG0, так как CG1 лежит на 0x000600C8. Поэтому у патчи на CG1 без CG0 из адреса нужно вычитать 0xC8. Подробно про работу в IDA Pro можно почитать в этой теме, а скачать базу данных с неполным разбором на функции можно здесь: C350_G_09.04.74R_FW.bin.idb.zip
7. Получив отпаченный бинарный код в CG1, криптуем его обратно утилитой fl_crypt.exe из комплекта blowfish_flash_crypt.zip
2.2. Патчим Motorola C350L
1. Скачиваем последнюю РСТ-прошивку R312ULS_G_09.10.82R, например, по этой ссылке.
2. Распаковываем SHX-файл программой SBF-Recalc 1.2.9.1
3. Склеиваем CG0 и CG1 в один файл с помощью HEX-редактора или UNIX-like утилиты cat для удобного анализа в IDA:
4. Загружаем в IDA Pro файл "R312ULS_G_09.10.82R_FW.bin" со следующими параметрами, расставляем сегменты RAM и IRAM:
ROM: ROM start address: 0x10010000, Input file, Loading address: 0x10010000
RAM: Edit => Segments => Create segment...: RAM, 0x12000000-0x12200000
IRAM: Edit => Segments => Create segment...: IRAM, 0x03FF0000-0x04000000
Переходим в начало 0x10010000, там лежит 4-байтное число (жмакаем d несколько раз), это точка входа в прошивку, её адрес. Нажимаем g и начинаем анализ/патчинг.
5. Сделав патчи, которые нам требовались, переносим их в ванильную CG1, обязательно помня про смещение на 0xC8 для заголовка CG0, так как CG1 лежит на 0x100100C8. Поэтому у патчи на CG1 без CG0 из адреса нужно вычитать 0xC8. Подробно про работу в IDA Pro можно почитать в этой теме, а скачать базу данных с неполным разбором на функции можно здесь: R312ULS_G_09.10.82R_FW.bin.idb.zip
6. Сделав изменения в CG1, нам нужно обойти RSA, пропатчив кодовые группы CG0, CG18 следующим образом:
Для обхода был портирован метод снятия RSA на LTE с багом зеркалирования адресации, который был обнаружен Vilko.
2.3. Как прошить пропатченную прошивку в телефон?
Итак, у нас имеется пропатченная и закриптованна CG1 или CG0, CG1, CG18 с обходом RSA в случае Motorola C350L. Как прошить их обратно в телефон? Лучшим решением для этого была бы сборка SHX, но поскольку подобная утилита всё ещё в разработке, можно схитрить и воспользоваться трюком подмены кодовых групп на патченные при прошивке телефона в RSD Lite 3.8, вот как он работает:
1. Коннектим телефон к компу/виртуалке во Flash-режиме ("*", "#", "Красная трубка").
2. Запускаем RSD Lite и выбираем оригинальный SHX-файл прошивки.
3. Жмём Start и через секунду вынимаем кабель из телефона на стадии "Create Image File".
4. Программа разберёт SHX на кодовые группы SMG, которые будут лежать рядом с файлом прошивки.
5. Подменяем оригинальные SMG-файлы нашими патченными (имена должны совпадать!).
6. Снова коннектим телефон к компу/виртуалке и нажимаем Start.
7. Телефон прошивается, в конце могут идти ошибки чексумм, игнорируем их.
7.1. Для Motorola C350L нужно ещё чтобы при неправильном подсчёте чексумм в CG0 записалась точка входа в прошивку. Проще всего это сделав слив BackUp в C350L_Backup, поправив и залив обратно. Способ неудобный, поэтому лучше подождите решения со сборкой SHX-файлов.
Ура, наш телефон пропатчен!
3. Спасибо
К моему большому сожалению, моддинг-сцена обошла эти телефончики стороной, несмотря на слабую защиту прошивок в них. Да и вообще сам процесс прошивки Motorola C350 был очень удобен, ведь для того чтобы прошить Motorola C350 не нужно было собирать схемки RS-232 <=> USB, паять колодки или же искать экзотические кабели подключения к компьютеру. Для прошивки нужен лишь обычный MiniUSB-кабель (любой), драйвера и официальный прошивальщик RSD Lite. Кроме того для моддинга прошивки телефона на современных Windows и Linux системах можно использовать виртуальную машину с предустановленным софтом.
1. Motorola USB Drivers 3.7.0: 32-bit | 64-bit
2. RSD Lite 3.8: Скачать
3. Образы виртуальных машин для телефонов Motorola, WinXP и Win2K для VirtualBox и VMware Player: Скачать из темы
Увы, несмотря на всю простоту прошивания и массовую распространённость этих телефонов, в публичном доступе не оказалось ни единого патча для них.
1. Hardware / Железная часть
Телефоны Motorola C330, C350, C450, C550, E380, V150 используют процессор Neptune LT/LCA их прошивки защищены BlowFish. Телефон Motorola C350L использует процессор Neptune ULS и его прошивка подписана RSA. Низкоуровневые отличия разных телефонов этой ветки представлены в таблице ниже:
Phone | SoC | RAM | ROM | IROM | IRAM | BOOT | SW_Start | Crypt_Method |
Motorola C330 | Neptune LT (LCA) | 1024 KiB, 0x11000000 | 8192 KiB, 0x00000000 | 3168 KiB, 0x10000000 | 564 KiB, 0x01F93000 (0x0006D000), 0x01400000 (0x00020000) | 03.72, 0x00001640 | 0x00060000 | BlowFish |
Motorola C350 | Neptune LT (LCA) | 1024 KiB, 0x11000000 | 8192 KiB, 0x00000000 | 3168 KiB, 0x10000000 | 564 KiB, 0x01F93000 (0x0006D000), 0x01400000 (0x00020000) | 03.72, 0x00001640 | 0x00060000 | BlowFish |
Motorola C350L | Neptune ULS | 2048 KiB, 0x12000000 | 8192 KiB, 0x10000000 | 100 KiB, 0x00000000 | 64 KiB, 0x03FF0000 | 09.20, 0x10000000 | 0x10010000 | RSA |
Motorola C350 T-Mobile | Neptune LTS | 2048 KiB, 0x12000000 | 8192 KiB, 0x10000000 | 1792 KiB, 0x00000000 | 512 KiB, 0x03F80000 | 03.72, 0x10000000 | 0x10010000 | RSA |
Motorola C350v | Neptune LT (LCA) | 2048 KiB, 0x11000000 | 8192 KiB, 0x00000000 | 3168 KiB, 0x10000000 | 564 KiB, 0x01F93000 (0x0006D000), 0x01400000 (0x00020000) | 03.72, 0x00001640 | 0x00020000 | BlowFish |
Motorola C355v | Neptune LT (LCA) | 2048 KiB, 0x11000000 | 8192 KiB, 0x00000000 | 3168 KiB, 0x10000000 | 564 KiB, 0x01F93000 (0x0006D000), 0x01400000 (0x00020000) | 03.72, 0x00001640 | 0x00020000 | BlowFish |
Motorola C359v | Neptune LT (LCA) | 2048 KiB, 0x11000000 | 8192 KiB, 0x00000000 | 3168 KiB, 0x10000000 | 564 KiB, 0x01F93000 (0x0006D000), 0x01400000 (0x00020000) | 03.72, 0x00001640 | 0x00020000 | BlowFish |
Motorola C450 | Neptune LT (LCA) | 4096 KiB, 0x11000000 | 16384 KiB, 0x00000000 | 3168 KiB, 0x10000000 | 564 KiB, 0x01F93000 (0x0006D000), 0x01400000 (0x00020000) | 03.72, 0x00001640 | 0x00060000 | BlowFish |
Motorola C550 | Neptune LT (LCA) | 4096 KiB, 0x11000000 | 16384 KiB, 0x00000000 | 3168 KiB, 0x10000000 | 564 KiB, 0x01F93000 (0x0006D000), 0x01400000 (0x00020000) | 03.72, 0x00001640 | 0x00060000 | BlowFish |
Motorola E380 | Neptune LT (LCA) | 4096 KiB, 0x11000000 | 16384 KiB, 0x00000000 | 3168 KiB, 0x10000000 | 564 KiB, 0x01F93000 (0x0006D000), 0x01400000 (0x00020000) | 09.10, 0x00001640 | 0x00060000 | BlowFish |
Motorola V150 | Neptune LT (LCA) | 2048 KiB, 0x11000000 | 8192 KiB, 0x00000000 | 3168 KiB, 0x10000000 | 564 KiB, 0x01F93000 (0x0006D000), 0x01400000 (0x00020000) | 03.72, 0x00001640 | 0x00060000 | BlowFish |
Отличить Motorola C350 от Motorola C350L можно по следующим признакам:
1. Версия прошивок на C350 начинается с C350, тогда как прошивки C350L начинаются с R312
2. Если на этикетке под аккумулятором MSN/SE коды начинаются на С67/SE6 то это C350, а если на D22/SE7 то это C350L.
3. Если нет будильника и есть голосовой набор, то это C350, а если есть будильник, но нет голосового набора, то это C350L.
4. C350L чуть толще и тяжелее C350 за счёт более ёмкого аккумулятора.
2. Software / Программная часть
Касательно патчинга телефонов здесь будут рассматриваться в основном C350 и C350L, как самые распространённые. С упором на Motorola C350L, который был наиболее распространён на нашем рынке. Условно из 100% телефончиков похожих на Motorola C350 около 85% будут C350L, а остальные 15% — C350, C450, C550 и другие ещё более редкие модельки.
Перед внесением любых изменений в прошивку хорошим тоном будет сделать полный BackUp образа Flash-памяти телефона и отдельно BackUp калибровок. Сделать всё это можно следующими утилитами:
1. Программа Flash Terminal (подходит для снятия и залития Flash-образов): https://github.com/EXL/FlashTerminal/
2. Программа C350L_Backup: Скачать
3. Программа SeemXfer: Скачать
Подробно расписывать процесс снятия BackUp'а здесь не буду, так как в теме Бекапим наши телефоны и по соответствующим ссылкам всё подробно расписано. Рассматривать патчинг и обход защит будем на примерах с реальными прошивками, а не бинарными BackUp'ами.
2.1. Патчим Motorola C350
1. Скачиваем последнюю РСТ-прошивку C350_G_09.04.74R, например, по этой ссылке.
2. Распаковываем SHX-файл программой SBF-Recalc 1.2.9.1
3. Склеиваем CG0 и CG1 в один файл с помощью HEX-редактора или UNIX-like утилиты cat для удобного анализа в IDA:
Код
cat C350*CG0.smg C350*CG1.smg > C350_G_09.04.74R_FW.smg
4. Декриптуем файлы "C350*CG1.smg" и "C350_G_09.04.74R_FW.smg" убирая BlowFish утилитой fl_decr.exe из комплекта blowfish_flash_crypt.zip и сохраняя их как "C350*CG1.bin" и "C350_G_09.04.74R_FW.bin"
5. Загружаем в IDA Pro файл "C350_G_09.04.74R_FW.bin" со следующими параметрами, расставляем сегменты RAM и банки IRAM:
ROM: ROM start address: 0x00060000, Input file, Loading address: 0x00060000
RAM: Edit => Segments => Create segment...: RAM, 0x11000000-0x11100000
IRAM 1: Edit => Segments => Create segment...: IRAM 1, 0x01F93000-0x02000000
IRAM 2: Edit => Segments => Create segment...: IRAM 2, 0x01400000-0x01420000
Переходим в начало 0x00060000, там лежит 4-байтное число (жмакаем d несколько раз), это точка входа в прошивку, её адрес. Нажимаем g и начинаем анализ/патчинг.
6. Сделав патчи, которые нам требовались, переносим их в ванильную CG1, обязательно помня про смещение на 0xC8 для заголовка CG0, так как CG1 лежит на 0x000600C8. Поэтому у патчи на CG1 без CG0 из адреса нужно вычитать 0xC8. Подробно про работу в IDA Pro можно почитать в этой теме, а скачать базу данных с неполным разбором на функции можно здесь: C350_G_09.04.74R_FW.bin.idb.zip
7. Получив отпаченный бинарный код в CG1, криптуем его обратно утилитой fl_crypt.exe из комплекта blowfish_flash_crypt.zip
2.2. Патчим Motorola C350L
1. Скачиваем последнюю РСТ-прошивку R312ULS_G_09.10.82R, например, по этой ссылке.
2. Распаковываем SHX-файл программой SBF-Recalc 1.2.9.1
3. Склеиваем CG0 и CG1 в один файл с помощью HEX-редактора или UNIX-like утилиты cat для удобного анализа в IDA:
Код
cat R312*CG0.smg R312*CG1.smg > R312ULS_G_09.10.82R_FW.bin
4. Загружаем в IDA Pro файл "R312ULS_G_09.10.82R_FW.bin" со следующими параметрами, расставляем сегменты RAM и IRAM:
ROM: ROM start address: 0x10010000, Input file, Loading address: 0x10010000
RAM: Edit => Segments => Create segment...: RAM, 0x12000000-0x12200000
IRAM: Edit => Segments => Create segment...: IRAM, 0x03FF0000-0x04000000
Переходим в начало 0x10010000, там лежит 4-байтное число (жмакаем d несколько раз), это точка входа в прошивку, её адрес. Нажимаем g и начинаем анализ/патчинг.
5. Сделав патчи, которые нам требовались, переносим их в ванильную CG1, обязательно помня про смещение на 0xC8 для заголовка CG0, так как CG1 лежит на 0x100100C8. Поэтому у патчи на CG1 без CG0 из адреса нужно вычитать 0xC8. Подробно про работу в IDA Pro можно почитать в этой теме, а скачать базу данных с неполным разбором на функции можно здесь: R312ULS_G_09.10.82R_FW.bin.idb.zip
6. Сделав изменения в CG1, нам нужно обойти RSA, пропатчив кодовые группы CG0, CG18 следующим образом:
Для обхода был портирован метод снятия RSA на LTE с багом зеркалирования адресации, который был обнаружен Vilko.
2.3. Как прошить пропатченную прошивку в телефон?
Итак, у нас имеется пропатченная и закриптованна CG1 или CG0, CG1, CG18 с обходом RSA в случае Motorola C350L. Как прошить их обратно в телефон? Лучшим решением для этого была бы сборка SHX, но поскольку подобная утилита всё ещё в разработке, можно схитрить и воспользоваться трюком подмены кодовых групп на патченные при прошивке телефона в RSD Lite 3.8, вот как он работает:
1. Коннектим телефон к компу/виртуалке во Flash-режиме ("*", "#", "Красная трубка").
2. Запускаем RSD Lite и выбираем оригинальный SHX-файл прошивки.
3. Жмём Start и через секунду вынимаем кабель из телефона на стадии "Create Image File".
4. Программа разберёт SHX на кодовые группы SMG, которые будут лежать рядом с файлом прошивки.
5. Подменяем оригинальные SMG-файлы нашими патченными (имена должны совпадать!).
6. Снова коннектим телефон к компу/виртуалке и нажимаем Start.
7. Телефон прошивается, в конце могут идти ошибки чексумм, игнорируем их.
7.1. Для Motorola C350L нужно ещё чтобы при неправильном подсчёте чексумм в CG0 записалась точка входа в прошивку. Проще всего это сделав слив BackUp в C350L_Backup, поправив и залив обратно. Способ неудобный, поэтому лучше подождите решения со сборкой SHX-файлов.
Ура, наш телефон пропатчен!
3. Спасибо
- Vilko и Evy за взлом и обход BlowFish и RSA защит и теорию.
- motoprogger за полезные программы и теорию.