motofan logo
21 страниц V « < 19 20 21        
> 

Учимся Патчить Прошивку., Дисассемблируем ARM.

Arkasha18
сообщение 24.11.2005, 21:32 Закрепленное сообщение!



****

Группа: Администраторы
Сообщений: 242
Регистрация: 27.4.2004
Из: Санкт-Петербург
Пользователь №: 2

Рейтинг: 249.5



Всем привет.
И так будем учиться дисассемблировать прошивку. Тут все просто не чего сложного.

Я не буду объяснять как SHX разобрать, надеюсь все знают. Единственное условие… CG0(MemoryMap) должна быть слита с прошивкой, а то не чего не выйдет, т.е. один файл д.б.
--------------------------
ссылка на программу IDA Pro Advanced https://motofan.ru/soft/?action=view&id=246&parent=5
Запускаем IDA , выбираем файл прошивки (CG1), потом выбираем Processor type – ARMB, жмем ок.
Тут ставим галки на Create RAM section и Create ROM section.
Выставляем адреса:
RAM start address - 0x03FC0000
RAM size - 0x40000
ROM start address - 0x10080000
ROM size - 0x1F80000
Loading address - 0x10080000
Остальное оставьте так как есть.
Жмем Ок, и ждем.


По хорошему теперь еще оперативку будет правильно сделать, идем в меню:
Edit>segments>create>segment
Пишем:
Segment name – любое придумайте;
Start address - 0x12000000
End address - 0x12800000
Base – 0

Теперь переходи на сегмент ROM (жмем на Клаве ”g” пишем 10080000, должны перескочить на 10080000 адрес ).
Объявляем dword (жмем Alt-D, потом на кнопку Double word).
у меня это вылезло это
Код

ROM:10080000                 DCD 0x10BCD3D0

Появилось (оранжевым цветом).
Теперь жмем "O" (Буква латинская О ), должен появиться указатель на точку входа
у меня это вылезло это
Код

ROM:10080000                 DCD byte_10BCD3D0

Встаем на этот (byte_10BCD3D0) адрес курсором и жмем на Enter или просто двойной щелчок мышкой по этому адресу, вы перепрыгнете на адрес (10BCD3D0).

И так мы сейчас на 10BCD3D0.
Теперь сморим. ARM умеет работать в 2х режимах:
ARM - режим 32хразрядных опкодов и
THUMB - режим 16тиразрядных опкодов.
Для самой иды режим задается младшим битом адреса опкода.
т.е. если адрес например был бы 10A01D18 - то это был бы опкод в режиме ARM по адресу 10A01D18
а если адрес 10A01D19 то это опкод по адресу 10A01D18 в режиме THUMB
в ARM режиме набор команд более гибкий, но в THUMB за 1 цикл выполняется 2 команды - он быстрее.

Это мне так Vilko объяснял…я конечно же не Х.. не понял, так что буду говорить своими словами.
Нам сейчас надо задать ИДЕ режим в котором мы будем работать.
Мы стоим на адресе 10BCD3D0, если мы посмотрим на этот адрес в двоичной системе исчисления, то будет видно что это 000100000101111001101001111010000, так вот если последний байт – 0, то значит режим ARM, а если 1 – THUMB.
Теперь говорим идее в каком мы режиме будем работать:
Если THUMB то надо встать на один адрес выше, т.е если стояли например на 10BCD3CF этот адрес говорит что режим THUMB, значит встаем на один адрес выше (10BCD3CE) и
жмем (Alt+G) , выбираем ”T”,а в поле Value ставим 1 (режим THUMB).

А если мы бы определили что режим ARM, то на один адрес выше вставать не надо! Просто на этом же адресе жмем (Alt+G) , выбираем ”T”,а в поле Value ставим 0 (режим ARM).

