Сейчас на форуме: bartolomeo, -Sanchez-, morgot, sashalogout (+4 невидимых)

 eXeL@B —› Софт, инструменты —› Помониторить вызовы из таблицы экспорта в двух и более разных user dll
Посл.ответ Сообщение

Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 03 апреля 2020 11:37
· Личное сообщение · #1

Всем привет!
У программы есть две (три, четыре...) разных dll'ки - они взаимодействуют между собой (вызывают api друг друга). Вопрос: существует ли готовый софт или решение, который сам похукает все api из таблицы экспорта этих user dll, сохранит результаты в отдельный файл и сможет вывести паутину вызовов в красивые графы (типа ida или x64dbg)?

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

Ранг: 13.2 (новичок), 13thx
Активность: 0.28=0.28
Статус: Участник

Создано: 03 апреля 2020 13:13
· Личное сообщение · #2

Мечтать не вредно.

В x64dbg поставить бряки на весь експорт и логировать? Тормознуто?

Можно от руки вырезать адреса функций, засунуть в таблицу и модифицировать pintool lighthouse для лога вызовов, если софт без антидебага.
https://github.com/gaasedelen/lighthouse/blob/master/coverage/pin/CodeCoverage.cpp#L173

Хукать ЕАТ, кодесы по интернетам.

Рисовать графы Ида умеет только если в одном бинарнике, так что нужен либ который будет рисовать edges, nodes.



Ранг: 19.5 (новичок), 8thx
Активность: 0.050.08
Статус: Участник

Создано: 03 апреля 2020 14:12
· Личное сообщение · #3

ELF_7719116 пишет:
существует ли готовый софт

Вряд ли, я такого не встречал.
С первыми двумя задачами можно вполне самостоятельно разобраться за пару-тройку вечерков.
Но с красивым графом нужно будет помудрить. Напрашивается самый обычный DialogBox с каким-нибудь подходящим контролом, и простейший gdi.
Но лепить гуй всегда не охота)

Ещё вариант паутину выводить в шарп-приложение (благо там конструктор есть), но тогда придётся заморачиваться со связью двух ЯП.

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


Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 03 апреля 2020 15:57
· Личное сообщение · #4

dezmand07 пишет:
Вряд ли, я такого не встречал.
С первыми двумя задачами можно вполне самостоятельно разобраться за пару-тройку вечерков.
Но с красивым графом нужно будет помудрить. Напрашивается самый обычный DialogBox с каким-нибудь подходящим контролом, и простейший gdi.
Но лепить гуй всегда не охота)

Ещё вариант паутину выводить в шарп-приложение (благо там конструктор есть), но тогда придётся заморачиваться со связью двух ЯП.

+1

Что-то подобное - Windows 7 DLL EXPORT Headers

This image is a Gelphi generated undirected graph showing the EXPORT header entries from windows 7 DLL's and other DLL's.

The Open Graph Viz Platform
Gephi is the leading visualization and exploration software for all kinds of graphs and networks. Gephi is open-source and free.

Runs on Windows, Mac OS X and Linux. --> Link <--

I have been thinking about how windows systems utilise DLL files, and how they are linked. Essentially they idea I have is centred around API calls to and from a DLL. Say for example you have a custom DLL (mooop.dll) that is called in a normal manner by an executable (ganoop.exe), This DLL is passed a parameter from the exe, executed and passed back. However, if the DLL needs to paint to the screen or access kennel level functions it pre loads dlls such as system32.dll and all other DLL’s as required. My thoughts were along the lines can you bounce parameters from one DLL to another in a chain from a untrusted user mode DLL to a system DLL (for example kernel32.dll) from the executable. As the user mode DLL is ‘trusted; by the downstream system level DLL I was wondering if you could use implicit trust between DLL’s if that exists at all?

I have been checking the import/export tables in win7 DLL’s and when you extract the tables and map them against each other it shows an interesting hierarchy or possible DLL interactions, and could show potential attack vectors to a trusted or vulnerable DLL.So my question is, can you bounce params between DLL’s without calling the DLL that you wish to exploit directly?


Here is a bit of Python code that extracts the PE import headers from DLL files. You will need to download --> pefile <-- to use this code.

Code:
  1. import pefile, os, glob
  2.  
  3. pathname = 'c:\dll\'
  4. source_dll = []
  5. child_dll = []
  6. temp = []
  7. = open(r'c:\win.txt', 'w')
  8.  
  9. for infile in glob.glob( os.path.join(pathname, 'c:\*.*') ):
  10. pe = pefile.PE(infile, fast_load=True)
  11. if.write("\n" + str(infile))
  12. if pe.OPTIONAL_HEADER.DATA_DIRECTORY[pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_IMPORT']].VirtualAddress == 0:
  13. print infile
  14. else:
  15. pe.parse_data_directories(directories=[pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_IMPORT']])
  16. for entry in pe.DIRECTORY_ENTRY_IMPORT:
  17. child_dll = entry.dll
  18. temp = infile.lstrip( 'c:\dll\' )
  19. f.write("" + str(temp))
  20. f.write(", " + str(child_dll))
  21. f.write("\n")
  22. f.close()


-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 03 апреля 2020 15:58
· Личное сообщение · #5

dezmand07 пишет:
Но с красивым графом нужно будет помудрить.

Для этого существуют форматы файлов-графов, типа *.dot. Формат очень простой. Просмотрщик dot'а есть в составе иды например, можно воспользоваться и другими.

-----
2 оттенка серого



 eXeL@B —› Софт, инструменты —› Помониторить вызовы из таблицы экспорта в двух и более разных user dll
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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