Разбираем прошивку шаг за шагом!

Версия для печати

Список форумов SAMSUNG-mobile.ru / Программирование для Samsung и реверсинг прошивок / Разбираем прошивку шаг за шагом!
На страницу Пред.  1, 2, 3, 4  След.
Показать: « Предыдущая тема :: Следующая тема »



Hexxx

Участник форума


Рейтинг: 100% (4 / 0)


В форуме с: 09.2004
Сообщения: 20
Откуда: Днепропетровск
Цитировать | Ответить

Формат команд скрипта такой:
00000000 mcc_command struc ; (sizeof=0X10)
00000000 CommandCode DCB ? ; enum mmc_commands
00000001 GraphicID DCB ?
00000002 DCB ? ; undefined
00000003 Visible DCB ?
00000004 Mode DCW ?
00000006 ConditionID DCW ? ; enum ConditionID
00000008 ScriptCommandToGoTo DCD ? ; offset (FFFFFFFF)
0000000C field_C DCD ?
00000010 mcc_command ends

События взял ваши:
FFFFFFFF ; enum ConditionID
FFFFFFFF ConditionID_0 EQU 0
FFFFFFFF CONDITIONAL EQU 1
FFFFFFFF KEY_C_PRESSED EQU 2
FFFFFFFF KEY_DOWN_UP EQU 4
FFFFFFFF KEY_DOWN_PRESSED EQU 5
FFFFFFFF KEY_LEFT_PRESSED EQU 6
FFFFFFFF KEY_RIGTH_PRESSED EQU 7
FFFFFFFF KEY_CALL_PRESSED EQU 8
FFFFFFFF KEY_ONOFF_PRESSED EQU 9

А вот опкоды уже мои.
FFFFFFFF ; enum mmc_commands
FFFFFFFF BACK_LIGHT_CONTROL EQU 0x1A
FFFFFFFF TYPE_1B EQU 0x1B
FFFFFFFF TYPE_1C EQU 0x1C
FFFFFFFF TYPE_1D EQU 0x1D
FFFFFFFF TYPE_1E EQU 0x1E
FFFFFFFF TYPE_1F EQU 0x1F
FFFFFFFF TYPE_20 EQU 0x20
FFFFFFFF SHOW_GRAPHICS EQU 0x31
FFFFFFFF SCREEN_COMMAND EQU 0x32
FFFFFFFF GENERATE_TONE EQU 0x3E
FFFFFFFF RETURN EQU 0x4F
FFFFFFFF BREAK_EXECUTION EQU 0x50
FFFFFFFF TYPE_91 EQU 0x91
FFFFFFFF TYPE_C8 EQU 0xC8

Составляем базу...


03.09.2004 02:24

OfflineПрофайл | Отправить л/с | ICQ


Hexxx

Участник форума


Рейтинг: 100% (4 / 0)


В форуме с: 09.2004
Сообщения: 20
Откуда: Днепропетровск
Цитировать | Ответить

Кстати типы TYPE_1B-TYPE_20 это разнообразые CALL/JMP/JCC в скриптах есть целые ветвления.

_________________
Ковыряю X10DXWK3


03.09.2004 02:34

OfflineПрофайл | Отправить л/с | ICQ


AlexeyK

Признанный телефонист


Рейтинг: 93% (108 / 8)



В форуме с: 07.2004
Сообщения: 517
Откуда: г. Александров
Цитировать | Ответить

Вот почти всё, что пока удалось накопать.

с8 - очистка экрана, подготовка. Параметров нет

A9 - Вывод заголовка
1 - суб код
2,3 - индекс заголовка
5 - код режима ?

61 - описание группового меню (горизонтального)
Описание начинается и заканчивается этим кодом


60 - описание меню
1 - суб код
2,3 индекс первой строки меню (используется не всегда)
5 - количество пунктов в меню
6 и 7 коды управления(создания) меню
13 - количество используемых пунктов (должно быть меньше 5-го бина)

