eXTracted INternals

eXTracted INternals
 
ФорумФорум  ЧаВоЧаВо  ПоискПоиск  РегистрацияРегистрация  ПользователиПользователи  ГруппыГруппы  Вход  

Поделиться | 
 

 Плагин для ассемблирования ARM инструкций в IDA

Предыдущая тема Следующая тема Перейти вниз 
АвторСообщение
Hex

avatar

Количество сообщений : 397
Возраст : 35
Дата регистрации : 2006-07-12

СообщениеТема: Плагин для ассемблирования ARM инструкций в IDA   Сб 23 Авг - 12:36

Некоторые не знают, но ида может патчить память при дебаге и даже ассемблировать инструкции. Естественно по-умолчанию эта опция отключена. И чтобы появилось меню патча, надо его включить ручками отредактировав строку:
DISPLAY_PATCH_SUBMENU = YES
В файле:
\IDA\cfg\idagui.cfg

После этого появляется меню "Edit" - "Patch Program". В меню "Patch Program" есть три пункта:
1) Change Byte - позволяет редактировать байты
2) Change Word - позволяет редактировать по 2 байта за раз
3) Assemble - ассемблирование инструкций. Т.е. вы вводите текст, а получаете патч байтами.

Патчи эти работают в пределах иды: в файл, с которого сделана база, изменения не вносятся. А также работают во время отладки. Т.е. память процесса изменяется.

Так вот к чему я это. Процессорный модуль для x86 умеет ассемблировать инструкции, и это очень удобно. Не надо помнить опкоды.
А вот процессорный модуль для ARM не умеет. Для того чтобы это исправить - был написан плагин.

Во-первых, чтобы добавить фукнциональность ассемблирования инструкций, надо изменить флаги процессорного модуля. Когда ида грузит процессорный модуль она от него получает флаги, в которых указано что процессорный модуль может, а что нет. Чтобы ассемблирование начало работать, надо выставить флаг PR_ASSEMBLE. После того как флаг выставлен, процессорный модуль сможет получать нотификацию processor_t::assemble. Но, ильфаковский процессорный модуль не сможет ее обработать - там нет соответствующего кода.
Поэтому это будет делать плагин.

Чтобы проассемблировать строчку и получить из нее байты которые являются опкодом, нужен ассемблер. Т.е. нужно написать программу которая парсит строку с ассемблерной командой. Я не фанат транслятции текста в бинарь, поэтому начал искать готовые решения.
Конечно же мне сразу посоветовали посмотреть GCC. Фраза "посмотри GCC" стала для равноценной посыланием на другие три буквы. Вы когда-нить сами пробовали что-нить взять из гнушного проекта и прикрутить в свой? scratch

Поэтому я пошел другим путем. За основу был взят NARMS. Это NASM, для ARM'a. Автор начал его писать но бросил, зато выложил сорцы. Интерфейс функций оказался подходящим для прикручивания к иде. И вот есть первый вариант ассемблера.

+ Флаги процессорного модуля патчатся автоматически при старте плагина
+ Поддерживается Big и Little Endian
* Набор инструций только ARM7
* Работает только для ARM режима
* Код ассемблера в том виде в каком его бросил автор. Т.е. почти не тестировался Smile

Но думаю это поможет многим, кому нужно заменить BEQ на B Wink

Синтаксис для B и BL:
B #0xXXXXX
Т.е. адрес куда перейти надо указывать как immediate значение.

LDR и MOV для загрузки данных надо еще сидеть смотреть... А простые регистровые команды работают на ура.

Собственно сорец:
http://extint.narod.ru/Files/PatchArm.rar
Вернуться к началу Перейти вниз
Посмотреть профиль
gabber

avatar

Количество сообщений : 23
Localisation : на этом форуме!
Дата регистрации : 2008-03-06

СообщениеТема: Re: Плагин для ассемблирования ARM инструкций в IDA   Сб 23 Авг - 13:52

Большое спасибо!

Вот ещё есть очень хороший ARM-ASM
http://arm.flatassembler.net/ pirat


А процессорный эмулятор не планируешь случаем написать?
Если что, всегда рад помочь...
Вернуться к началу Перейти вниз
Посмотреть профиль
Hex

avatar

Количество сообщений : 397
Возраст : 35
Дата регистрации : 2006-07-12

СообщениеТема: Re: Плагин для ассемблирования ARM инструкций в IDA   Сб 23 Авг - 14:35

gabber пишет:
Большое спасибо!
Вот ещё есть очень хороший ARM-ASM
http://arm.flatassembler.net/ pirat
Я смотрел. Он на асме написан Smile Не удобно в си запихивать такое Smile

gabber пишет:

А процессорный эмулятор не планируешь случаем написать?
Если что, всегда рад помочь...
Неа, есть жеж qemu.
Вернуться к началу Перейти вниз
Посмотреть профиль
neonix



Количество сообщений : 39
Дата регистрации : 2008-08-01

СообщениеТема: Re: Плагин для ассемблирования ARM инструкций в IDA   Вс 24 Авг - 8:02

Замечательная новость! Smile (ТОлько я както всю жизнь пользовался накладыванием патча просто, а вроде транслятора юзал keil, но теперь будет попроще) Интересно можно в qemu сэмулировать омаповскую перефирию, но чую что писать прийдется уйму кода а до ума довести проблемно будет....
Вернуться к началу Перейти вниз
Посмотреть профиль
Hex

avatar

Количество сообщений : 397
Возраст : 35
Дата регистрации : 2006-07-12

СообщениеТема: Re: Плагин для ассемблирования ARM инструкций в IDA   Чт 28 Авг - 0:30

Вернуться к началу Перейти вниз
Посмотреть профиль
Спонсируемый контент




СообщениеТема: Re: Плагин для ассемблирования ARM инструкций в IDA   

Вернуться к началу Перейти вниз
 
Плагин для ассемблирования ARM инструкций в IDA
Предыдущая тема Следующая тема Вернуться к началу 
Страница 1 из 1

Права доступа к этому форуму:Вы не можете отвечать на сообщения
eXTracted INternals :: Cтатьи :: Mobile and Embedded-
Перейти: