Сейчас на форуме: Rio, vsv1, site-pro (+7 невидимых)

 eXeL@B —› Софт, инструменты —› Вопрос по IDA
<< . 1 . 2 . 3 . >>
Посл.ответ Сообщение


Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 17 сентября 2011 21:40 · Поправил: PE_Kill
· Личное сообщение · #1

Был же топик где спрашивали всё по IDA, что то найти его не могу, может прилепить в этом подфоруме?

Вопрос такой. В делфи есть такое понятие как локальная процедура. Эта процедура описывается в разделе var и имеет доступ ко всем переменным родительской процедуры. Для доступа к переменным генерируется такой код:
Code:
  1. push ebp
  2. call NestedProc
  3. pop ecx


Проблема в том, что IDA не понимает, что NestedProc через ebp работает со стеком основной процедуры. Как это поправить? Вот пример:
Code:
  1. procedure TestProc;
  2. var
  3.   Param1, Param2: Cardinal;
  4.   procedure NestedProc;
  5.   begin
  6.     Param2 := Param2 + Param1;
  7.   end;
  8. begin
  9.   Param1 := $1234;
  10.   Param2 := $4321;
  11.   NestedProc;
  12. end;


Вот IDA разобрала основную процедуру:
Code:
  1. .text:0040B058 TestProc        proc near               ; CODE XREF: .itext:0040C194p
  2. .text:0040B058
  3. .text:0040B058 Param2          = dword ptr -8
  4. .text:0040B058 Param1          = dword ptr -4
  5. .text:0040B058
  6. .text:0040B058                 push    ebp
  7. .text:0040B059                 mov     ebp, esp
  8. .text:0040B05B                 add     esp, 0FFFFFFF8h
  9. .text:0040B05E                 mov     [ebp+Param1], 1234h
  10. .text:0040B065                 mov     [ebp+Param2], 4321h
  11. .text:0040B06C                 push    ebp
  12. .text:0040B06D                 call    NestedProc
  13. .text:0040B072                 pop     ecx


А вот так она видит процедуру NestedProc:
Code:
  1. .text:0040B044 NestedProc      proc near               ; CODE XREF: TestProc+15p
  2. .text:0040B044
  3. .text:0040B044 arg_0           = dword ptr  8
  4. .text:0040B044
  5. .text:0040B044                 push    ebp
  6. .text:0040B045                 mov     ebp, esp
  7. .text:0040B047                 mov     eax, [ebp+arg_0]
  8. .text:0040B04A                 mov     eax, [eax-4]
  9. .text:0040B04D                 mov     edx, [ebp+arg_0]
  10. .text:0040B050                 add     [edx-8], eax
  11. .text:0040B053                 pop     ebp
  12. .text:0040B054                 retn
  13. .text:0040B054 NestedProc      endp


-----
Yann Tiersen best and do not fuck




Ранг: 117.5 (ветеран), 5thx
Активность: 0.080.01
Статус: Участник

Создано: 31 октября 2011 11:32
· Личное сообщение · #2

reversecode все выходные пытался под нужное ядро скомпилить Linux server, установил все пакеты нужные - итог ошибка 127 в idamake.pl и пиз...ц. видимо все таки нормально sdk и server работает не с такими старыми ядрами



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

Создано: 03 марта 2012 10:02 · Поправил: crackintosh
· Личное сообщение · #3

Имею дизассеблированный IDA-й кусок кода:
Code:
  1. .text:00401C39 push    ebp
  2. .text:00401C3A mov     ebp, esp
  3. .text:00401C3C sub     esp, 0C4h
  4. .text:00401C42 mov     [ebp+var_AC], ecx
  5. .text:00401C48 mov     ecx, [ebp+var_AC]
  6. .text:00401C4E call    ?OnInitDialog@CDialog@@UAEHXZ   ; CDialog::OnInitDialog(void)
  7. .text:00401C53 push    1
  8. .text:00401C55 push    2710h
  9. .text:00401C5A push    0
  10. .text:00401C5C mov     ecx, [ebp+var_AC]
  11. .text:00401C62 add     ecx, 164h
  12. .text:00401C68 call    ?SetRange@CSliderCtrl@@QAEXHHH@Z ; CSliderCtrl::SetRange(int,int,int)