Обычные меню
51 - первый пункт в меню
52 - второй пункт в меню
53 - последний пункт в меню
1 - суб код
3 - номер пункта, 0 если не выводить
6,7 - индекс перевой строки или смысловое описание меню (как бы заголовок)
8,9,10,11 - адрес перехода при выборе пункта
12,13 - индекс текста строки меню или строки прокрутки меню

меню с множественными установками (checked)
54 - первый пункт в меню
55 - второй пункт в меню
56 - последний пункт в меню
1 - суб код
3 - регистр обмена
5 - параметр пункта
6,7 - индекс смыслового описания меню (как бы заголовок)
8,9,10,11 - адрес перехода при выборе пункта
12,13 - индекс текста строки меню или строки прокрутки меню

меню с выбором (option)
57 - первый пункт в меню
58 - второй пункт в меню
59 - последний пункт в меню
1 - суб код
3 - регистр обмена
5 - параметр пункта
6,7 - индекс смыслового описания меню (как бы заголовок)
8,9,10,11 - адрес перехода при выборе пункта
12,13 - индекс текста строки меню или строки прокрутки меню

80 - описание меню (пример - 009AFF8C для DC2) с произвольным сочетанием параметров
1 - суб код
2,3 индекс первой строки меню (используется не всегда)

85 - пока неизвестно связано с 80
86 - продолжение описания меню 80
87 - описание пунктов меню
1 - номер пункта
2,3 - ?
4,5 - ?
6,7 - индекс текста строки меню или строки прокрутки меню

88 - завершение описания меню
96 - начало блока обработки меню
{перечисляются условные переходы с суб кодами 09 для клавиш и 12 для пунктов меню}

8с - начало и конец произвольного меню

5 - количество пунктов в меню
6 и 7 коды управления(создания) меню
13 - количество используемых пунктов (должно быть меньше 5-го бина)

74 - дополнительное описание меню переходы.
1 - суб код
3 - количество пунктов в меню

73 - описание пунктов меню переходы.
1 - суб код
8,9,10,11 - адрес перехода при выборе пункта

4D - завершение описания меню
1 - тип возврата (01 полный, 02 - из подменю, ...)

11 - условный переход 'если' (возможно 'если нет')
1D - условный переход 'если'
1E - условный переход 'иначе если'
1F - условный переход 'иначе'
1 - суб код (09 - опрос клавиатуры, 08,03 - сравнение регистров)
3 - номер регистра (или памяти) для клавиатуры управления 01
5 - параметр или регистр
для клавиатуры ( 01 - ?
02 - с
03 - ?
04 - вверх
05 - вниз
06 - влево
07 - вправо
08 - вызов
09 - вкл/выкл
0E - левая софт
0F - правая софт
10 - боковая вверх
13 - боковая вниз
)
8,9,10,11 - адрес перехода при выборе пункта

20 - запуск подпрограммы gosub

4F - возвращение из подпрограммы return

21 - безусловный переход
8,9,10,11 - адрес перехода при выборе пункта

B0 - описание меню по фиксированной базе
1 - суб код
2,3 - индекс первой строки меню
6 и 7 - коды управления(создания) меню

B1, B2 - ссылка на алгоритм обработки меню
1 - суб код

B5 - идет после С8 - означает меню со списком. Параметров нет, требует B0, B1 или B2

E8 - идет после С8 - выбор по значениям регистров - ?

1С - выполнение действия (куча параметров) - ?

31 - вывод изображения

E9 - вызов именной процедуры (имя хранится в бине по указанному адресу) - возможно случайное совпадение

50 - пустой код (резервирование места) или пауза (HOLT)

3B - задержка

80 - Вывод текста в заголовок по индексу
1- суб код
2,3 - индекс текстового ресурса.

6С - очистка экрана (выделение памяти)
3 - пока не известно. какой то параметр

91 - вывод информационного окна - информация
92 - вывод информационного окна - Вопрос
1 - суб код
3 - ?
5 - ?
6,7 - индекс текстового ресурса
13 - ?

D6 - вродебы вывод графического изображения




----------------------------------------------------------
Сочетания кодов.
----------------------------------------------------------

1C 13 00 0B 00 01 - включить IRDA
1С 13 00 0B 00 00 - выключить IRDA

1D 05 00 5C 00 01 - перейти если нет записей в исходящих, входящих и пропущеных звонках
1D 05 00 5D 00 01 - пкркход если нет записей в исходяших звонках
1D 05 00 5E 00 01 - перейти если нет записей во входящих звонках
1D 05 00 5F 00 01 - перейти если нет записей в пропуженых вызововах

Может в чем не прав, поправте

_________________
Patch & Hex редактор, ARM Debuger & Compiler: http://forum.samsung-mobile.ru/viewtopic.php?t=22518


03.09.2004 08:15

OfflineПрофайл | Отправить л/с | ICQ


Hexxx

Участник форума


Рейтинг: 100% (4 / 0)


В форуме с: 09.2004
Сообщения: 20
Откуда: Днепропетровск
Цитировать | Ответить

Я считаю что вот так
0x50 BREAK_EXECUTION см. mcc_aoc_exit
0x3E GENERATE_TONE
0x4D RET_MENU см. mcc_aoc_retmenu1

В общем я считаю что надо начать с коротких скриптов. Т.к. они имеют осмысленное имя.

Например для типа 0x2E см. mcc_aoc_softkey_disp_for_calltimers или mcc_aoc_softkey_disp_for_lifetime_calls.

И особенно это касается типа 0x1C, т.к. есть уже куча проименованых действий в частности:
mcc_aoc_menu_durcall_time_store
mcc_aoc_menu_lastcall_on_store
mcc_sublcd_off
и т.д.


03.09.2004 10:17

OfflineПрофайл | Отправить л/с | ICQ


Hexxx

Участник форума


Рейтинг: 100% (4 / 0)


В форуме с: 09.2004
Сообщения: 20
Откуда: Днепропетровск
Цитировать | Ответить

Все таки ввести единую систему для описания скриптовых команд. Например используя вот такую структуру:

struct mcc_command
{
CommandCode: byte; //код комантды
Param0: byte;
Dummy: byte; // похоже никогда не используется
Param1: byte;
Param2: word;
Param3: word;
ScriptCommandToGoTo: dword; //адрес перехода
Flags:dword;
};

т.е. к примеру описание команды DISPLAY_ASK_MESSAGE
CommandCode: 0x92
Param0 - unknown
Param1 - unknown
Param2 - unknown
Param3 - ID текстового ресурса
ScriptCommandToGoTo - N/A
Flags - unknown

То есть заводите такую структуру в IDA и мы больше никогда не путаемся в полях/смещениях/названиях.

А то вот это
"1 - суб код
3 - ?
5 - ?
6,7 - индекс текстового ресурса
13 - ? "
глаза режет.

_________________
Ковыряю X10DXWK3


03.09.2004 11:50

OfflineПрофайл | Отправить л/с | ICQ


Hexxx

Участник форума


Рейтинг: 100% (4 / 0)


В форуме с: 09.2004
Сообщения: 20
Откуда: Днепропетровск
Цитировать | Ответить

Я кажется понял!!! Мобила выполняет скрипт, а каждой команде (у которой есть опкод) соответсвует процедура в коде!!! Т.е. к примеру

команда:
REDUCE_MENU_STACK:
CommandCode 0x4B
Param0 - SizeToReduce
Param1 - N/A
Param2 - N/A
Param3 - N/A
ScriptCommandToGoTo - N/A
Flags - unknown

Ей соответсвует функция MCFN_MCC_REDUCE_MENU_STACK!!! То есть можно полностью узнать набор команд скрипта просмотрев все MCFN_MCC_ функции.

см. mcc_sms_reduce_menustack_then_go

Посмотрев на код MCFN_MCC_DISPLAY() я пришел к выводу:
R0 - это указатель на структуру mcc_command. Дальше в коде MCFN_MCC_DISPLAY() используются члены этой структуры. Поэтому можно уже более четко определить структуру mcc_command:
struct mcc_command
{
CommandCode: byte; //код команды
Param0: byte;
Param1: word;
Param2: word;
Param3: word;
ScriptCommandToGoTo: dword; //адрес перехода
Flags:word;
Flags2:word;
};

