Форум программистов, компьютерный форум, киберфорум
Наши страницы
Низкоуровневое программирование
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
radmir1948
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 106
1

Каков результат дизассемблирования и ассемблирования в IDA Pro?

11.03.2017, 20:08. Просмотров 968. Ответов 12
Метки нет (Все метки)

Здравствуй уважаемый Mighty All!

Вопрос простой:
Если взять какую-нибудь программу без исходника, прогнать ее через IDA Pro (получить ассемблерный код),
скомпилировать его ассемблером, то будет ли он работать так как исходная прога?

И кстати второй вопрос, какой версией нужно компилировать asm code, и чем именно: masm, fasm, nasm,...

Среда: 32 разрядная винда. IDA Pro version 6.8.150423 (32 bit).

У меня не получается компиляция, мешают вставленные директивы ассемблеру.
Кто-нибудь знает, какой именно ассемблер нужно юзать для компиляции дизасма?

С уважением,
Радмир
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2017, 20:08
Ответы с готовыми решениями:

Ida pro
таварищи подскажите де добыть сей софт(ida pro) с кряком google шо-то не помог

Поиск в Ida Pro
Добрый день! Извиняюсь если такой вопрос уже был но как в Ida Pro выполнить поиск по radiobutton?...

Скрипты в IDA Pro Advanced.v6.1
Тринируюсь писать скрипты, вчера уже написал один рабочий. Хочу удлинить прогу, и в заданое...

IDA PRO загрузить файл
Здравствуйте уважаемые специалисты. В часто задаваемых вопросах по IDA PRO мало внимание уделено...

Ассемблерный код вируса (IDA Pro)
Здравствуйте. Помогите пожалуйста разобраться с ассемблерным кодом. До этого никогда не учил, а...

12
ФедосеевПавел
Модератор
4312 / 2387 / 954
Регистрация: 01.02.2015
Сообщений: 7,861
11.03.2017, 21:46 2
В своё время что-то менял в листинге, доводя до состояния компиляции. Всё работало, но перед этим полностью разобрал код - числовых массивов среди кода не оставалось. Даже, если код не понимал в деталях, было твёрдое понимание того, что происходит в каждом участке кода. Т.е. не было неопознанных участков.

Где-то встречалось упоминание, что если в exe есть ресурсы - то IDA их не извлекает и никак не использует. В отношении ресурсов - они теряются, требуется другой инструмент.
0
Kukuxumushu
1849 / 632 / 119
Регистрация: 13.06.2015
Сообщений: 2,157
Завершенные тесты: 2
12.03.2017, 03:01 3
Цитата Сообщение от radmir1948 Посмотреть сообщение
Если взять какую-нибудь программу без исходника, прогнать ее через IDA Pro (получить ассемблерный код),
скомпилировать его ассемблером, то будет ли он работать так как исходная прога?
Не будет. Хотя бы просто потому, что ассемблер не умеет отделять код от констант, и это, как сказал выше ФедосеевПавел, необходимо долго (не сильно по времени меньше, чем написать прогу с нуля) делать руками. Этот эффект прекрасно виден в любом дебагере - он может уверенно определить только ближайшие несколько инструкций, пока не встретятся данные, а дальше код "теряется" и возникают казусы наподобие джампа "в середину" инструкции и т.п.
0
radmir1948
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 106
12.03.2017, 06:37  [ТС] 4
Какое-то время назад долго возился с sourcer-ом. Там если если он не справлялся с кодом, то он просто объявлял байты как есть, и тогда все работало, ... хотя я при модифификации я не трогал эти части...
А жаль, по крайней мере можно было быть уверенным, что прогон через IDA туда и обратно ничего не меняет...

И все же нет ответа на вопрос какой masm нужен для компиляции дизассеблированного кода при настройке General Intel 8086?

С уважением,
Радмир
0
12.03.2017, 06:37
Constantin Cat
3597 / 1149 / 381
Регистрация: 28.02.2015
Сообщений: 2,525
Завершенные тесты: 1
13.03.2017, 12:22 5
Цитата Сообщение от radmir1948 Посмотреть сообщение
Intel 8086?
Все, что до 6.14-го