Тут (.text:00401C68) понимаю что имеет меcто вызов функции CSliderCtrl::SetRange с 3-мя значениями INT(начальное=0, максимальное=2710h=10000d, шаг=1). Значение regECX после интрукции
Code:
  1.  add     ecx, 164h

равно = 0126A154h
т.е.:
Code:
  1. debug038:0126A154 db 0E8h ; ш
  2. debug038:0126A155 db  7Fh ; 
  3. debug038:0126A156 db  44h ; D

Встал вопрос: какой ID у элемента "Slider" при вызове функции?

Тоже самое и выше при вызове CDialog::OnInitDialog. Значение regECX = 01269FF0h
т.е.:
Code:
  1. debug038:01269FF0 db  68h ; h
  2. debug038:01269FF1 db  7Dh ; }
  3. debug038:01269FF2 db  44h ; D

какой ID у элемента диалогового окна содержащий элемент SLIDER?




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

Создано: 03 марта 2012 11:53
· Личное сообщение · #4

crackintosh
Что-то вы не туда копаете:
ecx = this - указатель на класс диалога, CSliderCtrl элемент окна диалога, его смещение в классе диалога - 0х164.
Чтобы найти ИД диалога нужно смотреть виртуальную функцию диалога DoModal(void), в которой диалог будет загружаться из ресурсов CDialogTemplate::Load(char const *) аргумент этой функции и есть ИД диалога. Если же нужен ИД CSliderCtrl, то его проще посмотреть в ресурсах соответствующего диалога.

-----
Everything is relative...





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 03 марта 2012 11:57 · Поправил: OKOB
· Личное сообщение · #5

Какое отношение имеют приведенные значения в регистре ЕСХ к АйДи?

ebp+var_AC - указатель на объект типа CDialog (адрес).
add ecx, 164h - смещение в объекте до поля типа CSliderCtrl (адрес).

ЗЫЫЫЫ: не успел...

-----
127.0.0.1, sweet 127.0.0.1




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

Создано: 03 марта 2012 14:06
· Личное сообщение · #6

Цель такова: в окне несколько слайдеров.
По коду сверху не могу понять - к какому слайдеру обращается этот или иной кусок кода.
Как это определяется? Знаю что по ID. Тока как это в коде видно?




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

Создано: 03 марта 2012 14:31
· Личное сообщение · #7

crackintosh
Тока как это в коде видно?
Учите сначала MFC.

-----
Everything is relative...





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 03 марта 2012 17:12
· Личное сообщение · #8

crackintosh пишет:
Знаю что по ID. Тока как это в коде видно?

Обращение к слайдерам идёт с помощью методов класса слайдер, в ecx передаётся указатель на определённый экземпляр слайдера. Если слайдеры являются членами класса-наследника диалог, то в экземпляре этого класса и хранятся указатели на слайдеры. Один вы нашли - add ecx, 164h от начала диалога. Друрие имеют другие смещения. Как определить нужный? Ищем вызов слайдерских фунок в диалоге, брякаемся, запоминаем смещение, меняем аргументы так, чтоб это было визуально видно, отпускаем. Визуально делаем вывод за какой слайдер отвечает указатель по запомненому смещению.

-----
Следуй за белым кроликом




Ранг: 13.8 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 07 марта 2012 07:10
· Личное сообщение · #9

Подскажите чем отличается idau.exe от idaw.exe?




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 07 марта 2012 19:54
· Личное сообщение · #10

В очередной раз ковыряю прогу с OpenSSL. Имена функций понаходил, код стал хоть немного понятный, но хотелось бы и
структуры впихнуть. Я с IDA не слишком хорошо знаком, поэтому возник вопрос - можно ли где нибудь слить структуры под
OpenSSL и импортировать их как-то в IDA? Руками собирать их - дико долго

-----
Research For Food





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

Создано: 07 марта 2012 20:33 · Поправил: reversecode
· Личное сообщение · #11

IDA умеет парсить .h файлы на предмет С/C++ структур(и возможно классов)
и превращать это все в свои структуры
можно на краний случай набить .h и потом его скормить IDA
enum тоже можно в .h впихнуть
только там есть глюк enum ... непомню уже какой

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

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

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

Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 07 марта 2012 20:57
· Личное сообщение · #12

Смотреть в сторону tilib. Там более конфигурируемый парсер.

-----
старый пень


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

Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 08 марта 2012 00:24
· Личное сообщение · #13

cosinus пишет:
Подскажите чем отличается idau.exe от idaw.exe?

idau.exe может работать под досом



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 08 марта 2012 00:54
· Личное сообщение · #14

reversecode
А причем тут либы? Эта тулза хедеры парсит.

-----
старый пень





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

Создано: 08 марта 2012 01:07
· Личное сообщение · #15

r_e
а в целом говрил, если мне память не изменяет
то кроме сигнатур помоему в флирт еще и структуры добавляются
и после определения сигнатуры - флирт может в структуры IDA запихать используемую стуктуру
мб я ошибаюсь и то с другой кактой технологие IDA я спутал, где совмещенно обнаружение+добавление стуктурных типов данных



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 08 марта 2012 14:58
· Личное сообщение · #16

reversecode
Мне кажется ты путаешь. В сиг-файлах сигнатуры функций. Структуры добавляются только известные иде. А вот дополнительные структуры и енумы - в til файлах.

-----
старый пень




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

Создано: 06 апреля 2012 10:32 · Поправил: awoland
· Личное сообщение · #17

reversecode TIL хранит информацию о типах: структурах, енумах, и функциях (формат вызова, типы возвращаемого значения и аргументов, их количество). SIG хранит только сигнатуры функций. Если сначала подгрузить нужный .til, а затем применить .sig, то IDA в автомате прекрасно все распознает (можно даже через .idc) . У меня это работает через userload.idc :
Code:
  1.  
  2. if (!LoadTil("somelib")) {
  3.                  Warning("Failed loading "somelib.til"!\n");
  4.                  return;
  5. else {
  6.                  ApplySig("somelib");
  7. }
  8.  




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

Создано: 31 июля 2012 01:29
· Личное сообщение · #18

В IDA можно создать хук на вызов API функции найдя ее в адресном пространстве и
установив на нее апаратный брекпоинт, будет ли это всегда срабатывать или стоит в некоторых случаях
использовать SoftIse и от чего это зависит.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 24 июля 2013 18:34
· Личное сообщение · #19

Кто-нибудь знает адекватный способ в IDC вытащить вещественные числа в строковой формат?

.data:0041A514 var_3_2 dd 3.2

Пробовал разные варианты, но все не то... Большинство функций для работы с памятью в IDA имеют тип string и long. Последний вытаскивает корректное значение, если бы оно было целым. А вот вещественный тип получить не получается.

Добавлено спустя 4 минуты
GetFloat помогла. Но ее блин нет в документации (точнее в индексе функций IDC)

Нашел здесь: https://www.hex-rays.com/products/ida/support/idapython_docs/idc-module.html



Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 24 июля 2013 20:59
· Личное сообщение · #20

To int

есть ещё GetDouble(ea) - вещественное 8 байт,
а GetFloat(ea) - 4 байта

все IDC-шные функции описаны в IDC.IDC, в хелпах хуже.



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

Создано: 25 июля 2013 10:01
· Личное сообщение · #21

Подскажите пожалуйста,
можно ли, и если да, то чем спрятать IDA от Themida?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 25 июля 2013 10:55
· Личное сообщение · #22

MadHacker

--> Ida Stealth ? <--

-----
Stuck to the plan, always think that we would stand up, never ran.


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


Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 27 ноября 2013 18:37
· Личное сообщение · #23

Разгребаю ROM с архитектуры на которой путем переключения страниц (2..15) по 16к разные части прошивки проецируются на одни и теже адреса (8000-BFFF), аналогично RAM имеет (0..7) страниц по 8к проецируемые на Е000-FFFF. Разбросал прошивку по страницам благодаря назначению поля Base при создании сегмента (https://www.hex-rays.com/products/ida/support/idadoc/508.shtml).
В дальнейшем необходимо чтобы для любых переключаемых страниц кода были видны первые две страницы 0000-7FFF (ядро системы), своя в адресах 8000-BFFF, ну и любая страница RAM.
Для этого ИМХО предназначена опция Edit->Segments->Change segment translation
https://www.hex-rays.com/products/ida/support/idadoc/521.shtml
Но сколько не крутил с этой опцией нормально ни один функционал не работает (O/Ctrl+O/Alt+R/Ctrl+R).
Команды типа:
op [mem],r и op r,[mem] еще как то удается разресолвить на нужные адреса, а команды со смещением в виде операнда типа mov r,offset val вообще не заводятся.
Может кто пользовал ИДУ для подобных задач и просветит?

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 117.5 (ветеран), 5thx
Активность: 0.080.01
Статус: Участник

Создано: 28 ноября 2013 23:35
· Личное сообщение · #24

так убеждаю всех что вышла 6.5. ida )))) есть часть багов реализованных именно посредством статики.... остальное - бред и нет поддеожки 64)))кому интересно пока могу дать отчет



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 21 декабря 2013 21:37
· Личное сообщение · #25