и даже еще круче. R0 - указатель на скриптовую команду. В конце каждой MCFN_MCC_ он увеличивается на 0x10 (это размер структуры mcc_command)т.е. переходит на следующую!
ROM:00087A1A LDR R0, [R7]
ROM:00087A1C ADD R0, #0x10
ROM:00087A1E STR R0, [R7]


03.09.2004 12:04

OfflineПрофайл | Отправить л/с | ICQ


Hexxx

Участник форума


Рейтинг: 100% (4 / 0)


В форуме с: 09.2004
Сообщения: 20
Откуда: Днепропетровск
Цитировать | Ответить

Многие товарищи которые на самом деле нам не товарищи утверждаю что типа код есть только в первых 4Мб прошивки. А исследования показывают что код то существует причем начиная с A06554. А также существует какой-то (наверное)системный сегмент по адресу FFFF0000. Далее по адресу A227DC начинается таблица MCFN. Т.е. список функций обработчиков MCC. Функция MCFN_MCC_IF находится в этой таблице как раз под номером 0x1D. Т.е. предположения оказались правильными.

P.S. Шо "опытные телефонисты", сказать нечего?

в K2 этот код найти можно по адресу AAD668.


06.09.2004 11:06

OfflineПрофайл | Отправить л/с | ICQ


AlexeyK

Признанный телефонист


Рейтинг: 93% (108 / 8)



В форуме с: 07.2004
Сообщения: 517
Откуда: г. Александров
Цитировать | Ответить

Hexxx, я не "опытный телефонист", и у меня два вопроса.
Для какой прошивки указаны адреса и где вней находится сегмент FFFF0000. Я просто уточняю, мне это тоже интересно.

_________________
Patch & Hex редактор, ARM Debuger & Compiler: http://forum.samsung-mobile.ru/viewtopic.php?t=22518


06.09.2004 20:34

OfflineПрофайл | Отправить л/с | ICQ


Hexxx

Участник форума


Рейтинг: 100% (4 / 0)


В форуме с: 09.2004
Сообщения: 20
Откуда: Днепропетровск
Цитировать | Ответить

да опечатался. там 0xFFA00000. Все мои исследования идут на K3.


06.09.2004 23:39

OfflineПрофайл | Отправить л/с | ICQ


Javer

Авторитетный телефонист


Рейтинг: 94% (122 / 8)



В форуме с: 05.2004
Сообщения: 317
Откуда: Киев, Украина
Цитировать | Ответить

Я сегодняшний день тоже решил посвятить изучению меню. Результатом моих исследований стало написание что-то вроде декомпилятора MCC скрипта в некое подобие скрипта. Прога знает все команды MCC (всего их 245, в прошивке используется реально меньше), все параметры команд и их количество, но пока не понимает назначение всех параметров.
С помощью этой проги я декомпилировал все команды меню в прошивке X100XEDG1. Архив с получившимся скриптом выложен по следующей ссылке: http://javer.allsgh.net/x100g1mcc.rar
Осталось только определить назначение параметров всех команд, и можно будет написать компилятор из некоего подобия скрипта в MCC-код прошивки телефона.
Не оставим в прошивке ничего, что нельзя было бы отредактировать !

_________________
Редактор ресурсов для Cxxx/Dxxx/Exxx/Sxxx/Xxxx - http://javer.sgh.ru/resman.php
Плагины SGHFS и SGHMMF для Total Commander - http://javer.sgh.ru/sghfs.php


12.09.2004 23:26

OfflineПрофайл | Отправить л/с | WWW


Vadiks
Человек-гора

Авторитетный телефонист


Рейтинг: 95% (114 / 6)



В форуме с: 01.2004
Сообщения: 429
Откуда: Красноярск
Цитировать | Ответить

Ну и я внесу свою лепту в это дело.

Вот, как мне кажется, полное описание некоторых структур:

0000 mcc_StruID_1C(command) struc ; (sizeof=0x10)
0000 ID DCB
0001 ProcID DCB
0002 Jmp_Index DCW
0004 Param1 DCW
0006 Param2 DCW
0008 field_8 DCD (не используется)
000C field_C DCD (не используется)
0010 mcc_StruID_1C(command) ends

0000 mcc_StruID_1D(if_JMP) struc ; (sizeof=0x10)
0000 ID DCB
0001 ProcID DCB
0002 Jmp_Index DCW
0004 Param1 DCW
0006 field_6 DCB (не используется???)
0007 field_7 DCB (не используется???)
0008 Addr DCD ; offset (00000000)
000C field_C DCD (не используется)
0010 mcc_StruID_1D(if_JMP) ends
(аналогично для других структур переходов)

где

Process ID: Prefix Description
0x00 cal call
0x01 net
0x02 sec security
0x03 ss
0x04 acc
0x05 dir
0x06 pap
0x07 cb
0x08 sms
0x09 ed
0x0A set settings
0x0B aoc
0x0C st
0x0D int
0x0E at
0x0F wap
0x10
0x11 srg
0x12 org organiser
0x13 smtp
0x14
0x15 mms
0x16 java

Есть в прошивке процедурки проименованные типа xxx0_0init, xxx0_1bs, xxx0_2rp, xxx0_3ip, xxx0_4if, xxx0_5task где вместо xxx стоят префиксы из выше указанной таблицы.

Так вот task соответствует MCC_1C и Jmp_Index в структуре указывает какую подпроцедуру выполнять внутри xxx0_5task.
Аналогично для других процедур.


13.09.2004 15:52

OfflineПрофайл | Отправить л/с | WWW


Javer

Авторитетный телефонист


Рейтинг: 94% (122 / 8)



В форуме с: 05.2004
Сообщения: 317
Откуда: Киев, Украина
Цитировать | Ответить

Я тут начал составлять таблицу всех команд MCC, их описания и параметров. Пока вот что у меня есть на сегодняшний день: http://javer.allsgh.net/mcc.rar
Там где стоит прочерк - значит данный параметр не используется этой командой вообще, по крайней мере в рамках прошивки X100XEDG1. В качестве структуры для любой комадны взята структура, предложенная Hexxx.

_________________
Редактор ресурсов для Cxxx/Dxxx/Exxx/Sxxx/Xxxx - http://javer.sgh.ru/resman.php
Плагины SGHFS и SGHMMF для Total Commander - http://javer.sgh.ru/sghfs.php


14.09.2004 23:09

OfflineПрофайл | Отправить л/с | WWW


Hexxxx

Признанный телефонист


Рейтинг: 66% (44 / 23)



В форуме с: 09.2004
Сообщения: 508
Откуда: Днепропетровск
Цитировать | Ответить

Vadiks и Javer зайдите ко мне в аську я много чего про MCC расскажу.

P.S. Вообще-то у мя ник Hex. Но якась зараза заняла уже его. А Hexxx заблокировали. Но мне иксов не жалко. Улыбка

_________________
Мое предназначение - Реверсинг


14.09.2004 23:36

OfflineПрофайл | Отправить л/с | WWW | ICQ


Hexxxx

Признанный телефонист


Рейтинг: 66% (44 / 23)



В форуме с: 09.2004
Сообщения: 508
Откуда: Днепропетровск
Цитировать | Ответить