Цитата Сообщение от radmir1948 Посмотреть сообщение
Если взять какую-нибудь программу без исходника, прогнать ее через IDA Pro (получить ассемблерный код), скомпилировать его ассемблером, то будет ли он работать так как исходная прога?
Возьмите скомпилированный код с исходниками, дизассемблируйте его, посмотрите разницу. После нескольких таких "МУЧЕНИЙ", Вы научитесь получать рабочий исходный код.
0
radmir1948
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 106
15.03.2017, 18:46  [ТС] 6
Пошел по предложенному пути и сразу напоролся на фичи:
1. не может найти инклюде файл uni.inc, который должен быть в каталоге unicode в IDA pro 6.8.
вроде нашел, что подставить, однако не уверен, что это сработает, ну до этого еще далеко, по крайней мере ошибка не найден include file uni.inc не появляется.
2. IDA Pro сгенерировал ассембленый файл ~.asm, в котором вначале идет:
; ---------------------------------------------------------------------------

CPPEH_RECORD struc ; (sizeof=0x18, align=0x4, copyof_9) ; XREF: __wtof/r
; _wcstod/r ...
old_esp dd ? ; XREF: __wtof+5F/w
; __wtof:loc_77C0CE09/r ...
exc_ptr dd ? ; XREF: ___FrameUnwindToState:loc_77C11AE1/r
; ___CxxCallUnwindDtor:loc_77C11D35/r ... ; offset
registration _EH3_EXCEPTION_REGISTRATION ? ; XREF: __wtof+4D/w __wtof+96/w ...
CPPEH_RECORD ends

; ---------------------------------------------------------------------------

_EH3_EXCEPTION_REGISTRATION struc ; (sizeof=0x10, align=0x4, copyof_6)
; XREF: CPPEH_RECORD/r
Next dd ? ; offset
ExceptionHandler dd ? ; offset
ScopeTable dd ? ; offset
TryLevel dd ? ; XREF: __wtof+4D/w __wtof+96/w ...
_EH3_EXCEPTION_REGISTRATION ends

Ошибка error A2008: syntax error : _EH3_EXCEPTION_REGISTRATION в первой структуре.
На мой взгляд вполне резонно, эта структура опрделена позже использования, а forward declaration не задан,
по идее можно как-то задать для структур, но как конкретно не знаю, если кто знает, подскажите.
А пока попробовал поменять структуры местами, 1-ю после 2-й.
Ошибка исчезла, но появилась другая:
ошибка инициализации структуры, ошибка указывает на строку
registration _EH3_EXCEPTION_REGISTRATION ? ; XREF: __wtof+4D/w __wtof+96/w ...
Если эту строку закомментировать, или инициализировать dd ? вместо _EH3_EXCEPTION_REGISTRATION ?
то ошибки компляции нет.
Как это понимать, нет операции присвоения для структуры?
Но структуры копируются просто побайтно, как я полагал, ...

Если кто знает, подскажите, не прячьте за пазухой.

С уважением,
Радмир
0
stamp
Заблокирован
05.04.2017, 14:35 7
uni.inc
Код
unicode macro page, string, zero
	irpc c, <string>
	db '&c', page
endm
  
ifnb <zero>
	dw zero
endif
endm


Добавлено через 3 минуты
radmir1948, google: erfaren idapro
0
radmir1948
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 106
05.04.2017, 16:34  [ТС] 8
Спасибо за uni.inc.


Но я застрял на ошибках дизассемблирования. Среди них, такие:
  • повторные объявления ранее объявленных структур
  • некоторые структуры используются до объявления
  • неверная инизиализация структур
  • использования символов :: в именах структур
  • неверные команды при входе в функцию

продолжение следует...

