Jump to content
Old Phone Forum
  • Login

    You are currently not logged in to the forum.

    To comment, upload files, subscribe to answers - you need to login.

Как найти адрес того или иного меню


Recommended Posts

Чё-то мне лень искать адреса... да и времени особо нет...

Поэтому: "Хочешь накормить человека - дай ему рыбу, хочешь чтоб он никогда не голодал - дай ему сеть."

 

Вот и я хочу дать вам своеобразный "невод" - небольшую инструкцию "Как найти адрес того или иного меню"

 

Spoiler

Что для этого нужно?

1. Естественно нужен телефон.

2. Он должен быть прошит, установлен патч "CGSN"

3. Вам нужна прога BinEdit (где скачать и кому сказать за неё спасибо, надеюсь, знаете :ak: )

4. Комплектный (сквозной) шнурок

Ну и пару минут свободного времени... :)

 

Итак, наши действия:

 

Подключаем телефон к компу в режиме модема (PC Studio)

 

Запускаем BinEdit

 

Открываем в BinEdit нашу прошивку

 

Запускаем встроенную в BinEdit терминалку:

1.png

 

Когда окно откроется, жмём на кнопку для подключения к телефону:

2.png

 

Когда телефон подключится - внизу, на статус-баре появится надпись "Подключен" и модель нашего телефона:

3.png

 

Если телефон не подключился - в опциях необходимо выбрать правильный COM-порт, на этом конкретно не останавливаюсь, думаю проблем нет...

 

Так, ладно, телефон подключен, что же тут делать?!

Вот тут нужно почитать описание команд CGSN-патча, в данном случае описание выглядит так:

AT+CGSN? - выдаётся расширенная (многострочная) справка по всем командам.

 

AT+CGSN=0,"AAAAAAAA","LLLL"

Читает массив байт с адреса AAAAAAAA, длинной LLLL.

Если L больше 100hex - выдаст сообщение об ошибке.

Попытка чтения за пределами ОЗУ - ребут.

 

AT+CGSN=1,"AAAAAAAA","WWWWWW..."

Запись массива байт WWWWWW по адресу AAAAAAAA

Попытка записи за пределами ОЗУ - ребут.

 

AT+CGSN=2,"LLLLLLLL"

Запрос памяти размером L через RtkGetMemory. Вернёт начало свободного куска.

Правда, при попытках запроса более 60кб мобила вешается (не выдавая ошибку).

 

AT+CGSN=3,"AAAAAAAA"

Освобождение ранее выданной памяти (RtkReleaseMemory).

AAAAAAAA - это то значение которое ранее было выдано в CGSN=2.

Повторная попытка освободить уже освобождённую память приведёт к ребуту.

 

AT+CGSN=4,"XXXXXXXX","1234567811111111...CCCCCCCC..."

запуск кода с адреса XXXXXXXX с параметрами R0=12345678,R1=11111111,...,R12=CCCCCCCC

задаются все регистры с R0 по R12. SP,LR,PC - игнорируются.

Регистры передаются в виде LitteEndian.

Регистры передаются последовательно - т.е. если надо например только R12

передать - то надо передавать и прешествующие - R0-R11.

Возврат - 1234567811111111...CCCCCCCC - все R-регистры R0-R12

 

Используется это так: по CGSN=2 получаем память, пишем туда по CGSN=1 исполняемый код,

потом по CGSN=4 его запускаем, потом после возврата - по CGSN=3 освобождаем память.

Код может быть как Thumb так и ARM: соответственно указывайте правильный адрес

запуска - для Thumb XXXXXXXX+1. В исполняемом коде не потеряйте LR, возврат по нему.

 

Режим CGSN=4 поддерживает BinEdit, он сам запросит память (по CGSN=2), запишет туда код и

правильно его запустит. См инструменты - подключение к телефону - запуск.

При компиляции кода - рекомендуется использовать директивы .plugin/.endplugin

 

AT+CGSN=5,"AAAAAAAA","LLLLLL","SSSSSSSSSSSSSSSS"

Поиск в памяти hex-массива. Допустима маска ?? на места отдельных байт.

AAAAAAAA - стартовый адрес, L - длинна области поиска (если выйдете за пределы

ОЗУ - мобила повиснет просто), SS - искомые байты. Пример использования - ищем где

мобила хранит имя файла диктофона: редактируем имя на 223344551 (врядли такая

последовательность будет где-то ещё), и затем ищем:

AT+CGSN=5,"30000000","F00000","323233333434353531"

Потом найденные места перепроверяем по CGSN=0.

