eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Как работать с системными библиотеками?
Посл.ответ Сообщение

Ранг: 3.3 (гость)
Статус: Участник

Создано: 25 мая 2017 16:10 New!
Цитата · Личное сообщение · #1

Добрый день. Подскажите пожалуйста как работать с библиотекой которая не была инициализирована в начале программы, ну например вызвать из kernel32.ReadFile и чтобы не вылетал Access Violation? Чтобы было ещё понятнее, есть левая программа, я запускаю её через ollydbg и копирую байт-код(ну или опкоды, как кому понятнее) который делает тупо invoke kernel32.ReadFile, но к сожалению выскакивает Access Violation и всё повисает Так вот как сделать динамическое обращение к библиотеке ?

Ранг: 579.0 (!)
Статус: Модератор

Создано: 25 мая 2017 16:16 New!
Цитата · Личное сообщение · #2

LoadLibrary, GetModuleHandle, GetProcAddress

Ранг: 3.3 (гость)
Статус: Участник

Создано: 25 мая 2017 17:46 · Поправил: alex-rudenkiy New!
Цитата · Личное сообщение · #3

r_e, FacePalm LoadLibrary лежит в Kernel32, который как раз мне и нужно подключить

Добавлено спустя 3 минуты
Я имею ввиду, что с библиотеками нужно обращаться грубо говоря как из shell-последовательности байт.


Ранг: 222.3 (наставник)
Статус: Участник

Создано: 25 мая 2017 17:54 · Поправил: HandMill New!
Цитата · Личное сообщение · #4

alex-rudenkiy пишет:
LoadLibrary лежит в Kernel32, который как раз мне и нужно подключить

Ваш этот kernel32 уже по умолчанию загружен в ваш процесс. Не верите? Проверьте и убедитесь что это так.

alex-rudenkiy пишет:
грубо говоря как из shell-последовательности байт

Взгляните на такую кастомную реализацию загрузчика библиотек:
https://github.com/fancycode/MemoryModule

Но лучше понять как использовать то что порекомендовал r_e, так меньше проблем будет.

Ранг: 409.7 (мудрец)
Статус: Участник

Создано: 25 мая 2017 21:45 · Поправил: dosprog New!
Цитата · Личное сообщение · #5

HandMill пишет:
Ваш этот kernel32 уже по умолчанию загружен в ваш процесс. Не верите? Проверьте и убедитесь что это так.

Он хэндл kernel'а не знает как получить.
И документированных и гарантированно рабочих способов для этого нет.

Вот как это делается:

Code:
  1.              mov eax, fs: [ 30h]
  2.              mov eax,[eax + 0Ch]
  3.              mov eax,[eax + 1Ch]
  4.              mov eax,[eax      ]
  5.              mov eax,[eax + 08h]

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


Ранг: 135.1 (ветеран)
Статус: Участник

Создано: 25 мая 2017 22:24 · Поправил: VOLKOFF New!
Цитата · Личное сообщение · #6

На новых ОС этот код кернелбэйс должен вернуть вместо кернел32, кошернее так

Code:
  1. xor eax, eax
  2. mov eax, fs: [ 30h]
  3. mov eax,[eax + 0Ch]
  4. mov eax,[eax + 0Ch]
  5. mov eax,[eax]
  6. mov eax,[eax]
  7. mov eax,[eax + 18h]

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


Ранг: 3.3 (гость)
Статус: Участник

Создано: 26 мая 2017 00:43 · Поправил: alex-rudenkiy New!
Цитата · Личное сообщение · #7

VOLKOFF, извините пожалуйста за мою глупость, но чем мне поможет хранящийся после выполнения этих команд адрес в EAX и указывающий на структуру IMAGE_DOS_HEADER, в вызове kernel32.LoadLibrary?

Ранг: 135.1 (ветеран)
Статус: Участник

Создано: 26 мая 2017 02:30 New!
Цитата · Личное сообщение · #8

Я лишь показал простое рабочее решение под XP...Win10
Принцип: PEB->LDR->InLoadOrderModuleList->NTDLLPtr, Kernel32Ptr->база Kernel32
А имея базовый адрес, не составит труда прочитать таблицу экспорта, и получить адреса функций.