Нашел таблицы:
это Param0 для MCFN_MCC_ELSEIF
ROM:0054E0CC MCC_IF_Conditions DCD cal0_4if+1 ; 0
ROM:0054E0CC ; DATA XREF: MCFN_MCC_MENU:off_866C0o
ROM:0054E0CC ; MCFN_MCC_CNAVIG:off_86CE0o ...
ROM:0054E0CC DCD net0_4if+1 ; 1
ROM:0054E0CC DCD sec0_4if+1 ; 2
ROM:0054E0CC DCD ss0_4if+1 ; 3
ROM:0054E0CC DCD acc0_4if+1 ; 4
ROM:0054E0CC DCD dir0_4if+1 ; 5
ROM:0054E0CC DCD pap0_4if+1 ; 6
ROM:0054E0CC DCD cb0_4if+1 ; 7
ROM:0054E0CC DCD sms0_4if+1 ; 8
ROM:0054E0CC DCD ed0_4if+1 ; 9
ROM:0054E0CC DCD set0_4if+1 ; 10
ROM:0054E0CC DCD aoc0_4if+1 ; 11
ROM:0054E0CC DCD st0_4if+1 ; 12
ROM:0054E0CC DCD int0_4if+1 ; 13
ROM:0054E0CC DCD at0_4if+1 ; 14
ROM:0054E0CC DCD wap0_4if+1 ; 15
ROM:0054E0CC DCD j_Load__FLASH__Base ; 16
ROM:0054E0CC DCD srg0_4if+1 ; 17
ROM:0054E0CC DCD org0_4if+1 ; 18
ROM:0054E0CC DCD smtp0_4if+1 ; 19
ROM:0054E0CC DCD j_Load__FLASH__Base ; 20
ROM:0054E0CC DCD mms0_4if+1 ; 21
ROM:0054E0CC DCD java0_4if+1 ; 22

это Param0 для MCFN_MCC_TASK:
ROM:0054E128 TasksTable DCD cal0_5task+1 ; DATA XREF: MCFN_MCC_MENU:off_866A8o
ROM:0054E128 ; MCFN_MCC_TASK:off_87654o ...
ROM:0054E12C DCD net0_5task+1
ROM:0054E130 DCD sec0_5task+1
ROM:0054E134 DCD ss0_5task+1
ROM:0054E138 DCD acc0_5task+1
ROM:0054E13C DCD dir0_5task+1
ROM:0054E140 DCD pap0_5task+1
ROM:0054E144 DCD cb0_5task+1
ROM:0054E148 DCD sms0_5task+1
ROM:0054E14C DCD ed0_5task+1
ROM:0054E150 DCD set0_5task+1
ROM:0054E154 DCD aoc0_5task+1
ROM:0054E158 DCD st0_5task+1
ROM:0054E15C DCD int0_5task+1
ROM:0054E160 DCD at0_5task+1
ROM:0054E164 DCD wap0_5task+1
ROM:0054E168 DCD j_Load__FLASH__Base
ROM:0054E16C DCD srg0_5task+1
ROM:0054E170 DCD org0_5task+1
ROM:0054E174 DCD smtp0_5task+1
ROM:0054E178 DCD j_Load__FLASH__Base
ROM:0054E17C DCD mms0_5task+1
ROM:0054E180 DCD java0_5task+1

ну и там дальше еще таблицы:
ROM:0054E184 ErrorTables
ROM:0054E070 IP_table
ROM:0054E014 ResponcesTable
ROM:0054DFB8 BackResponcesTable

j_Load__FLASH__Base - это перезагрузка Улыбка

_________________
Мое предназначение - Реверсинг


18.09.2004 00:14

OfflineПрофайл | Отправить л/с | WWW | ICQ


LinFor
Hex-маньяк

Признанный телефонист


Рейтинг: 99% (139 / 1)



В форуме с: 09.2003
Сообщения: 998
Откуда: г.Новомосковск, Тульская обл.
Цитировать | Ответить

Люди, если кто понял - скажите, плз, что вызывается при звонке входящем. По названию пробовал смотреть - нихрена не понял. Хочу попробовать сделать блэклист.
А ещё просьба человека, понимающего mmc-скрипты отозваться ко мне в мыло LinFor at aport2000.ru. Пару небольших структур разобрать бы.


19.09.2004 19:06

OfflineПрофайл | Отправить л/с | WWW | ICQ

Список форумов SAMSUNG-mobile.ru / Программирование для Samsung и реверсинг прошивок
На страницу Пред.  1, 2, 3, 4  След.

Переход в другой форум
Страница 2 из 4
Форум Samung-mobile.ru — сотовые телефоны Samsung