Сейчас на форуме: zds, UniSoft (+6 невидимых)

 eXeL@B —› Программирование —› ARM декомпилятор, хочу, но не могу...
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 декабря 2012 02:11 · Поправил: ILYA_ZX
· Личное сообщение · #1

Всем привет, я в общем то не особый программист, но люблю поковыряться в прошивках мобильников и не только. Давно хочу создать инструмент для автоматизации разбора ARM кода, и попытки были, в итоге project1 так и оставался хренью практически с нулевой полезностью. А ведь все не так уж и сложно...
Предлагаю создать аналог IDA заточеный под ARM, и декомпилятор. Декомпиляцию организовать на основе трансляции ARM инструкций в трехадресный код, потом восстанавливать выражения, арифметика и запись/чтение из памяти:
например STR R0,[R2,#4] -> R0 wd (R2,4)
а R0 wd (R2,4)
это...
R2->field_4=R0;
R2[1]=0;
или *(R2+4)=R0
не так сложно вроде бы типы данных раскидать, да я голову ломаю уже давно над тонкостями.... кому это нужно кроме меня?
Цель - понять что эта куча инструкций выполняет, декомпиляция вторична.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 12 декабря 2012 02:18 · Поправил: reversecode
· Личное сообщение · #2

ILYA_ZX пишет:
Декомпиляцию организовать на основе трансляции ARM инструкций в трехадресный код, потом восстанавливать выражения, арифметика и запись/чтение из памяти:

за вас уже это сделали, продукт называется hexarm.plw

reversecode пишет:
Давно хочу создать инструмент для автоматизации разбора ARM кода, и попытки были, в итоге project1 так и оставался хренью практически с нулевой полезностью. А ведь все не так уж и сложно...

уже есть desquirr, его и доделайте


вообще смешны топики людей которые берутся что то делать даже не сделав предварительные обзоры,
или как автор в соседнем топике , никогда не работавшие даже в IDA,
вроде специалистов в МГУ выпускают ближе к концу весны а не осени? или я ошибаюсь?



Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 декабря 2012 02:31 · Поправил: ILYA_ZX
· Личное сообщение · #3

Я не специалист МГУ, и вообще не специалист, я видел результат работы Desquirr,
он меня не устраивает, для мня проще создать что-то новое чем разбираться в чужих наработках,
в коллективе никогда не работал судить не могу, поэтому тут и написал. IDA могу себе позволить, HEX нет, и не продадут его так просто, посему призываю "неимущих" вроде меня взяться за написание некоторого продукта.
И конечно не хочу наблюдать как этот продукт вдруг появиться сам по себе, есть наработки, мне не хватает профессионализма и терпения возможно, что-бы сделать более менее работоспособную программу.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 12 декабря 2012 02:44
· Личное сообщение · #4

ILYA_ZX пишет:
он меня не устраивает, для мня проще создать что-то новое чем разбираться в чужих наработках,

что бы что то создавать нужно как минимум знать устройство всех существующих аналогов,
плюсы и минусы.

| Сообщение посчитали полезным: plutos

Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 декабря 2012 03:14
· Личное сообщение · #5

reversecode пишет:
ILYA_ZX пишет:
он меня не устраивает, для мня проще создать что-то новое чем разбираться в чужих наработках,
что бы что то создавать нужно как минимум знать устройство всех существующих аналогов,
плюсы и минусы.

Согласен, для этого существует литература, а разбираться в чужом коде это тоже немножко реверсинг)
пока в сществующей нашел много интересного для себя, достаточного для уровня Desquirr, так считаю.




Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 12 декабря 2012 04:34
· Личное сообщение · #6

ILYA_ZX пишет:
например STR R0,[R2,#4] -> R0 wd (R2,4)
...

Начиная разработку нового декомпилятора многие как-то забывают, что основная сложность это не представить тот же самый код (ARMASM) в другом виде (со скобочками и всякими for/if), в этом случае проще натренироваться читать ARMASM напрямую. Главная задача, имхо, восстановить высокоуровненые конструкции исходного кода, то есть получается как бы деоптимизировать ассемблер. Cудя по наблюдаемой мной эволюции hexarm.pwl, на решение этой задачи в HexRays сейчас и сосредоточились.
Тут обсуждения этой проблемы я пока не вижу, это печально.

ILYA_ZX пишет:
он меня не устраивает, для мня проще создать что-то новое чем разбираться в чужих наработках

Да, в этом и есть их фатальный недостаток

vden
Бро, порадуй уже чем нить

-----
Get busy living or get busy dying ©




Ранг: 112.9 (ветеран), 186thx
Активность: 0.090.01
Статус: Участник

Создано: 12 декабря 2012 05:02
· Личное сообщение · #7

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



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 12 декабря 2012 09:15 · Поправил: Veliant
· Личное сообщение · #8

Для thumb-инструкций есть простой декомпилятор http://www.openrce.org/downloads/details/121/Thumb_Decompiler при желании можно найти и его исходники.

У иды многолетние наработки и им по сути нужно только перевести асм в микрокод собственный и получится уже примерный результат который надо напильником доработать.

А по теме - для любых архитектур одна и та же схема - построение и анализ графов кода/данных, расстановка типов. У меня уже давно витает мысль в голове сделать конвертацию дизасма в микрокод LLVM и посмотреть что на выходе выдаст. Есть же на его основе конверторы из одних языков в другие. Руки правда так и не доходят.

Перерыл уже кучу сайтов и pdf по этой тематике. Кроме пары наработок ничего полезного, остальное всякие мат. выкладки умных дядей которые ничего кодить и не собирались, а тупо написать статью для поддержания докторского звания

Add:
Есть проекты вроде рабочие проекты llvm->jvm, а java class'ы есть уже чем декомпилировать



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 12 декабря 2012 10:17
· Личное сообщение · #9

ILYA_ZX
А в чем проблема, дизасмы под arm есть, собирайте ast и из промежуточного кода восстанавливайте исходник, по логике которой вы и напишите, ну напишите это я так, что бы сразу помидорами не закидывать.
LLVM не плох, вот кстати, в одном проекте используют и как раз arm.
disarm



Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 декабря 2012 20:19 · Поправил: ILYA_ZX
· Личное сообщение · #10

Veliant пишет:
Кроме пары наработок ничего полезного

Точно.
А вот трансляция команд ассемблера в код LLVM неплохая мысль. Я как раз озадачился
тем самым промежуточным представлением кода, и вот оказывается есть готовое решение, а мои идеи это "велосипед" с квадратными колесами
Спасибо за дельные советы, буду работать в этом направлении.
reversecode пишет:
вообще смешны топики людей которые берутся что то делать даже не сделав предварительные обзоры

Согласен, вкратце напишу что было проделано. Разбивал код на блоки, производил анализ потоков данных, восстановление выражений,
но все это делалось с ARM инструкциями и на кустарном уровне. Потом пытался назначить типы каждому так скажем потоку... регистры и флаги отдельно обрабатывались. Почитав литературу пришел к выводу что удобнее транслировать инструкции в некоторый промежуточный код, и затем работать с ним. Начал городить огород и в итоге в нем заблудился.
С LLVM надеюсь действительно может лучше дела пойдут, до этого про нее ничего не знал, упустил
Так что информация для размышления есть, что получится то и получится.


 eXeL@B —› Программирование —› ARM декомпилятор, хочу, но не могу...
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати