Сейчас на форуме: -Sanchez- (+8 невидимых)

 eXeL@B —› Основной форум —› Использование IDA Pro
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 50 . 51 . >>
Посл.ответ Сообщение

Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 08 августа 2008 18:53
· Личное сообщение · #1

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

Сегодня в Options->Color настроил основное окно дизассемблера все в старом классическом стиле Borland ща стало или в стиле Far(для справки первая версия была написана на Borland C++), но когда подносишь курсор на jne\je то в хинте появляется фон бежевый. Вот никак не могу найти место где это настраивается?! Может кто шарит ? )

-----
My love is very cool girl.




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 13 октября 2010 12:09
· Личное сообщение · #2

reversecode пишет:
ps плагин в блоге под какую версию иды собран?

5.5

Rustem пишет:
Вместо obj,lib , можно для создания сигнатур и скомпиленый ехе засунуть в иду и мап файл, тоже все распознается

Эмм А причем тут map? map это ж тупо соответствие имя - адрес. Как он поможет находить функции в чужом файле?

-----
Реверсивная инженерия - написание кода идентичного натуральному




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

Создано: 13 октября 2010 13:48
· Личное сообщение · #3

Hexxx я же описал метод

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

2. грузим исследуемый файл в ида и применяем полученные сигнатуры

короче, мап применяется не к исследуемому файлу, а к тому, который мы компилили (в п.1)
хотя парсинг obj неплохая затея, но опять же надо знать ключи компилятора, иначе не распознается




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

Создано: 13 октября 2010 15:37
· Личное сообщение · #4

Rustem
сложно все у вас как то
можно все так же, только не exe, а obj сгенерить и map будет не нужен
а можно и вообще exe с дебаг инфо встроеной собирать, тогда тоже map не нужен



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

Создано: 13 октября 2010 16:54
· Личное сообщение · #5

reversecode
Я не настаиваю. Каждый решает сам



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 13 октября 2010 18:45
· Личное сообщение · #6

Rustem пишет:
к примеру, нужны сигнатуры STL от VisualStudio

1. компилишь свой файл с юзанием STL. чем больше вызовов, тем лучше. отсюда будем брать сигнатуры
2. говорим линкеру генерить мап файл.
3. в ехе получаем функции STL, от которых будем брать сигны, имена в мап файле.
4. грузим скомпиленый в ида
5. применяем мап.
6. ???
7. PROFIT ( получаем сигнатуры)

Вот так то, что ты говоришь, выглядит для меня.

-----
Реверсивная инженерия - написание кода идентичного натуральному





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

Создано: 13 октября 2010 18:58
· Личное сообщение · #7

Rustem пишет:
2. грузим исследуемый файл в ида и применяем полученные сигнатуры

короче, мап применяется не к исследуемому файлу, а к тому, который мы компилили (в п.1)

перечитал
и понял что то что вы говорите не в тему)
мы обсуждаем работу flirt и определения функций по сигнатурам
а то что вы говорите, это банальноя загрузка имен функций по скомпиленому файлу
в obj/lib она и так по умолчанию идет, а в exe идет или встроеная либо в pdb

вообщем перечитайте еще раз что мы обсуждаем



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

Создано: 13 октября 2010 19:09
· Личное сообщение · #8

reversecode
Похоже это вы не поняли. Rustem имел в виду способ создания сигнатур. Потом эти сигнатуры можно будет использовать для чего угодно.




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

Создано: 13 октября 2010 19:15
· Личное сообщение · #9

int
создавать сигнатуры из самой IDA?
я что то пропустил, научите



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

Создано: 13 октября 2010 19:33
· Личное сообщение · #10

Плагин есть, не помню как называется.




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

Создано: 13 октября 2010 19:33 · Поправил: Vamit
· Личное сообщение · #11

reversecode пишет:
я что то пропустил, научите

Вот этот пост пропустил , хотя ответ на него и давал

-----
Everything is relative...





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

Создано: 13 октября 2010 19:42
· Личное сообщение · #12

аа, ну так пусть так бы и говорил, "с помощью моих скриптов"



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 13 октября 2010 20:41
· Личное сообщение · #13

int пишет:
Плагин есть, не помню как называется.

idb2sig, idb2pat - все глючные

reversecode пишет:
и понял что то что вы говорите не в тему)

Я теперь тоже понял

Интересно сравнить насколько больше будет инфы если скармливать сигнатуры, и lib/obj через этот coff плагин...

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 13 октября 2010 20:43
· Личное сообщение · #14

int пишет:
Какой-нибудь из этих: sourceforge.net/projects/openstrsecii/files/В принципе я уже руками разбирать научился, но это очень неприятно делать. Либа использована в ASProtect SKE.

Сори, я не смогу помочь, я думал там есть для BCB варианты. А тут чисто дельфовое.

-----
Реверсивная инженерия - написание кода идентичного натуральному




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

Создано: 14 октября 2010 07:23
· Личное сообщение · #15

Как я понял, из одного описания метода (http://www.exelab.ru/f/action=vthread&forum=1&topic=12507 &page=11#14)
, без примера и картинок, не всем понятно

Пример создания сигнатур
1. Есть ехе который надо отреверсить, к примеру применить сигнатуры STL. Пусть будет target.exe
Если загрузить в IDA 5.5 то в принципе, она неплохо определила своей Flirt технологией. Но не все функции

2. Определяем компилятор target.ехе и опции.
PEID говорит Microsoft Visual C++ 7.0
Поле Linker Info - 7.10
Компилятор target.ехе VisualC++ 2003

3. Создаем свой ехе, с использованием STL и компилим в VisualC++ 2003
Я взял этот код.
Code:
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <vector>
  4. #include <string>
  5. #include <map>
  6. #include <set>
  7. #include <list>
  8. using namespace std;
  9. typedef map <string, long, less<string> > MAP;
  10. typedef set <int, less<int> > SET;
  11.  
  12. int _tmain(int argc, _TCHAR* argv[]){
  13.          string STR("STR");
  14.          vector <int> Vec;
  15.          list <int> LIST;
  16.          LIST.push_back(0); // Insert a new element at the
  17.          MAP m;
  18.          SET s;
  19.          s.insert(10);
  20.          s.insert(2);
  21.          m[STR]=0x666;
  22.          Vec.clear();
  23.          for(int i=0; i<10; i++)Vec.push_back(i);
  24.          cout<<STR;
  25.  
  26.          const basic_string <wchar_t> s1 ( L"abc" );
  27.          wstring s2 ( L"abc" ); // Uses the typedef for wstring
  28.  
  29.          // Comparison between two objects of type basic_string <wchar_t>
  30.          if ( s1 == s2 ) cout << "The strings s1 & s2 are equal." << endl;
  31.          else cout << "The strings s1 & s2 are not equal." << endl;
  32.          int i;
  33.          cin>>i;
  34.          return 0;
  35. }


Включаем генерацию MAP файла Projects->Properties->Linker->Debugging->Generate MAP file->Yes
Компилим. Получаем exe. Пусть будет strsig.exe



4. Грузим strsig.exe в IDA
Берем мой скрипт map2ida.idc
Перед загрузкой, мап файл надо немного подправить в любом текстовом редакоторе,
а именно сделать так чтобы сразу начиналось
с информации о функциях.( Address Publics by Value Rva+Base Lib:Object)

т.е. примерно с этих строк.

0001:00000000 ??3@YAXPAX0@Z 00401000 f i strsig.obj
0001:00000010 ??Bid@locale@std@@QAEIXZ 00401010 f i strsig.obj
0001:00000030 ?_Incref@facet@locale@std@@QAEXXZ 00401030 f i strsig.obj
0001:00000040 ?_Decref@facet@locale@std@@QAEPAV123@XZ 00401040 f i strsig.obj
0001:00000060 ??1locale@std@@QAE@XZ 00401060 f i strsig.obj
...............

Запускаем скрипт map2ida.idc. Ида может сообщить, что имена совпадают. жмем ОК



5. Теперь создаем сами сигнатуры из strsig.exe. Для этого запускаем мой скрипт sigcreat.idc
Ждем немного.
в консоли иды можно заметить сообщение
OK
Total Functions: 322
Signatures : 267
Collised : 38
Появляются файлы C:\sigcreat.txt C:\sig.bin

Всего создали сигнатур 267, коллизий 38




6. Возвращаемся к target.exe. Грузим в ида теперь ее
Запускаем мой скрипт sigapply.idc
Ждем немного.

В консоли видно сообщения
Code:
  1.    
  2. 00401040 --> ??Bid@locale@std@@QAEIXZ
  3. 00401070 --> ?_Decref@facet@locale@std@@QAEPAV123@XZ
  4. 004010E0 --> ?getloc@ios_base@std@@QBE?AVlocale@2@XZ
  5. 00401140 --> ??0?$ctype@D@std@@QAE@PBF_NI@Z
  6. 00401340 --> ?_Getcat@?$ctype@D@std@@SAIPAPBVfacet@locale@2@@Z
  7. 00401410 --> ?_Eos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IAE XI@Z
  8. 004014C0 --> ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ
  9. 00401520 --> ?snextc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHXZ
  10. 00401590 --> ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@IA EX_NI@Z
  11. 004015F0 --> ?_Ipfx@?$basic_istream@DU?$char_traits@D@std@@@std@@QAE_N_N@Z
  12. 004017A0 --> ?erase@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QA EAAV12@II@Z
  13. 00401A90 --> ??$?6DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YAAAV?$basic_ostrea m@DU?$char_traits@D@std@@@0@AAV10@ABV?$basic_string@DU?$char_traits@D@ std@@V?$allocator@D@2@@0@@Z
  14. 00401F00 --> ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Q AEAAV12@PBDI@Z
  15. 004021A0 --> ?assign@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Q AEAAV12@PBD@Z
  16. 004021D0 --> ??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PB D@Z
  17. 00401D40 --> ?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@Q AEAAV12@ID@Z
  18. 004028D7 --> ??0runtime_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$ allocator@D@2@@1@@Z
  19. 00403CBE --> __Atexit
  20. 0040414F --> ?_CallMemberFunction0@@YGXPAX0@Z
  21. 004045BE --> ??0exception@@QAE@XZ
  22. 00404679 --> ??0bad_cast@@QAE@PBD@Z
  23. Applyed: 21

Нашлось всего 21 функция. Потому что сама ида тоже неплохо определила по своим сигнатурам.
а к уже распознаныи идой функциям не применяется

В принципе, один раз сделать сигнатурные файлы, можно использовать и для других "target.exe"


Скрипты тут:
blackninja2000.narod.ru/files/idasignat.zip

Примеры от этой статьи тут:
blackninja2000.narod.ru/files/sigexampl.zip




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

Создано: 14 октября 2010 07:31 · Поправил: reversecode
· Личное сообщение · #16

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

у тебя просто ник не особо запоминающийся
и я те скрипты к последующему разговору не превязал, поэтому и возникла непонятна



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

Создано: 14 октября 2010 12:39
· Личное сообщение · #17

Rustem
Я видел живой пример использования твоих сигнатур. Вот какие минусы были выявлены:

* не сохраняются типы в именах функций, например (либо потому, что Делфи, либо автор сигны сделал MAP с неверными параметрами):
После сигн - UMPIntToBase256, должно быть:
@Mparith@UMPIntToBase256$qqr23Mparithtypes@TMPIntegeri
* работает крайне медленно (чего ещё ждать от скриптов), я всё же надеялся, что создаются sig-файлы, а не bin, который потом накладывается с помощью скрипта
* сигнатуры включают не хэши, а всю процедуру целиком, видимо кроме фиксапов и адресов, что увеличивает размер сигнатуры
* FLIRT объективно мощнее, так как адекватно реагирует на изменения, которые могли возникнуть под действием разных факторов, ему не нужно 100% сходство
* скрипт ищет процедуры и сравнивает их с базой, т.е. если процедура не была создана анализатором IDA или вручную, то она и не распознается



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

Создано: 14 октября 2010 13:19 · Поправил: Rustem
· Личное сообщение · #18

int
Хотелось, чтобы работало на любой версии иды без всяких плагинов , перекомпиляций, без ида сдк
Но, возможности у IDC ограничены и приходится извращаться с программингом. про скорость работы тоже понятно, что не высока
Насчет самой работы скриптов: Исходники есть, кому надо могут модифицировать



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

Создано: 14 октября 2010 15:23
· Личное сообщение · #19

int пишет:
Я видел живой пример использования твоих сигнатур. Вот какие минусы были выявлены:

* не сохраняются типы в именах функций, например (либо потому, что Делфи, либо автор сигны сделал MAP с неверными параметрами)


В каком смысле типы в именах функций ? Типы в mangled-кодировании имени ? Или параметры вызова ?
Если параметры, то это нужно в сторону .til библиотек копать ... Правда начальная поддержка объектов (классов) заявлена только в 6 версии tilib. Но если задать имя функции в mangled-кодировании может и получится ...



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

Создано: 14 октября 2010 15:31
· Личное сообщение · #20

awoland пишет:
Типы в mangled-кодировании имени

именно

Rustem
Да забыл сказать о плюсах. Тупой флирт (не смотря на всего его плюсы) не распознал три функции ("руками" их распознать было бы сложно). Две функции обозвал неправильно (они очень короткие, наверно виноват автор сигнатуры).

В общем вопрос по сигнам для StreamSec снимается! Всем кто помог огромная благодарность!



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 14 октября 2010 21:35
· Личное сообщение · #21

int пишет:
Тупой флирт не распознал

Нет, флирт не тупой. Это мы его тупо юзаем, не используя все возможности. Обычно все эти плагины и скрипты, которые генерят pat файл сигнатур для пропускания через flair, используют только начальные + конечные байты + crc. А там ведь можно еще кодировать что по такому-то смещению в функции встречается вызов функции с таким-то именем. Я например ни разу не видел чтобы кто-то это в сигнатуры выносил. Но в то же время я не могу сказать использует ли ида эту инфу. А если и использует, то как именно. Никакого лога, только уличная магия под названием flirt. И я не могу сказать насколько хорошо работает flirt, или насколько качественны сигнатуры.

-----
Реверсивная инженерия - написание кода идентичного натуральному




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

Создано: 14 октября 2010 21:49
· Личное сообщение · #22

Функция побайтово совпадает(!), кроме адресов, но флирт не взял. Как это ещё объяснить? Может всё-таки сигна задела данные, которыя меняются? А сигны делаются инструментами из FLAIR...



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 15 октября 2010 17:17 · Поправил: Hexxx
· Личное сообщение · #23

О!!! Я нашел!

Запускаем иду с ключем -zFFFFFFFF это врубает отладочный лог. И тогда оно пишет лог того как применяет сигнатуры:
Code:
  1. 42064E: match 30 bytes:
  2.     8CCA2E8916....B430CD218B2E02008B1E2C008EDAA3....8C06....891E
  3.     8C01
  4. not matched
  5. 42068E: match 2 bytes:
  6.     FAFC
  7.     FA01
  8. not matched
  9. 42078A: match 32 bytes:
  10.     1E068CC88ED88CC0A3....83C010A3....B430CD213C03730DB8....8ED8B822
  11.     1E00
  12. not matched
  13. 420A3A: match 32 bytes:
  14.     1E068CC88ED88CC0A3....83C010A3....B430CD213C03730DB8....8ED8B822
  15.     1E00
  16. not matched
  17. 420E00: flirt: skipping not loaded bytes
  18. 421000: flirt: skip non-code segment 421000..4BF000


-----
Реверсивная инженерия - написание кода идентичного натуральному




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

Создано: 24 октября 2010 00:56
· Личное сообщение · #24

Вопрос: как задать имя или тип функции так, чтобы явно указать параметр через регистры? Обычно IDA+HexRays сами догадываются, какие регистры являются параметрами, но вот если смесь параметров-регистров и параметров через стэк...

Добавлено:
Справка рулит: int __usercall func<ebx>(int x, int y<esi>); Без __usercall и строгого соответствия формату не бралось (если не указать регистр для возвращаемого значения, например).




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

Создано: 24 октября 2010 03:27 · Поправил: reversecode
· Личное сообщение · #25

int
это кстати раньше в топике уже обсуждали, где Y указание параметров функции

notif:
случайно обнаружил почему же hexrays обрезает некоторые функции при анализе, хотя окончание функции гараздо дальше, и стек не сломан(Alt+K не спасает)
оказывается IDA на некоторых не возратных функциях (к примеру assert, ....) ставит флаг NO_RETURN
хексрейс прерывает анализ функции если в теле функции встречается под функция с таким флагом
вобщем то исправляется легко, Alt+P и снимается этот флаг NO_RETURN
и исчезает разделитель - - - - - - - - - - - - - - в теле функции IDA

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



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

Создано: 28 октября 2010 20:12
· Личное сообщение · #26

Интересно, существуют сигнатуры для API функций? Просто часто сталкиваюсь с эмуляцией API и неплохо было бы иметь сигнатуры чтобы не "присматриваться" какая функция в данном случае.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше





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

Создано: 28 октября 2010 22:27
· Личное сообщение · #27

При полной эмуляции сигнатуры бесполезны, ибо может быть любой морфинг. Лучше анализировать как чёрный ящик на вход-выход.



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

Создано: 28 октября 2010 22:32
· Личное сообщение · #28

Archer
CreateFile и подобные тоже будешь как чёрный ящик анализировать? ;) Тогда уже таблицу системных вызовов составить и юзать эмулятор.



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

Создано: 29 октября 2010 06:56
· Личное сообщение · #29

подскажите, при использовании IDA можно ли както отдебажить потомка созданного внутри родительского процесса? Что пытаюсь сделать. Есть программулина, она выполняет кучу операций, а затем запускает потомка при помощи fork(который является демоном), сама выходит. Как можно при отладке перейти во внутрь потомка? Ну или хотябы узнать где будет точка входа в дочерний процесс?



Ранг: 156.1 (ветеран), 5thx
Активность: 0.020
Статус: Участник
Капрал

Создано: 29 октября 2010 10:33
· Личное сообщение · #30

А как интерпритировать вот такие заумные функции выдаваемые ИДА ?
Code:
  1. call    ds:??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE @PBD@Z ; std::basic_string<char,std::char_traits<char>,std::allocator<char>>::b asic_string<char,std::char_traits<char>,std::allocator<char>>(char const *)





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

Создано: 29 октября 2010 10:45
· Личное сообщение · #31

droidische
это под юниксом что ли?
под виндой олькой пользуйся

freeExec
что значит интерпретировать? в коментариях вроде все ясно расписано
std::string(char const *);
если кратко то так


<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 50 . 51 . >>
 eXeL@B —› Основной форум —› Использование IDA Pro
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати