Сейчас на форуме: tyns777, cppasm, dutyfree (+8 невидимых)

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

Ранг: 3.3 (гость), 1thx
Активность: 0.020
Статус: Участник

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

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



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

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

LoadLibrary, GetModuleHandle, GetProcAddress

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




Ранг: 3.3 (гость), 1thx
Активность: 0.020
Статус: Участник

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

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

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



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

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

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

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

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

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

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

-----
все багрепорты - в личные сообщения




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

Создано: 25 мая 2017 21:45 · Поправил: dosprog
· Личное сообщение · #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

Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 25 мая 2017 22:24 · Поправил: VOLKOFF
· Личное сообщение · #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 (гость), 1thx
Активность: 0.020
Статус: Участник

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

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



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

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

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




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

Создано: 26 мая 2017 04:01
· Личное сообщение · #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


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

-----
vx




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

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

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

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

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





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

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

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

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





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

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

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

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 21.0 (новичок), 19thx
Активность: 0.010.03
Статус: Участник

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

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




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

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

ClockMan

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

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

-----
vx





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

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

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

ловите


7aba_31.05.2017_EXELAB.rU.tgz - test.zip

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.


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

Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 04 июня 2017 22:19
· Личное сообщение · #16

до кучи - у catch22.net увидел
https://github.com/strobejb/injdll


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


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