С уважением,
Радмир
0
stamp
Заблокирован
05.04.2017, 16:47 9
Цитата Сообщение от radmir1948 Посмотреть сообщение
Но я застрял
radmir1948, "google: erfaren idapro" читайте блог эрфарен, на "народе" (сайт такой)
пробуксовка ваша закончится.
1
radmir1948
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 106
06.04.2017, 07:53  [ТС] 10
Но там ведь описаны проблемы с IDA Pro v.5.7, а у меня 6.8, и трайла 6.9х...
С уважением,
Радмир
0
stamp
Заблокирован
06.04.2017, 12:57 11
radmir1948, версия и на что влияет, позвольте спросить,
обратите внимание на информационную кладезь богатства блога Эрфарен.
0
radmir1948
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 106
21.04.2017, 16:07  [ТС] 12
Влияет и еще как,
начнем хотя бы с того, что ошибки и исправления для версии 5.7 в версии 6.8 просто могут быть решены, в тоже время в новой версии будут свои задачи, которые по идее еще не были актуальны в предыдущей версии.
Скажем, меня поражает, что таб структуры показывает их в одном порядке, а в табе локальные типы каждому определению структуры соотвествует порядковый номер (ordinal), который идет в правильном порядке: сначала определение структуры, затем использование. Проблему составляет, что при генерации ассемблерного файла структуры берутся из списка структур, а не из списка локальных типов!

Для правильной работы достаточно поменять порядок следования структур, и это можно сделать, сложными манипуляциями с созданием новой структуры, которую нужно вставить перед структурой применения, заменить ссылку на старую структуру ссылкой новую структуру, удалить старую структуру, переименовать новую структуру и тогда структуры будут в нужном порядке и генерация ассемблерного файла будет правильной.
Причем тогда здесь GUI?
Притом, что если бы здесь была полноценная GUI, то перенести структуру вперед можно было бы простым драг-энд-дропом, или любимой комбинацией Ctrl-C + Ctrl-V...

С уважением,
Радмир
0
radmir1948
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 106
25.04.2017, 18:40  [ТС] 13
Добрый день всем!

Ассемблерный код сгенерированный программой IDA Pro (6.8) имеет некоторые расхождения со стандартным ассемблером. Судя по всему правка кода должна производится в базе *.idb текущего проекта. Правку напрямую кажется делать нельзя. Авторы думаю предполагают, что правка должна осуществлятся с помощью языка IDC script. Например, у меня был случай, когда структуры генерировались в неверном порядке, при котором, структура использовалась для определения другой структуры раньше чем была определена сама. Чтобы сменить порядок пришлось прибегнуть с следующим функциям:
long GetStrucIdByName(string name);
long GetStrucIdx(long id);
long SetStrucIdx(long id,long index);
Они позволяют получить индекс обеих структур и поменять их значения. В итоге сгенерированный ассемблерный файл содержит определения структур в правильном порядке.

GUI интерфейс базы не дает поменять порядок следования структур методом драг-анд-дроп, так как этот метод не реализован.

Новая проблема заключается в том, что ассемблерный код содержит такую строку:

registration _EH3_EXCEPTION_REGISTRATION ?

это поле другой структуры и само поле является структурой с именем _EH3_EXCEPTION_REGISTRATION.
masm версии 10 от MSVC-2010 дает ошибку неверная инициализация структуры.

замена этой строки на:
registration _EH3_EXCEPTION_REGISTRATION <?>

или на
registration db sizeof _EH3_EXCEPTION_REGISTRATION dup (?)

приводит к коду без синтаксических ошибок.
Не знаю какая версия верна, и как это сделать в базе *.idb?

Если кто знает, что или как, подскажите.

С уважением,
Радмир
0
25.04.2017, 18:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2017, 18:40

Где можно скачать рабочую версию IDA PRO?
Где можно скачать рабочую версию IDA PRO? Или другого хорошего отладчика Помогите пожалуйста!...

Задача сохранить в IDA Pro Advanced.v6.1 сложившиеся изминения
Доброго дня! Задача сохранить в IDA Pro Advanced.v6.1 сложившиеся изминения? Думаю для этой...

Где можно скачать рабочую версию IDA PRO?
Где можно скачать рабочую версию IDA PRO? Или другого хорошего отладчика Помогите пожалуйста!...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru