Перейти к содержанию
Old Phone Forum

dаs

Администраторы ROOT
  • Постов

    2 828
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Сообщения, опубликованные dаs

  1. ZhekSooN,

    AlexeyK,

    спасибо, вот и я чему-нибудь здесь научусь. Но всё-таки эффективнее самому формировать сигнатуру, ибо автоматически сформированная сигнатура нашлась очень много раз.

  2. Итак, в окне компилятора мы имеем следующий текст:

     

    .equ uhActivateVibrator 0x205703EA

    .equ GSMStartTimer 0x2062F40C

     

    0x203F8CDA:

    ldr r0,=0x217D0000+1

    bx r0

    ;.hex 1E230818C25E1C23C15E

     

    0x217D0000:

    ldr r0,[sp]

    cmp r0,#0xAD

    blt exit

    cmp r0,#0xF4

    bgt exit

    push {r1-r3}

    MOV R0, 1

    BL uhActivateVibrator

    LDR R2, =stop+1

    MOV R1, 15

    LDR R0, =0x0000081D

    MOV R3, #0x0

    BL GSMStartTimer

    pop {r1-r3}

    exit:

    LDR R0, =0x000033E0

    mov r4,r2

    mov r3,#0x1E

    add r0,r1,r0

    ldsh r2,[r0,r3]

    ldr r3,=0x203F8CE4+1

    bx r3

    stop:

    push {r0,lr}

    mov r0,0

    BL uhActivateVibrator

    pop {r0,pc}

     

    Процесс переноса(портирования) патча обычо заключается в подмене адресов. Начинаем с подмены адресов функций, которые объявлены через .equ:

     

    1) uhActivateVibrator

    Нам известно название функции. Первым делом нужно попытаться найти функцию по названию в Символах. Для этого переходим на вкладку Символы (в окне с прошивкой U300), вставляем название функции (uhActivateVibrator) в самое верхнее текстовое поле (где справа значок лупы) и жмём на эту самую лупу или на Enter. Когда программа находит функцию, она выделяет строку с ней, но в нашем случае этого не произошло. Можете попробовать поискать функцию в символах U600 и увидите, что там эта функция найдётся. В символах U300 этой функции нет, значит придётся её искать.

     

    Самый первый и лёгкий способ поиска функции - по HEX коду её начала. Такой способ проходит только когда прошивки сильно похожи между собой. Итак, мы нашли функцию uhActivateVibrator в символах U600. Строка с этой функцией выделилась, кликаем по ней 2 раза, чтобы программа перешла в прошивке на это место. Переходим на вкладку Код и смотрим, как выглядит функция:

     

    1 столбик - это адрес расположения команды

    2 столбик - это HEX код команды

    3 столбик - это непосредственно команда

    4 столбик - это операнды для команды

    5 столбик - это комментарии

     

    По HEX коду в разных прошивках обычно совпадают только те команды, которые не содержат в себе адреса или смещения. Команды, которые в операндах содержат адрес (переходы, вызовы функций BL и др.) или смещение (например, LDR R0,[R1,смещение]) имеют различный HEX код. Дальше мы это учтём, а сейчас нам нужно скопировать HEX-код начала нашей функции до команды BL. Почему до команды BL? ну просто это оптимальный вариант, и такой последовательности байт хватит, чтобы найти функцию в U300. Чтобы выделить, запоминаем HEX-код той команды, до которой нам нужно выделить. В нашем случае это команда BL UHVibrator, которая имеет код 52F41CFA. Запомните визуально этот код и перейдите на вкладку Hex. Теперь нам нужно выделить байты до 52F41CFA, т.е. 70B5041C394D07D001202860 (выделяем мышкой). Теперь нажимаем Ctrl + C, чтобы скопировать.

     

    Итак, мы скопировали в буфер обмена HEX-последовательность, содержащию коды команды начала функции uhActivateVibrator до вызова BL. Теперь переходим в окно с прошивкой U300, переходим в нём на вкладку Поиск и вставляем из буфера при помощи Ctrl + V в текстовое поле нашу последовательность. Пытаемся найти такую последовательность, нажам на Enter. Как видите, результатов поиска нет, потому что в этой последовательности есть коды команды с адресами, которые имеют другой код в прошивке U300.

     

    При поиске в программе BinEdit те символы, которые могут быть любыми, можно заменить знаком ?. Переходим в окно с прошивкой U600, переходим на вкладку Код и и ищем команды, которые могли помешать нашему поиску. Очевидно, что это команда LDR R5, =0x30007F78, потому что она содержит адрес. Смотрим код этой команды слева: 394D, переходим в окно с прошивкой U300 и смотрим на нашу последовательность. Находим глазами код "мешающей" команды 394D, стираем это в последовательности, а вместо него ставим ????, т.к. там могут быть любые символы. Получается, что теперь мы будем искать 70B5041C????07D001202860, но поиск этой последовательности тоже ничего не даёт.

     

    Переходим в окно с прошивкой U600 и дальше смотрим, какая команда нам может ещё мешать. Очевидно, что это BEQ loc_20570402, т.к. она тоже содержит адрес. Опять смотрим на её код 07D0, переходим в окно с U300 и заменяем 07D0 в нашей последовательности вопросами. Получается, что мы будем искать 70B5041C????????01202860. Жмём Enter и Вуаля! Появились результаты поиска.

     

    Жмём на Плюсик слева, раскроется список найденных адресов, он у нас один. Жмём по нему 2 раза левой кнопкой. Программа BinEdit не понятно почему имеет такую особенность переходить на на сам адрес, а на адрес - 0x10. Наш адрес - это 2029672E, а программа перешла на 2029671E. В окне с кодом кликнем 2 рзаа левой кнопкой слева на адрес 2029672E, чтобы перейти уже конкретно на него. Теперь можно визуально сравнить как выглядят функции в U600 и U300. Визально они немного не похожи, но будьте уверены, чтобы мы нашли uhActivateVibrator в U300, просто по каким-то причинам она немного отличается.

     

    Пример получился сложным, обычно в начале функции побольше команд без адресов, и поиск не составляет особого труда. Итак, адрес функции uhActivateVibrator в U300 - 2029672E (функции в основном начинаются с команды PUSH). Переходим в окно компилятора и заменяем вверху адрес для функции uhActivateVibrator с 0x205703EA на 0x2029672E.

     

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

    • Like 5
  3. Shinshilla,

    да, т.к. у тебя версия прошивка в телефоне совпадает с версией прошивки, для которой сделаны патчи, прошивку можешь не прошивать. Только смотри обязательно, чтобы при прошивке патчей не стояла галочка Erase All Unused, иначе телефон убьёшь. Ты по какой инструкции действуешь?

×
×
  • Создать...