Мест причем несколько обычно, так что надо перезапускать поиск после

найденного адреса.

 

Режим поиска CGSN=5 поддерживает BinEdit.

См инструменты - подключение к телефону - поиск.

Не забудте задать адекватную длинну блока - иначе при выходе за пределы ОЗУ мобила повиснет

 

AT+CGSN=6,"AAAAAAAA" - читает сразу 32-битное слово с указанного адреса.

Применяется для работы с аппаратными портами

 

AT+CGSN=7

Возвращает адрес текущей MCC команды.

Очень удобно искать в прошивке адреса тех или иных меню,

и точек вызова разных самсунговских программ.

 

AT+CGSN=8,"AAAAAAAA"

Запускает MCC-интерпретатор с адреса AAAAAAAA. Позволяет таким образом проверять

правильность найденный адресов программ для карты прошивки (ну чтобы в карте

прошивке вешать там диктофон, калькулятор и т.д. - при помощи этой команды

можно проверить чтобы найденные адреса работали правильно, не прошивая десятки

раз мобилу для проверки).

 

AT+CGSN=9,"AAAAAAAA","WWWWWWWW" - пишет сразу 32-битное слово W по адресу A.

Применяется для работы с аппаратными портами

 

Все числа - в шеснадцатеричном виде (т.е. 10 тут - это 16 человеческое),

с ведущими нулями, если Long - то LittleEndian.

Все числа (кроме номера режима CGSN) должны быть в кавычках (иначе, они будут

обработаны неадекватно).

 

Какие из команд нам понадобятся - я подчеркнул

 

И так, как же с ними работать?!

 

Для начала определимся, адрес чего мы будем искать, ну допустим найдём адрес "Мои файлы"

Теперь думаем - из каого меню можно попасть в "Мои файлы"... Самое простое - есс-но через главное меню!

Нажимаем на телефоне кнопки - переходим в главное меню...

Теперь через терминал даём команду AT+CGSN=7 и жмём Enter:

4.png

Как видно, ниже появилось 16ричное число и слово ОК, так вот, это число - адрес текущей MCC-команды, копируем его:

5.png

Теперь переходим в главное окно BinEdit, вставляем это число в окошко для адреса, жмём Enter и открываем вкладку MCC:

6.png

 

Чуть ниже видим описания MCC-команд:

По пункту 1 переход туда-то

По пункту 2 переход туда-то

...

и т.д.

Смотрим в наш телефон - Мои файлы - это шестой пункт меню (если в главном меню нажать цифровую кнопку 6 - то передем как раз в Мои файлы)

Теперь смотрим в окно BinEdit и ищем строчку:

По пункту 6 переход...

7.png

копируем адрес перехода - это и есть искомый адрес! Можно добавлять его в карту прошивки РесМана и назначать на любую кнопку... :)

Но (!) хотелось бы точно быть уверенным в этом адресе, как проверить не прошивая телефон? А очень просто - для этого нам и потребуется следующая команда:

AT+CGSN=8,"AAAAAAAA"

Не забываем вместо AAAAAAAA вставить наш адрес:

8.png

жмем Enter и смотрим в телефон - он на наших глазах переходит в Мои файлы!

Все, теперь мы на 100% уверены, что правильно нашли адрес...

 

А как же найти адрес меню, в которое невозможно попасть из другого меню, спросите вы?..

Ну, например, адрес главного меню???

 

Делаем следующее:

Заходим в это меню и снимаем его адрес (через AT+CGSN=7)

Копируем этот адрес и вставляем его в аресное окошко BinEdit, жмём Enter - программа откроет нам на вкладке MCC адрес текущей MCC-команды...

Что же тут делать? Нам нужно подняться от этой команды вверх - неспеша жмём мышкой на верхний треугольник полосы прокрутки, справа от окна с кодом...

И на сколько же нужно подняться вверх?..

А тут очень просто - нужно подняться вверх до того места, где BinEdit поменяет цвет символов команд:

9.png

После этого нам необходимо вернуться на один шаг назад (См. скрин), скопировать адрес:

10.png

И проверить его уже известным образом...

11.png

 

Вот и все... :)

  • Like 28
Link to comment
Share on other sites

FRAER,

Последняя версия BinEdit не требует изучения AT-команд, там есть вкладка MCC…

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Link to comment
Share on other sites

f2065,

я знаю это :( я и не пытаюсь обучить кого-то ат-командам, просто пытался сделать более-менее "универсальную" инструкцию, не привязанную к какой-то конкретной версии бинедит или патча цгсн...

  • Like 4
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share



×
×
  • Create New...