И так…фух…устал уже (
У меня получилась такая картина:
Код

ROM:10BCD3CC                 DCB 0xE7; ч
ROM:10BCD3CD                 DCB 0xF9; •
ROM:10BCD3CE                 DCB    0;  
ROM:10BCD3CF                 DCB    0;  
ROM:10BCD3D0                 CODE32
ROM:10BCD3D0 byte_10BCD3D0   DCB 0xE3        ; DATA XREF: ROM:10080000 o
ROM:10BCD3D1                 DCB 0x21; !
ROM:10BCD3D2                 DCB 0xF0; Ё
ROM:10BCD3D3                 DCB 0xD1; T

У меня режим ARM !
Теперь встаем курсором на ROM:10BCD3D0 и жмем на Клаве ”c” (объявляем код). (кнопку С надо давить на адресе, около которого появилсяь надпись CODE16 или CODE32 в зависимости от режима )
Должен появиться АСМ примерно такого плана.
Код

M:10A01DA4; ---------------------------------------------------------------------------
ROM:10A01DA4                 CODE16
ROM:10A01DA4                 LDR     R1, =0x28880020; DATA XREF: ROM:10BCD424o
ROM:10A01DA6                 LDR     R0, =0x2201
ROM:10A01DA8                 PUSH    {R4,R5,R7,LR}
ROM:10A01DAA                 STMIA   R1!, {R0}
ROM:10A01DAC                 LDR     R0, =0x3011
ROM:10A01DAE                 MOV     R5, #0
ROM:10A01DB0                 STR     R0, [R1]
ROM:10A01DB2                 MOV     R0, #3
ROM:10A01DB4                 ADD     R1, #4
ROM:10A01DB6                 LSL     R0, R0, #0x11
ROM:10A01DB8                 STMIA   R1!, {R0,R5}
ROM:10A01DBA                 MOV     R0, #0

Собственно и все…дальше только остается объявлять код (вызов unk_address)…..и менять режим….режим меняется только после оператора BX.

Ссылка на литературу по ARM.
Краткий справочний по командам ARM. (Это от ARM9 в нашем ARM7 многих команд нет, учтите это)

P.S.
Задавайте вопросы, я понимаю что не чего не понятно, так что не стесняйтесь.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
kai...
сообщение 3.10.2009, 11:55


Мастер
****

Группа: Пользователи
Сообщений: 288
Регистрация: 18.10.2008
Из: Минск, степянкаCITY
Пользователь №: 184 047
Модель телефона: SLVR L7, E398
Прошивка: R4513

Рейтинг: 259



smile.gif а шоб переписать под корень tongue.gif

Fenja: Ну тогда удачи тебе. Не ты первый, кто хочет это сделать laugh.gif
kai...: =)

Сообщение отредактировал kai... - 3.10.2009, 13:48
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
yakk
сообщение 4.10.2009, 7:15



*****

Группа: Разработчики
Сообщений: 336
Регистрация: 6.7.2006
Из: Днепропетровск
Пользователь №: 90 408
Модель телефона: milestone
Финалист Конкурса 2010


Настроение:
не нужен..



Рейтинг: 904



kai...
забудь, т.к. смысла в этом нету, нужно дизасмить только то что является кодом, на содержимое флекса даже прямых ссылок из кода нет.. просто убиваешь оперативку непонятно на что smile.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
costello666
сообщение 20.1.2010, 12:34


Опытный
***

Группа: Пользователи
Сообщений: 123
Регистрация: 25.8.2007
Пользователь №: 145 574
Модель телефона: E398, E8

Рейтинг: 125



Цитата(Umka85 @ 14.1.2009, 19:39) *

Я чот тоже не понял о чем именно ты спрашиваешь.

Если об иде, то идой патчи и делают
Если об скрипте, ктоторый грузит имена из elfloader.lib, то он нужен для именования функций, что удобно при портировании патчей и поиске функций на разных прошивок. Особенно если ищешь функции из эльфа в какой нибудь прошивке.

Да кстати, кто нибудь может исправить глюк и этом скрипте, а то при записи функций арм в иде имена записываються на байт выше положенного. как при режиме тхамб.

Лучше использовать этот idc-скрипт, он грузит имена функций из sym-файла.
Распознает:
A - ARM код
T - THUMB код
D - данные

SYM-файл можно получить из elfloader.lib при помощи ELFPack Library Editor 2.1

Скрипт:
Spoiler:

Код

// Auto SYM parser v 0.001 by Jabberwock
// Modification for D500 (by Stepan_V)

#include <idc.idc>

static main(void)
{
    auto   symFileName, symFile, i, name, type, val, ea;

    // Здесь укажите путь к sym-файла.
    //
    symFileName = "D:\44r.sym";
    //
    //

    symFile = fopen(symFileName, "rb");

    for (i=0; i < filelength(symFile); i = ftell(symFile))
    {
        val = readvalue(symFile);
        type = fgetc(symFile);
        name = readname(symFile);
        ea = xtol(val);
        
        if ((substr(name,0,4)=="byte") ||
            (substr(name,0,4)=="word") ||
            (substr(name,0,5)=="array") ||
            (substr(name,0,3)=="asc") ||
            (substr(name,0,3)=="ani"))
        {
            name = "_"+name;
        }

            
        //Message(name+" ("+val+")"+0xD+0xA);
        MakeName(ea, "");
        MakeName(ea, name);
        
        if (type == 'T')
        {
            Message("Code (Thumb) AT: "+val+0xa);
            SetReg(ea,"T",1);
            MakeCode(ea);
//            MakeFunction(ea,0);
        }
        else if (type == 'A')
        {
            Message("CODE (ARM) AT: "+val+0xA);
            SetReg(ea,"T",0);
            MakeCode(ea);
//            MakeFunction(ea,0);
        }
        else if (type == 'D')
        {
            Message("DATA AT: "+val+0xA);
            MakeUnkn(ea, 1);
        }
    }

    fclose(symFile);
}
//-------------------------------------

static readname(file)
{
    auto i,name,c;
    
    i=0;
    name="";

    for (i=0; i<100; i=i+1)
    {
        c = fgetc(file);
        if (c!=0x20) break;
    }
    name=name+c;

    for (i=0; i<512; i=i+1)
    {
        c = fgetc(file);
        if (c==0x0D)
        {
            fgetc(file);
            break;
        }
        else
            name = name+c;
    }
    
    return(name);
}
//-------------------------------------

static readvalue(file)
{
    auto i,name,c;

    i=0;
    name="";
    
    for (i=0; i<100; i=i+1)
    {
        c = fgetc(file);
        if (c!=0x20) break;
    }
    name=name+c;

    for (i=0; i<100; i=i+1)
    {
        c = fgetc(file);
        if (c==0x20)
            break;
        else
            name = name+c;
    }
    return (name);
}
//-------------------------------------


[close]


Сообщение отредактировал costello666 - 26.1.2010, 13:01
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
costello666
сообщение 22.1.2010, 13:37


Опытный
***

Группа: Пользователи
Сообщений: 123
Регистрация: 25.8.2007
Пользователь №: 145 574
Модель телефона: E398, E8

Рейтинг: 125



Вот на китайском форуме нашел sym-файл для e398 49R с 67023 найденными функциями из эльф-прошивки yesyes.gif

Прикрепленный файл e398_49R.rar   ( 649.22 килобайт ) Кол-во скачиваний: 273
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
sumkin
сообщение 9.4.2010, 6:45


Интересующийся
**

Группа: Пользователи
Сообщений: 51
Регистрация: 21.11.2007
Из: Владивосток
Пользователь №: 154 608
Модель телефона: E8+Milestone+Droid4
Прошивка: Z-mod, MIUI,ICS

Рейтинг: 11



Нажимаю Double word и вылазит это.
ROM:10080000 DCD unk_11FE0000

Писали что необходима прошивка с РСА. Где её взять я скачал оригинальный монстр с сайта, но там выводит тоже самое. У меня v635
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Fenja
сообщение 9.4.2010, 14:32


Авторитет
********

Группа: Модераторы
Сообщений: 5 564
Регистрация: 25.8.2008
Из: г. Пенза
Пользователь №: 179 851
Модель телефона: MotoRazr v3i
Прошивка: MotoUpdate v1.1

Рейтинг: 1756



sumkin,
Учимся портировать патчи! Уроки! Обсуждаем! имхо, в этой теме лучше описано, как дизасмить.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Учимся Патчить Прошивку., Дисассемблируем ARM. · Патчи и всё для них · Forum
 

21 страниц V « < 19 20 21
Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 9.12.2024, 15:43

Форум живёт: