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

 eXeL@B —› Программирование —› CreateFile & LoadLibrary
Посл.ответ Сообщение


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 02 августа 2010 01:47 · Поправил: OnLyOnE
· Личное сообщение · #1

Вопрос состоит вот в чем, создаем файл CreateFile пишем в него содержимое DLL из тела программы и не закрывая дескриптора пытаемся загрузить созданный файл LoadLibrary. Так как это осуществить? Возможно ли проделать это с открытым дескриптором, если создавать файл с правами доступа GENERIC_WRITE or GENERIC_READ or GENERIC_EXECUTE? У меня нихера не выходит. Возможно где-то недочет?
LoadLibrary выдает ERROR_SHARING_VIOLATION (00000020)
Может кто в курсе как это осуществить? Если это вообще реально?

Code:
  1. invoke CreateFile,addr FilePath,GENERIC_WRITE or GENERIC_READ or GENERIC_EXECUTE,FILE_SHARE_READ or FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_TEMPORARY or FILE_ATTRIBUTE_SYSTEM or FILE_ATTRIBUTE_HIDDEN or FILE_FLAG_DELETE_ON_CLOSE,0


-----
aLL rIGHTS rEVERSED!





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

Создано: 02 августа 2010 08:49 · Поправил: DenCoder
· Личное сообщение · #2

см. табличку в MSDN http://msdn.microsoft.com/en-us/library/aa363874(VS.85).aspx
Первый раз Вы открываете
Code:
  1. GENERIC_READ or GENERIC_WRITE
  2. FILE_SHARE_READ or FILE_SHARE_WRITE


ntdll открывает первый раз файл, но для Вас второй
Code:
  1. GENERIC_READ
  2. FILE_SHARE_READ


Потому и ERROR_SHARING_VIOLATION

-----
IZ.RU





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 02 августа 2010 19:55
· Личное сообщение · #3

Немного измененный пример GoldFinch
Code:
  1. include '\Coding\fasmw16914\include\win32ax.inc' 
  2. .data
  3.   dwWB     dd        ?
  4.   szDLLName file "MyDLL.dll"
  5.   nDLLSize        = $ - szDLLName
  6.   szDLLPath db "C:\Windows\Temp\MyDLL.dll", 0
  7. .code
  8.  
  9. start:
  10.     invoke CreateFile, szDLLPath, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
  11.          xchg ebx, eax
  12.          invoke WriteFile, ebx, szDLLName, nDLLSize, dwWB, 0
  13.          invoke CloseHandle, ebx
  14.     invoke LoadLibrary, szDLLPath
  15. End_:
  16.     ret
  17. .end start


-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 02 августа 2010 20:48
· Личное сообщение · #4

Coderess пишет:
Немного измененный пример GoldFinch


Ты неверна не понял, invoke CloseHandle, ebx, тут не должно быть...
Я говорил именно о том, чтобы не закрывая хендла ... загрузить длл...

-----
aLL rIGHTS rEVERSED!




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 02 августа 2010 20:54
· Личное сообщение · #5

А если грузить напрямую из памяти?
vxheavens.com/lib/vwa00.html




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 02 августа 2010 21:15 · Поправил: Coderess
· Личное сообщение · #6

OnLyOnE Да, неверно А почему нельзя или закрыть хэндл потом снова открыть или сделать дубликат хэндла DuplicateHandle() если ты его потом используешь?

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 02 августа 2010 21:36
· Личное сообщение · #7

Vovan666 пишет:
А если грузить напрямую из памяти?


Уже щас свой загрузчик пишу...
З.Ы. Почему не ответил на сообщение в ПМ?

Coderess пишет:
А почему нельзя или закрыть хэндл потом снова открыть или сделать дубликат хэндла DuplicateHandle() если ты его потом используешь?


Для того чтобы потом, при закрытии хендла файл из темп директории удалился ... я создаю его с FILE_FLAG_DELETE_ON_CLOSE...

-----
aLL rIGHTS rEVERSED!





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

Создано: 02 августа 2010 21:50
· Личное сообщение · #8

Кинул бы скомпиленный вариант хыть, чтоб в ольке можно было по-быстрому поиграться с флагами.
З.Ы. Зачем права на исполнение тут, я хз. Да и на чтение тоже.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 03 августа 2010 13:29 · Поправил: ARCHANGEL
· Личное сообщение · #9

Да никак это не будет работать, даже если каким-то реверансом с бубном удастся загрузить либу, такой дескриптор (т.е. тот, что по CloseHandle) не закроется никак из-за внутренней работы загрузчика и создания объекта "раздел". Да, согласен с постом ниже, как только выгрузится либа, тогда и закроется дескриптор. (Поправил своё сообщение)

-----
Stuck to the plan, always think that we would stand up, never ran.





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

Создано: 03 августа 2010 13:44
· Личное сообщение · #10

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




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 03 августа 2010 19:20
· Личное сообщение · #11

Короче... пошел другим путем..
Просто аллочу память и проецирую длл в нее.. обрабатываю таблицу импорта и релоки..
Oтрабатываю DLL Entry... и усё
GetProcAddress нахожу что мне надо...

Осталась только одна проблема... в длл есть манифест для Microsoft.VC90.CRT...
Как незнаю обработать его чтобы VC90 runtime погрузилась LoadLibrary при обработке таблици импорта...
Пока вышел из положения засунув манифест в ресурсы ЕХЕ... но прекрасно понимаю, что это извращение..
Может кто подскажет как обработать манифест чтобы можно было подгрузить длл из winsxs?

-----
aLL rIGHTS rEVERSED!




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

Создано: 03 августа 2010 21:23
· Личное сообщение · #12

OnLyOnE
Манифесты обрабатываются посредством CreateActCtx()/ActivateActCtx().


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


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