Сейчас на форуме: asfa, _MBK_, Adler, bartolomeo (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Определение функций Ruby (IDA Pro)
Посл.ответ Сообщение

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

Создано: 09 сентября 2012 22:29
· Личное сообщение · #1

Привет. Есть dll-ка, в нее встроен Ruby. pdb нет. Необходимо как-то подсветить функции, относящиеся к Ruby в IDA. На уровне "где-то слышал" знаю, что вроде как можно сгенерить сигнатуры Ruby, а потом по ним найти функции, но не знаю как делать ни то, ни другое. Буду благодарен за помощь.




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

Создано: 09 сентября 2012 22:40 · Поправил: reversecode
· Личное сообщение · #2

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

может в этой dll весь руби интерпретатор? найдите какой нибудь виндовс порт от руби и разберитесь со структурой данных



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

Создано: 09 сентября 2012 22:44 · Поправил: trueinsider
· Личное сообщение · #3

Я имел в виду Embedded Ruby. Он встроен в dll и имеет свои функции (rb_define_class, rb_define_method, rb_define_alias и т.д.), которые позволяют определять классы и прочее прямо в C++. И да, это полноценный интерпретатор. Там есть функция, через которую ему можно скармливать скрипты.




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

Создано: 09 сентября 2012 22:54
· Личное сообщение · #4

это оффициальный интерпретатор? или кто то кастомно его собирал?
если оффициальный - соберите свой под виндой, а потом утилитой(хм пробегала на лабе помоему автор Hexx) которая умеет сравнивать два похожих файла и натягивать сигнатуры одного на другого

если это чейто интерпретатор нонейм, то даже не знаю чем помочь

еще кстати бывает если офф интепретатор то pdb или debug символы к нему там же на офф сайте можно поискать



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

Создано: 09 сентября 2012 23:50 · Поправил: F_a_u_s_t
· Личное сообщение · #5

Это?
Code:
  1. Function _identical_path at 0x0
  2. Function _false_value at 0x8
  3. Function _true_value at 0x10
  4. Function _verbose_setter at 0x1c
  5. Function _opt_W_getter at 0x38
  6. Function _locale_path at 0x58
  7. Function _dump_option at 0x7c
  8. Function _disable_option at 0x2a0
  9. Function _enable_option at 0x380
  10. Function _restore_lineno at 0x460
  11. Function _process_sflag at 0x47c
  12.   called from _process_options(0x31a5)
  13.   called from _process_options(0x3403)
  14. Function _printf at 0x6bc
  15.   called from _process_options(0x35aa)
  16.   called from _process_options(0x35ca)
  17.   called from _process_options(0x3967)
  18. Function _rb_f_sub at 0x6d8
  19. Function _set_arg0 at 0x7a8
  20.   called from _rb_f_sub(0x7a6)
  21. Function _expand_include_path at 0x8b4
  22.   called from _set_arg0(0x8b3)
  23. Function _rb_f_chomp at 0x904
  24. Function _rb_f_chop at 0x9d4
  25.   called from _rb_f_chomp(0x9d2)
  26. Function _rb_f_gsub at 0xaa8
  27.   called from _rb_f_chop(0xaa6)
  28. Function _proc_options at 0xb78
  29.   called from _rb_f_gsub(0xb76)
  30.   called from _moreswitches(0x20d5)
  31.   called from _process_options(0x2e8d)
  32. Function _moreswitches at 0x1f88
  33.   called from _proc_options(0x1f83)
  34.   called from _load_file_internal(0x248f)
  35.   called from _process_options(0x3649)
  36. Function _load_file_internal at 0x214c
  37. Function _ruby_push_include at 0x2998
  38. Function _ruby_incpush at 0x2a20
  39. Function _ruby_incpush_expand at 0x2ab0
  40. Function _DllMain@12 at 0x2b64
  41. Function _rb_libruby_handle at 0x2b80
  42. Function _ruby_init_loadpath_safe at 0x2b8c
  43.   called from _ruby_init_loadpath(0x2e69)
  44.   called from _process_options(0x2f9f)
  45. Function _ruby_init_loadpath at 0x2e5c
  46. Function _process_options at 0x2e70
  47.   called from _ruby_process_options(0x40fe)
  48. Function _rb_load_file at 0x3d30
  49.   called from _process_options(0x3d2b)
  50. Function _ruby_script at 0x3e04
  51. Function _ruby_prog_init at 0x3e64
  52. Function _ruby_set_argv at 0x3f94
  53. Function _ruby_process_options at 0x4018
  54. Function _ruby_sysinit at 0x411c

или что то другое?
Если это то с десяток строк на python'e

reversecode
это оффициальный интерпретатор? или кто то кастомно его собирал?
Вариаций рубина около десятка, топикстартер предлагает угадать какой используется.



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

Создано: 11 сентября 2012 23:49
· Личное сообщение · #6

reversecode
Официальный C'шный интерпретатор (это видно и по названиям функций). Инфа по встраиванию есть тут: http://www.rubycentral.com/pickaxe/ext_ruby.html

F_a_u_s_t
Если речь о формате результата, то вполне ок. Но сам результат получен от другой реализации интерпретатора.



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

Создано: 12 сентября 2012 00:02 · Поправил: F_a_u_s_t
· Личное сообщение · #7

trueinsider
Да, привел пример вывода.
Дайте скомпиленый семпл.
Add:
Все, я вас понял, используется стандартный рубин, только вкомпилен, тогда ничего сложного, ставьте IDA + IDAPithon в папке examples вам нужен скрипт ex_func_chooser.py выводит адреса функций и имена, допилите его что бы делал сигнатуру и ресерчите libmsvcrt-ruby191-static.a, полученные сигнатуры накладываете в своем приложении, не видя цели ничего больше посоветовать не могу, можете поискать какой нибудь парсер COFF формата, дабы избавить себя от ручной работы.



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

Создано: 12 сентября 2012 00:55
· Личное сообщение · #8

Вот сама dll-ка: http://rghost.ru/40316165 (был снят аспр)
В нее "вшит" Ruby версии 1.8.1 (т.к. dll-ка довольно старая)


 eXeL@B —› Вопросы новичков —› Определение функций Ruby (IDA Pro)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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