Друзья, есть вопросы. Занимаюсь прошивкой для D500. В процессе этого начинается складываться впечатление, что все прошивки самсунга построены по одному принципу. Но я другие не ковырял, поэтому не уверен... Я начал этим заниматься практически с нуля(по долгу службы). Поэтому если какие-то вопросы покажутся совсем нелепыми, просьба камнями не закидывать... Я спрашивал(всем наверное известного) Hex'a на его xtinreversingforum. Он немного просветил меня(за что ему огромное спасибо), но видимо сильно занят. Поэтому решил спросить здесь. Надеюсь кто-нибудь найдет время и ответит хоть на некоторые из моих вопросв. Сразу скажу, что не требуется каких-то примеров кода и т.п. Все вопросы носят больше теоретический характер и касаются самого процесса работы телефона. Вопросов много, попробую их внятно сформулировать. Думаю, что ответы на них будет полезно услышать не только мне, но и многим новичкам. Еще раз скажу, что спрашиваю в контексте D500, но вероятно можно провести аналогию с другими телефонами.
1.Из телефона можно слить 512 блоков. Т.е. максимальный адрес примерно 12000000 + длина последнего блока(8 кбайт). Тогда откуда берутся такие адреса:
2C 49 LDR R1, =0x18CA4D00 ; Load from Memory.
Это что-то типа ОЗУ? Есть простой и внятный способ посмотреть эту область?
2.что такое mcc(например функции mcfn_mcc_*********). Ну т.е. я понимаю примерно что это за функции. А, так сазать, "научное" объяснение?
3. Вообще детский вопрос: что есть EEPROM? Это область памяти, где хранятся настройки телефона? Что-то вроде ПЗУ?
существуют различные функции типа ***write_eeprom*** и ***read_eeprom*** - через них сохраняются все настройки?
4. Вопрос из простого любопытства:
В D500 есть такая "переменная" mcc_proc. Может в других самсунгах тоже есть. Я так понял, что это что-то типа таблицы функций mcc. Вид у неё такой:
ROM:006519F3 00 DCB 0 ; mcc_proc
ROM:006519F4 CODE32
ROM:006519F4 7D 7D 40 10 DCD 0x10407D7D ; MCFN_MCC_ZERO_S
ROM:006519F8 BC 1E 65 10 DCD 0x10651EBC
ROM:006519FC C1 79 40 10 DCD 0x104079C1 ; MCFN_MCC_START
ROM:00651A00 C7 1E 65 10 DCD 0x10651EC7
ROM:00651A04 45 EA 7A 10 DCD 0x107AEA45 ; MCFN_MCC_DUMMY
ROM:00651A08 D1 1E 65 10 DCD 0x10651ED1
ROM:00651A0C 4D 74 40 10 DCD 0x1040744D ;MCFN_MCC_LONGFILTER
ROM:00651A10 DB 1E 65 10 DCD 0x10651EDB
ROM:00651A14 95 6B 40 10 DCD 0x10406B95 ; MCFN_MCC_EBUF
ROM:00651A18 EA 1E 65 10 DCD 0x10651EEA
Первый адрес - адрес функции. А каждый второй адрес:
ROM:00651EC7 4D DCB 0x4D ; M
ROM:00651EC8 43 DCB 0x43 ; C
ROM:00651EC9 43 DCB 0x43 ; C
ROM:00651ECA 5F DCB 0x5F ; _
ROM:00651ECB 53 DCB 0x53 ; S
ROM:00651ECC 54 DCB 0x54 ; T
ROM:00651ECD 41 DCB 0x41 ; A
ROM:00651ECE 52 DCB 0x52 ; R
ROM:00651ECF 54 DCB 0x54 ; T
ROM:00651ED0 00 DCB 0
ROM:00651ED1 4D DCB 0x4D ; M
ROM:00651ED2 43 DCB 0x43 ; C
ROM:00651ED3 43 DCB 0x43 ; C
ROM:00651ED4 5F DCB 0x5F
ROM:00651ED5 44 DCB 0x44 ; D
ROM:00651ED6 55 DCB 0x55 ; U
ROM:00651ED7 4D DCB 0x4D ; M
ROM:00651ED8 4D DCB 0x4D ; M
ROM:00651ED9 59 DCB 0x59 ; Y
ROM:00651EDA 00 DCB 0
Т.е. названия этих самых функций... Вопрос: для чего? Есть какая-то потребность в этом. Или это просто для удобства ковыряния?
5. В процессе работы нарвался на функцию mcfn_mcc_bs. Она в некоей облати памяти выбирает адрес, в зависимости от каких-то параметров. Эта область не именована в map-файле, но представляет что-то типа таблицы функций вида:
Т.е. идет наборами. Исть группа названий (cal,net,sec,ss и т.д.). А есть окончание bs. Помимо 1bs, есть еще окончания 2rp, 3ip, 4if, 5task, 6menu. Кто что может про них сказать. В каких ситуациях они используются? Если кто что знает о названиях:
cal0
net0
sec0
ss0
acc0
dir0
pap0
cb0
sms0
ed0
set0
aoc0
st0
int0
at0
wap0
srg0
org0
smtp0
mms0
java0
email0
camera0
camcorder0
mplayer0
bt0
syncmlm0
fbox0
messages0
поделитесь знаниями. Есть говорящие названия типа java0. А есть и нечего не значащие, типа srg0.
SiNoptik, смотри http://forum.samsung-mobile.ru:/viewtopic.php?p=216504#216504 ...
Там есть вложенный файлик, почитай его. Естественно, там много лишнего, да и не про D500, но так или иначе есть ответы почти на все твои вопросы ()... Если что не понятно - обращайся
_________________ X100, X700 + 512 -=- Нет ничего невозможного!
Смотрел эту тему, но файлика не заметил. Спасибо, посмотрю. Рабочий день закончился уже, ухожу. Но ответы всё равно принимаются. Может еще что-нибудь узнаем. Помимо того, что в этом файле... Будет очень интересно узнать!
Смотрел эту тему, но файлика не заметил. Спасибо, посмотрю. Рабочий день закончился уже, ухожу. Но ответы всё равно принимаются. Может еще что-нибудь узнаем. Помимо того, что в этом файле... Будет очень интересно узнать!
вложенный файлик называется "Создание патча" от AlexeyK
_________________ Реверсерами не рождаются... - реверсерами становятся!!!!!!!
1.Из телефона можно слить 512 блоков. Т.е. максимальный адрес примерно 12000000 + длина последнего блока(8 кбайт). Тогда откуда берутся такие адреса:
2C 49 LDR R1, =0x18CA4D00 ; Load from Memory.
Это что-то типа ОЗУ? Есть простой и внятный способ посмотреть эту область?
Это ОЗУ. Начинается с 0x18000000. Способы просмотреть.... С этим труднее. Для Х100 я делал хак-патчем (выбрасывал на раб.стол), а на непатченном Д500... Скорее всего нет...
Цитата:
2.что такое mcc(например функции mcfn_mcc_*********). Ну т.е. я понимаю примерно что это за функции. А, так сазать, "научное" объяснение?
Тут я тебе прямо скажу- многие товарищи (даже не знаю кто первым так ЭТО назвал) называют это скриптами.... А вот у меня стойкое мнение уже давно назрело, что это МАКРОСЫ языка С ! Может я и не прав, но очень уж подозрительно все выглядит (избыточность кода, порой сомнительные процедурки и т.п.) Вобщем, они управляют всей мобилой(что запустить, какую менюшку открыть и т.п) считай- костяк прошивки.
Цитата:
3. Вообще детский вопрос: что есть EEPROM? Это область памяти, где хранятся настройки телефона? Что-то вроде ПЗУ?
существуют различные функции типа ***write_eeprom*** и ***read_eeprom*** - через них сохраняются все настройки?
На самом деле, детский вопрос
Цитата:
4. Вопрос из простого любопытства:
В D500 есть такая "переменная" mcc_proc. Может в других самсунгах тоже есть. Я так понял, что это что-то типа таблицы функций mcc. Вид у неё такой:....
Т.е. названия этих самых функций... Вопрос: для чего? Есть какая-то потребность в этом. Или это просто для удобства ковыряния?
Все правильно, но кроме последнего Для удобства ковыряния Самсунг бы выкладывала исходники прошивки
А насчет названий mcc... Все было описано в ветке про Х100- тут никаких (почти) изменений нету...
2.что такое mcc(например функции mcfn_mcc_*********). Ну т.е. я понимаю примерно что это за функции. А, так сазать, "научное" объяснение?
Тут я тебе прямо скажу- многие товарищи (даже не знаю кто первым так ЭТО назвал) называют это скриптами.... А вот у меня стойкое мнение уже давно назрело, что это МАКРОСЫ языка С ! Может я и не прав, но очень уж подозрительно все выглядит (избыточность кода, порой сомнительные процедурки и т.п.) Вобщем, они управляют всей мобилой(что запустить, какую менюшку открыть и т.п) считай- костяк прошивки.
Скорее всего действительно макросы. от себя могу добавить, что большинство из них только заполняют разные структуры данных и запускают системные события. МСС оканчивающиеся на _S - это обработчики системных событий. Например в MCC_EDIT_START_S происходит обработка следующих событий
7019 - APPI_EDP_INIT_EDITOR_CNF (конфигурирование поля ввода)
701A - APPI_EDP_INIT_EDITOR_ERR (закрытие всех окон редактирования)
7053 - APPI_EDP_KEY_INFO_IND (ввод в буфер ввода EditString цифровых символов 1-9, 0, *, # по кодам 1-12 соответственно из gv_DigitValue при gv_KeyInfo=3)
3. Вообще детский вопрос: что есть EEPROM? Это область памяти, где хранятся настройки телефона? Что-то вроде ПЗУ?
существуют различные функции типа ***write_eeprom*** и ***read_eeprom*** - через них сохраняются все настройки?
насколько я понял эти функции работают напрмую с EEPROM, но фокус в том, что при сохранении данных туда, они записываются в разные области. Для чего это сделано можно только гадать, но это факт. Нет фиксированных адресов для хранения параметров. В прошивке для сохранения и загрузки параметров используются hfd2_30SaveBlockNameInRamImage и hfd2_31ReadBlockNameInRamImage, которые копируют блок EEPROM в оперативку а после изменения параметров записывают обратно. В R0 передаётся идентификатор блока
И еще В Д500 установлен LittleArm процессор. Что это значит? Ничего хорошего... Все адреса/ссылки на ресурсы представлены в обратном коде.... (Ужас подумать, но такой тип процессора установлен в С100 ). Честно говоря, но я думал (судя по скорости работы С100 и Х100), что такой тип процессора морально устарел... Видимо нет... В принципе, это тоже АРМ, но! То, что в Х100 было как 1234 в Д500 стало как 3412! И это только цветочки (структура ldrh)! Самое главное- ResMan не работает нормально с такими процессорами Вроде как Javer обещал к концу октября представить ResMan для LittleArm, но проблема в другом- визуально определить, что это-код, а зто- что-то другое, очень тяжело... И, кстати, это коснулось и mcc "скриптов". Теперь там (в Д500) адреса тоже перевернуты! И не только адреса! К примеру- в Х100, запустить 9-ю ветку 5-го скрипта (ну, к примеру): 1c05 0009 ,а в Д500: 1c05 0900. Без ста грамм не разберешься!
Абрам, привыкнешь. в самом деле разница не очень большая. Поддержка little endian в resman, насколько знаю, практически реализована. Между C100 и D500 целая пропасть, если в первом ARM7 (до 70 МГц), то во втором ARM9 (до 200 МГц плюс расширенный набор команд). Например, IDA 4.5 вообше отказалась местами реверсить код
А я, по правде говоря, даже не удивился тому, что байты перевёрнуты. Подумал, что обычное дело. Наверное, если полезу в какой-нибудь с100, тоже буду страдать... А по поводу ответов... Отличные ответы! Спасибо. До некоторых вещей действительно очень сложно додуматься самому. Мне поначалу казалось, что эту прошивку создал какой-то внеземной разум... А по поводу EEPROM: действительно странно, что это так происходит. И не совсем понятно кому и зачем это нужно. Почему бы не записывать все эти данные в одно и тоже место. Ну, в крайнем случае, в 2 разных блока, чередуя их. Кстати, моя задача как раз и заключается в том, что бы найти место где происходит генерация адреса, по которому и будет сохранен блок с настройками. Длина такого блока для D500 равна 71B(вроде как). Может, кто-нибудь знает, как называется переменная, которая указывает на адрес начала такого блока? В частности, интересует процесс сохранения приветственного сообщения(greeting message)...
AlexeyK, а более подробная информация об этом процессе есть? Т.е. как это происходит, когда. Где берется адрес этого блока? В какой переменной хранится? И т.е. при сохрании одного из параметров, входящиго в этот блок, автоматом происходит сохраниние всего блока параметров?
блок грузиться и сохраняется целиком. Чтоб узнать адреса надо реверсить эти функции, я пытался, но потом бросил это занятие. переменной не знаю, но в прошивке есть таблица по которой выбирается толи маска толи идентификатор блока. в Дампе флеш есть много идентификаторов которые передаются функциям в R0, коды типа 00000F01, 00000910.
Ну как так! Что же это происходит! Куда всё делось! Модераторы! Можно всё вернуть обратно? Даже личные сообщения все пропали! Там столько инфы было важной...