Кто-нибудь сталкивался с тем что не работают хардварные бряки?
WinXP SP3 + IDA Pro + IdaStealth (галка на защите бряков стоит).

-----
старый пень





Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 22 декабря 2013 02:36
· Личное сообщение · #26

r_e
Вообще или под определённой виртуалкой? В VirtualBox если хостовая машина не поддерживает виртуализацию в гостевой не работают хардварные бряки (тикет #477 висит уже много лет)

Также при отладке в IDA с использованием WinDbg и установке больше четырёх хардварных бряков они не работают вообще.

-----
DREAMS CALL US




Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 22 декабря 2013 12:10
· Личное сообщение · #27

=TS=
Не, проблема похоже в антиотладке.

-----
старый пень




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

Создано: 23 декабря 2013 14:00
· Личное сообщение · #28

Изучаю прошивку ATmega168, IDA 6.1. Как заставить брать данные из RAM. Alt-R не работает, т.е если указать на сегмент RAM. то ничего не происходит.




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

Создано: 23 декабря 2013 17:27
· Личное сообщение · #29

если ентером щелкать на этом оффсете то оно прыгает в нужное место?
- если да то, другие всякие комбинации O/Ctrl+O/Alt+R/Ctrl+R
- если не прыгает, значит неправильно настроена сегментация, читайте выше пост OKOB
кстати не знаю решил он эту проблему или нет



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

Создано: 23 декабря 2013 20:59
· Личное сообщение · #30

по энтеру прыгает на сегмент кода, по Ctrl+R непонятно что указывать.
Сегмент ROM - 0
Сегмент RAM - 800100
Base address - ???
Target address - ???
Target delta - ???
в RAM находятся как данные, так и адреса (HIGH+LOW)




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

Создано: 23 декабря 2013 22:00
· Личное сообщение · #31

там какая то заморочка с трансляцией, уже забыл, в целом звучит как то так

если размер сегмента меньше чем 65536 кажется, то нужно использовать в адрессации сегменты:селекторы, и задать это можно только из скрипта idc
вариантов манипулировать это в гуи нет


<< . 1 . 2 . 3 . >>
 eXeL@B —› Софт, инструменты —› Вопрос по IDA
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати