[Tutorial] Создание ASM файла (исходника). : Патчестроение : Форум |
Страница 1 из 9: [1] 2 3 4 5 ... 9 » |
HierOS: |
17.02.09, 20:42 |
1.- Патч: ;W580 SW-R8BE001 ;Play a sound when opening/closing slide. ;In tpa/preset/system/sound put files slideropen.mp3 and sliderclose.mp3 ;v 1.3 ;Corrected detection of isAudioPlayerBook ;© John North ;(e) HierOS (correct mismatch) 452add9c: 26D0 24D0 452adde8: 2720CCE02820CAE0 004B18474109C045 45c00940: 0000000000000000 10B4114B98470028 45c00948: 0000 11D1 ;45c00948: 0000 C046 45c0094A: 000000000000 1048114B9847 45c00950: 00000000000000000000000000000000 00280CD10E480F4B9847002807D10EA1 45c00960: 0000000000000000 3F2C00D014A10648 45c00968: 00 32 45c00969: 00000000000000 22064B984710BC 45c00970: 00000000000000000000000000000000 2720402C00D12820004B184787DF2A45 45c00980: 00000000000000000000000000000000 FC9C7145354800450555FD44554EF344 45c00990: 00000000000000000000000000000000 09AD0F4599DC2A4573006C0069006400 45c009a0: 00000000000000000000000000000000 650072006F00700065006E002E006D00 45c009b0: 00000000000000000000000000000000 700033000000FFFF73006C0069006400 45c009c0: 00000000000000000000000000000000 6500720063006C006F00730065002E00 45c009d0: 0000000000000000 6D00700033000000 • Это комментарии. Каждому комментарию в патче должна предшествовать точка с запятой. Вы можете написать комментарии в любой части патча. • Врезки и модификации кода прошивки. Изменения сделанные в коде прошивки, которые означают, что оно заменяют байты в фактических функциях, которые используют наши телефоны. • Тело патча. Это - новый код, написанный в конце прошивки нашего телефона, в пустой свободной области. 2.- Понятия: • У комментариев нет никаких функциональных возможностей в теле патча, кроме как указания автора,имени,модели и прошивки,а также дополнительной информации о нём. • Врезки и модификации кода прошивки делают патчеры необходимые для работы новых патчей. Иногда патчеры добавляют в прошивку новые функции, прописывая их в свободную зону прошивки. Новый код называют Телом патча. Патчеры пишут переход туда из прошивки, который по большей части выполняет только переадресацию, после чего следует выполнение нового кода и переадресация к исходной функции, не ломая дальнейший код (бывают и исключения). • Тело патча - это дополнительный код который записывают в свободную область. Для задействования кода патчеры пишут врезки,который переадресует исходную функцию на новую. В большинстве случаев после того, как новый код был выполнен происходит переадресация назад к старому коду,чтобы не оборвать выполнение функции и не вызвать какой-либо сбой. 3.- Основы ассемблирования: Важной вещью, чтобы понять является cо-отношение между функцией и используемым положением байт. У каждого байта в наших прошивках есть определенное значение и причина существования, они классифицированы в Данных и Коде. Логика выполнения задаётся процессором,какой байт распознавать как Код,а какой как Данные. Каждая функция в нашей прошивке использует место (в байтах). ARM Процессоры (используемые в наших телефонах) имеют 2 'Режима Выполнения' (понимать термин вам не нужно): 16-битное (вызывает THUMB) и 32-битное (вызывает ARM) выполнение. Это означает, - то,что некоторые (большая часть) кода прошивки написаны в виде 16-битных (2 байта) функциях и некоторый другой код в виде 32-битных (4 байта) функций. Мы не будем касаться Режима Выполнения ASM, так как мы почти не используем его, и продолжим с Режимом Выполнения THUMB. В Режиме Выполнения THUMB (16-бит) Функции Ассемблера используют 2 байта пространства, таким образом каждые 2 байта THUMB кода, процессор обрабатывает как функцию. 4.- Интерпретация: Тот код что находится в наших VKP патчах должны изменить какие-то байты в прошивке,изменив при этом функцию нашего телефона. Все значения написаны в HEX-виде. 452add9c: 26D0 24D0 Это часть нашего патча, заменяет 26D0 на 24D0 по адресу 452ADD9C в нашей прошивке. 26D0 - 2 байта, и если мы дизассемблируем их получаем функцию: ROM:452ADD9C 26 D0 BEQ loc_452ADDEC ROM:452ADD9C -> Расположение 26D0 -> Байты BEQ -> Инструкция loc_452ADDEC -> Параметр И когда мы применяем патч, 26D0 изменяются на 24D0, и получаем следующее: ROM:452ADD9C 24 D0 BEQ loc_452ADDE8 Единственное, что изменилось, был параметр функции. Как вы могли заметить, параметр - смещает адрес: 452ADDE8. 5.- Процесс: • Открываем IDA и загружаем необходимую прошивку. • Применяем патч используя IDC скрипт 'Apply VKP Patch'. • Далее Menu > Options > General > 'Number of opcode bytes:' изменяем на 4. (Число байт отображаемых у каждой функции слева). • Переходим к первой врезке патча: 452add9c. (Горачая клавиша: G) • Дизассемблируем (Горячая клавиша: C) • Выбираем строку соответствующую байтам, которые указаны в патче: 452add9c: 26D0 24D0 Это: Код: ROM:452ADD9C ; --------------------------------------------------------------------------- ROM:452ADD9C 24 D0 BEQ loc_452ADDE8 • Нажимаете Alt + F10 и создаёте ваш первый .asm файл. Сохраните его где-нибудь. В своём файле вы увидите следующее: Код: ; ; +-------------------------------------------------------------------------+ ; | This file is generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> | ; | Licensed to: Mach EDV Dienstleistungen, Jan Mach, 1 user, adv, 11/2007 | ; +-------------------------------------------------------------------------+ ; ; --------------------------------------------------------------------------- BEQ loc_452ADDE8 • Очищаем его: Код: BEQ 0x452ADDE8 • И добавляем адрес расположения следующим образом: Код: org 0x452ADD9C BEQ 0x452ADDE8 • Переходим на вторую врезку: 452adde8. • Смотрим значения патча. 452adde8: 2720CCE02820CAE0 004B18474109C045 • Дизассемблируйте, если это ещё не сделано. • Выберите всё это: Код: ROM:452ADDE8 loc_452ADDE8 ; CODE XREF: ROM:452ADD9Cj ROM:452ADDE8 00 4B LDR R3, off_452ADDEC ROM:452ADDEA 18 47 BX R3 ROM:452ADDEA ; --------------------------------------------------------------------------- ROM:452ADDEC 41 09 C0 45 off_452ADDEC DCD loc_45C00940+1 ; DATA XREF: ROM:loc_452ADDE8r • Нажмите Alt + F10 и создайте ваш второй файл. • Приведите его в порядок и создайте переход: Код: org 0x452ADDE8 LDR R3, off_452ADDEC BX R3 off_452ADDEC DCD 0x45C00940+1 • Переходим на третью врезку: 45c00940 Примечание: Эта врезка переходит в пустую область прошивки,где расположено тело патча. Примечание2: Во все значения после перехода в тело патча можно делать переход между ними, всё это функция написанная Джон'ом North'ом (Автор).. • Дизассемблируйте, если это ещё не сделано. • Выделяем тело патча и создаём третий .asm (Alt + F10). вот так: Код: ROM:45C00940 loc_45C00940 ; CODE XREF: ROM:452ADDEAj ROM:45C00940 ; DATA XREF: ROM:off_452ADDECo ROM:45C00940 10 B4 PUSH {R4} ROM:45C00942 11 4B LDR R3, off_45C00988 ROM:45C00944 98 47 BLX R3 ROM:45C00946 00 28 CMP R0, #0 ROM:45C00948 C0 46 NOP ROM:45C0094A 10 48 LDR R0, off_45C0098C ROM:45C0094C 11 4B LDR R3, off_45C00994 ROM:45C0094E 98 47 BLX R3 ROM:45C00950 00 28 CMP R0, #0 ROM:45C00952 0C D1 BNE loc_45C0096E ROM:45C00954 0E 48 LDR R0, off_45C00990 ROM:45C00956 0F 4B LDR R3, off_45C00994 ROM:45C00958 98 47 BLX R3 ROM:45C0095A 00 28 CMP R0, #0 ROM:45C0095C 07 D1 BNE loc_45C0096E ROM:45C0095E 0E A1 ADR R1, aSlideropen_mp3 ; "slideropen.mp3" ROM:45C00960 3F 2C CMP R4, #0x3F ROM:45C00962 00 D0 BEQ loc_45C00966 ROM:45C00964 14 A1 ADR R1, aSliderclose_mp ; "sliderclose.mp3" ROM:45C00966 ROM:45C00966 loc_45C00966 ; CODE XREF: ROM:45C00962j ROM:45C00966 06 48 LDR R0, off_45C00980 ROM:45C00968 32 22 MOVS R2, #0x32 ROM:45C0096A 06 4B LDR R3, off_45C00984 ROM:45C0096C 98 47 BLX R3 ROM:45C0096E ROM:45C0096E loc_45C0096E ; CODE XREF: ROM:45C00952j ROM:45C0096E ; ROM:45C0095Cj ROM:45C0096E 10 BC POP {R4} ROM:45C00970 27 20 MOVS R0, #0x27 ROM:45C00972 40 2C CMP R4, #0x40 ROM:45C00974 00 D1 BNE loc_45C00978 ROM:45C00976 28 20 MOVS R0, #0x28 ROM:45C00978 ROM:45C00978 loc_45C00978 ; CODE XREF: ROM:45C00974j ROM:45C00978 00 4B LDR R3, off_45C0097C ROM:45C0097A 18 47 BX R3 ROM:45C0097A ; --------------------------------------------------------------------------- ROM:45C0097C 87 DF 2A 45 off_45C0097C DCD loc_452ADF86+1 ; DATA XREF: ROM:loc_45C00978r ROM:45C00980 FC 9C 71 45 off_45C00980 DCD aTpaPresetSyste ; DATA XREF: ROM:loc_45C00966r ROM:45C00980 ; "/tpa/preset/system/sound" ROM:45C00984 35 48 00 45 off_45C00984 DCD loc_45004834+1 ; DATA XREF: ROM:45C0096Ar ROM:45C00988 05 55 FD 44 off_45C00988 DCD loc_44FD5504+1 ; DATA XREF: ROM:45C00942r ROM:45C0098C 55 4E F3 44 off_45C0098C DCD unk_44F34E55 ; DATA XREF: ROM:45C0094Ar ROM:45C00990 09 AD 0F 45 off_45C00990 DCD unk_450FAD09 ; DATA XREF: ROM:45C00954r ROM:45C00994 99 DC 2A 45 off_45C00994 DCD loc_452ADC98+1 ; DATA XREF: ROM:45C0094Cr ROM:45C00994 ; ROM:45C00956r ROM:45C00998 73 00 6C 00+aSlideropen_mp3 unicode 0, <slideropen.mp3>,0 ROM:45C00998 69 00 64 00+ ; DATA XREF: ROM:45C0095Eo ROM:45C009B6 FF DCB 0xFF ROM:45C009B7 FF DCB 0xFF ROM:45C009B8 73 00 6C 00+aSliderclose_mp unicode 0, <sliderclose.mp3>,0 ROM:45C009B8 69 00 64 00+ ; DATA XREF: ROM:45C00964o Ваш asm файл должен быть похожим на такой: Код: org 0x45C00940 loc_45C00940: PUSH {R4} LDR R3, off_45C00988 BLX R3 CMP R0, 0 NOP LDR R0, off_45C0098C LDR R3, off_45C00994 BLX R3 CMP R0, 0 BNE loc_45C0096E LDR R0, off_45C00990 LDR R3, off_45C00994 BLX R3 CMP R0, 0 BNE loc_45C0096E ADR R1, aSlideropen_mp3 CMP R4, 0x3F BEQ loc_45C00966 ADR R1, aSliderclose_mp loc_45C00966: LDR R0, off_45C00980 MOVS R2, 0x32 LDR R3, off_45C00984 BLX R3 loc_45C0096E: POP {R4} MOVS R0, 0x27 CMP R4, 0x40 BNE loc_45C00978 MOVS R0, 0x28 loc_45C00978: LDR R3, off_45C0097C BX R3 align 4 off_45C0097C DCD 0x452ADF86+1 off_45C00980 DCD 0x45719CFC off_45C00984 DCD 0x45004834+1 off_45C00988 DCD 0x44FD5504+1 off_45C0098C DCD 0x44F34E55 off_45C00990 DCD 0x450FAD09 off_45C00994 DCD 0x452ADC98+1 aSlideropen_mp3 du "slideropen.mp3",0 align 4 aSliderclose_mp du "sliderclose.mp3",0 Примечание: Добавьте 'align 4' перед блоками Данных или Значений. • Совместите все созданные вами файлы и добавьте 'include "x.inc"' в самом начале: Код: include "x.inc" org 0x452ADD9C BEQ 0x452ADDE8 org 0x452ADDE8 LDR R3, off_452ADDEC BX R3 off_452ADDEC DCD 0x45C00940+1 org 0x45C00940 loc_45C00940: PUSH {R4} LDR R3, off_45C00988 BLX R3 CMP R0, 0 NOP LDR R0, off_45C0098C LDR R3, off_45C00994 BLX R3 CMP R0, 0 BNE loc_45C0096E LDR R0, off_45C00990 LDR R3, off_45C00994 BLX R3 CMP R0, 0 BNE loc_45C0096E ADR R1, aSlideropen_mp3 CMP R4, 0x3F BEQ loc_45C00966 ADR R1, aSliderclose_mp loc_45C00966: LDR R0, off_45C00980 MOVS R2, 0x32 LDR R3, off_45C00984 BLX R3 loc_45C0096E: POP {R4} MOVS R0, 0x27 CMP R4, 0x40 BNE loc_45C00978 MOVS R0, 0x28 loc_45C00978: LDR R3, off_45C0097C BX R3 align 4 off_45C0097C DCD 0x452ADF86+1 off_45C00980 DCD 0x45719CFC off_45C00984 DCD 0x45004834+1 off_45C00988 DCD 0x44FD5504+1 off_45C0098C DCD 0x44F34E55 off_45C00990 DCD 0x450FAD09 off_45C00994 DCD 0x452ADC98+1 aSlideropen_mp3 du "slideropen.mp3",0 align 4 aSliderclose_mp du "sliderclose.mp3",0 • Организуйте подобным образом, добавляя EQU для адресов: Код: include "x.inc" branch equ 0x452ADDE8 hook equ 0x45C00940+1 address1 equ 0x452ADF86+1 address2 equ 0x45719CFC address3 equ 0x45004834+1 address4 equ 0x44FD5504+1 address5 equ 0x44F34E55 address6 equ 0x450FAD09 address7 equ 0x452ADC98+1 org 0x452ADD9C BEQ branch org 0x452ADDE8 LDR R3, off_452ADDEC BX R3 off_452ADDEC DCD hook org 0x45C00940 loc_45C00940: PUSH {R4} LDR R3, off_45C00988 BLX R3 CMP R0, 0 NOP LDR R0, off_45C0098C LDR R3, off_45C00994 BLX R3 CMP R0, 0 BNE loc_45C0096E LDR R0, off_45C00990 LDR R3, off_45C00994 BLX R3 CMP R0, 0 BNE loc_45C0096E ADR R1, aSlideropen_mp3 CMP R4, 0x3F BEQ loc_45C00966 ADR R1, aSliderclose_mp loc_45C00966: LDR R0, off_45C00980 MOVS R2, 0x32 LDR R3, off_45C00984 BLX R3 loc_45C0096E: POP {R4} MOVS R0, 0x27 CMP R4, 0x40 BNE loc_45C00978 MOVS R0, 0x28 loc_45C00978: LDR R3, off_45C0097C BX R3 align 4 off_45C0097C DCD address1 off_45C00980 DCD address2 off_45C00984 DCD address3 off_45C00988 DCD address4 off_45C0098C DCD address5 off_45C00990 DCD address6 off_45C00994 DCD address7 aSlideropen_mp3 du "slideropen.mp3",0 align 4 aSliderclose_mp du "sliderclose.mp3",0 Примечание: Вы можете назвать ваши значения EQU как душе угодно. © Shadow Player Локализация: HierOS Оригинал |
Therion: |
17.02.09, 21:05 |
HierOS, подробней и информативней уже некуда Спс.. |
HierOS: |
17.02.09, 21:14 |
если что критикуйте,местами мануал писал своими словами т.к. в переводе на рус получалось немного не та суть |
MahmudS: |
17.02.09, 21:21 |
HierOS, думаю, еще не мешало бы в опциях отключать макросы (команды movl), а то иногда не компилится исходник. |
HierOS: |
17.02.09, 22:47 |
хм,я так никогда почти не делал и всё о.к.)) это ты имеешь ввиду снять 2 галку в одной из менюшек сеттингов? |
Joker XT: |
17.02.09, 22:57 |
ммм) как в моём туториале)) Как стать патчером) я же там описывал как сделать исх, тут тоже самое, тока патч др |
timos_06: |
17.02.09, 22:57 |
HierOS, А перед блоками данных алигн 4 обязательно добавлять? Я не добавляю никогда, если ругается только... [ Редактировано timos_06 в 17.2.09 22:58 ] [ Редактировано timos_06 в 17.2.09 22:58 ] |
MahmudS: |
17.02.09, 22:57 |
HierOS, ага. Как мне подсказывают со стороны, у меня "x.inc" старый, поэтому при компиляции ошибку дает. |
HierOS: |
17.02.09, 23:09 |
Joker XT, помойму у тебя не так подробно (не так впечатляло) было тут уж совсем,по пальцам пальцев timos_06, желательно,мануал то больше общий,поэтому для уверенности стоит добавлять |
MurametS: |
27.02.09, 15:01 |
• Нажимаете Alt + F10 и создаёте ваш первый .asm файл. Сохраните его где-нибудь. Выделяю, нажимаю Alt + F10 и у меня IDA всю прошивку ссохраняет в исходникВ своём файле вы увидите следующее: |
Страница 1 из 9: [1] 2 3 4 5 ... 9 » |
URL этой темы: https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=3722 © 2005-2018 supertrubka.org |