Ранг: 316.5 (мудрец)
Статус: Участник

Создано: 26 мая 2017 04:01 New!
Цитата · Личное сообщение · #9

dosprog

> И документированных и гарантированно рабочих способов для этого нет.

Примитивный проход по связанному списку:

Code:
  1. ; +
  2. ;
  3.          assume fs:nothing
  4. LdrGetNativeBase proc uses ebx esi edi
  5.          mov ebx,fs:[TEB.Peb]
  6.          mov ebx,PEB.Ldr[ebx]
  7.          lea ebx,PEB_LDR_DATA.InMemoryOrderModuleList[ebx]    ; Head
  8.          assume ebx:PLIST_ENTRY
  9.          
  10.          mov esi,[ebx].Flink
  11.          assume esi:PLIST_ENTRY
  12.          
  13.          .while Ebx != Esi
  14.                  lea edi,[esi][-LDR_DATA_TABLE_ENTRY.InMemoryOrderModuleList]
  15.                  assume edi:PLDR_DATA_TABLE_ENTRY
  16.                  
  17.                  movzx eax,[edi].BaseDllName._Length
  18.                  invoke LdrCalcHash, [Edi].BaseDllName.Buffer, Eax
  19.                  .if Eax == 0A5951FEH
  20.                         mov eax,[edi].DllBase
  21.                         jmp Exit
  22.                  .endif
  23.                  mov esi,[esi].Flink
  24.          .endw
  25.          xor eax,eax
  26. Exit:
  27.          test eax,eax
  28.          ret
  29. LdrGetNativeBase endp


Ну а в общем вопрос бессмысленный. Где описание ошибки ?

Ранг: 409.7 (мудрец)
Статус: Участник

Создано: 26 мая 2017 06:10 · Поправил: dosprog New!
Цитата · Личное сообщение · #10

alex-rudenkiy пишет:
извините пожалуйста за мою глупость

) та ничо, всё нормально

Ищи, короче, программу "Armadillo Environment Variables Injector"
и присмотрись внимательней, что там она инжектирует в программы.
Там тебе и ответ на интересующее


Ранг: 27.8 (посетитель)
Статус: Участник

Создано: 26 мая 2017 10:43 · Поправил: microxa New!
Цитата · Личное сообщение · #11

dosprog
Разбирал тут инжектор dll (очень хорошей) в процесс.. (переделывал с асма, а то инжектило, через раз,
то с какимито висяками (чегото там наворочено было) - пришлось упрощать до максимума..)
>> очень простой лодер <<
Хотя у либы после запуска по EP проблем не было, ни с кернелом, ни с инициализацией..

Ни с размещением маячков над головами..


Ранг: 539.6 (!)
Статус: Участник
оптимист

Создано: 26 мая 2017 11:08 New!
Цитата · Личное сообщение · #12

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

Ранг: 18.5 (новичок)
Статус: Участник

Создано: 26 мая 2017 15:57 New!
Цитата · Личное сообщение · #13

ClockMan,
за подобный рабочий пример (xp-win10) как у VOLKOFF, dosprog в плане GetProcAddress был бы благодарен.


Ранг: 316.5 (мудрец)
Статус: Участник

Создано: 26 мая 2017 18:52 New!
Цитата · Личное сообщение · #14

ClockMan

> а если разобрать как работают GetModuleHandle, GetProcAddress то можно и без них обойтись

Ну да, это обёртки для нэйтива. Ldr* api. Тема бред какой то, тёмный лес для всех - суть вопроса хз, о чём обсуждение так же хз.


Ранг: 539.6 (!)
Статус: Участник
оптимист

Создано: 31 мая 2017 12:49 New!
Цитата · Личное сообщение · #15

soft пишет:
за подобный рабочий пример (xp-win10) как у VOLKOFF, dosprog в плане GetProcAddress был бы благодарен

ловите


{ Атач доступен только для участников форума } - test.zip

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


Ранг: 191.8 (ветеран)
Статус: Участник

Создано: 4 июня 2017 22:19 New!
Цитата · Личное сообщение · #16

до кучи - у catch22.net увидел
https://github.com/strobejb/injdll
 eXeL@B —› Вопросы новичков —› Как работать с системными библиотеками?

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS