Сейчас на форуме: 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





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

Создано: 24 декабря 2013 03:33 · Поправил: Dr0p
· Личное сообщение · #2

reversecode

Главное не путать отрешённое условное понятие секций, иногда называемых сегментами с реальными сегментами железячными

По сабжу - мне ида не нравится(слишком много всяких косяков и прочих кривостей), юзаю только из за символов(pdb) и быстрой загрузки(хотя возможно в случае с другими архитектурами это мб единственный дизасм). Юзаю 5-ю версию, где взять посвежее бесплатно ?




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

Создано: 24 декабря 2013 15:23 · Поправил: reversecode
· Личное сообщение · #3

логику работы refs при разных моделях сегментации в ида - рассказывай ильфаку, я ее только один раз крутил, чето получилось и забыл

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



Ранг: 42.2 (посетитель), 42thx
Активность: 0.040
Статус: Участник

Создано: 02 января 2014 23:33
· Личное сообщение · #4

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

как запретить ей автодизасм всего того что я не просил?



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

Создано: 03 января 2014 00:07
· Личное сообщение · #5

Выключить Аналитику при загрузке бинаря.

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




Ранг: 42.2 (посетитель), 42thx
Активность: 0.040
Статус: Участник

Создано: 03 января 2014 00:16
· Личное сообщение · #6

она то отключена , но даже по кнопке С ида дизасмит не только текущую но и последующие инструкции пока не упрется в инвалидную



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 03 января 2014 00:28
· Личное сообщение · #7

еще в Kernel Options 1 отключить Trace execution flow

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

Ранг: 42.2 (посетитель), 42thx
Активность: 0.040
Статус: Участник

Создано: 04 января 2014 22:23
· Личное сообщение · #8

Ну с этим все ясно .
Вторая проблема :

при трассировке имеем последовательность инструкций типа :

pushf
....
....
....
....
popf

и на последней падаем с исключением 80000004 .
нопить и увеличивать значение ESP не канает ибо от флагов дальше прыжки .
пытаться пройти инструкцию по request_step_into() тож результата не дает .

как победить ?




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

Создано: 04 января 2014 22:36
· Личное сообщение · #9

помоему вообще не к ида вопросы а к анти дебагеру
картинку исключения можно?



Ранг: 42.2 (посетитель), 42thx
Активность: 0.040
Статус: Участник

Создано: 04 января 2014 22:54 · Поправил: kid
· Личное сообщение · #10

суть в том что трэйс записываю с ДЛЛки , а прога падает с простым мессадж боксом :
External exception 80000004

правильно ли я понимаю что эксепшн вываливается изза того что при поднятом флаге трассировки пытаемся выполнить инструкцию popf ?

вот реальный кусок кода на котором получаю исключение :

Code:
  1. 0x020ADD04 :: pushf
  2. 0x020ADD05 :: mov     edi, 3C3D5h
  3. 0x020ADD0A :: xor     edi, offset unk_3CE2654
  4. 0x020ADD10 :: xor     edi, 0DD08BAF6h
  5. 0x020ADD16 :: call    near ptr unk_21058BF
  6. 0x021058BF :: lea     esp, [esp+4]
  7. 0x021058C6 :: sub     edi, 93692F09h
  8. 0x021058CC :: jmp     near ptr unk_20ADD1E
  9. 0x020ADD1E :: add     edi, 0CFCC0E29h
  10. 0x020ADD24 :: add     edi, 23FDDB2Dh
  11. 0x020ADD2A :: xor     edi, 3B509B9Eh
  12. 0x020ADD30 :: xor     edi, 22140581h
  13. 0x020ADD36 :: cmp     edi, 266287DBh
  14. 0x020ADD3C :: popf
  15. 0x020D97A2 ::  jz      near ptr unk_20D97A2


зы : ясно что не ида косячит , вопрос в том как победить ?




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

Создано: 04 января 2014 23:06
· Личное сообщение · #11

анти дебаг для иды
стелсы итд



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

Создано: 05 января 2014 00:01
· Личное сообщение · #12

kid
Выпилить исключения (reload exceptions для базы), на вопрос pass exceptions to program (или как-то так) сказать No

Но не думаю, что так жизненно необходимо трассировать через popf. Ни что не мешает поставить бряк после popf (на адрес 0x0x020D97A2 например) и шлепнуть F9. Ну или действительно поставить IDA Stealth плагин, который уберет флаг трассировки при трассировке popf.

kid пишет:
ясно что не ида косячит

Почему-то в нормальных отладчиках флаг трассировки убирается, кроме особо заковыристых случаев (типа pop ss и им подобных). Во 2-ой ольке даже трюк с pop ss обходится.



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

Создано: 24 апреля 2014 16:43 · Поправил: SPLESH
· Личное сообщение · #13

Вопрос есть ли плугин который бы показывал дифф между дизасемблингом двух бинарных файлов (ARM) (нужен под линукс но если нето то и под винду можно) пробывал PatchDiff2 но он почемуто висит при открытии idb второго файла.




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

Создано: 24 апреля 2014 16:47
· Личное сообщение · #14

--> Link <--

закройте эту тему и оставте линк на --> Link <--




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 апреля 2014 17:08
· Личное сообщение · #15

На этом и закрою, что топики плодить.


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