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

 eXeL@B —› Программирование —› Исправить Dll loader для Delphi
Посл.ответ Сообщение


Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 05 марта 2019 18:30 · Поправил: Kindly
· Личное сообщение · #1

Несколько лет без проблем использовал юнит DLL Loader by Aphex для выполнения функций dll из ресурсов. Но теперь столкнулся с неработоспособностью юнита на одной из библиотек.

Code:
  1. procedure Load_DeltaMax_Engine;
  2. begin
  3.   ResourceLocation := FindResource(HInstance, pchar('DMAX'), RT_RCDATA);
  4.   if ResourceLocation <> 0 then
  5.   begin
  6.     ResourceSize := SizeofResource(HInstance, ResourceLocation);
  7.     if ResourceSize <> 0 then
  8.     begin
  9.       ResourceHandle := LoadResource(HInstance, ResourceLocation);
  10.       if ResourceHandle <> 0 then
  11.       begin
  12.         ResourcePointer := LockResource(ResourceHandle);
  13.         if ResourcePointer <> nil then
  14.         begin
  15.           //вход идет, но не отрабатывает как надо, далее процедура Generate не выполняется.
  16.           DeltaMax_Library := xLoadLibrary(ResourcePointer, DeltaMax_Imports);
  17.         end;
  18.       end;
  19.     end;
  20.   end;
  21. end;

Я не шарю в PE до такой степени, чтоб исправить юнит самостоятельно. Подсобит кто?
Проект в аттаче.
d0f9_05.03.2019_EXELAB.rU.tgz - deltamax.zip

-----
Array[Login..Logout] of Life





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

Создано: 05 марта 2019 19:00
· Личное сообщение · #2

Есть сомнения в том, может ли он обрабатывать IMAGE_DIRECTORY_ENTRY_IAT, которая в длл есть. Ты бы лучше бинарник показал, а не исходники.

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





Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 05 марта 2019 19:29 · Поправил: Kindly
· Личное сообщение · #3

f13nd пишет:
Ты бы лучше бинарник показал, а не исходники.

бинарник в ресах, но вот:
https://www.upload.ee/files/9658736/DeltaMAX.zip.html

используется dll стандартно, без COM интерфейса.

-----
Array[Login..Logout] of Life





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

Создано: 05 марта 2019 19:30
· Личное сообщение · #4

Kindly пишет:
https://www.upload.ee/files/9658736/DeltaMAX.zip.html

Да длл-то я видел) Турбопаскаль теперь устанавливать штоле?

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





Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 05 марта 2019 19:33
· Личное сообщение · #5

https://www.upload.ee/files/9658751/deltamax_exe.zip.html

-----
Array[Login..Logout] of Life





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

Создано: 05 марта 2019 19:47
· Личное сообщение · #6

Вобщем с импортом там как ни странно нормально все. В DllMain есть GetModuleFileNameW на hInstance DllMain, разумеется винда ничего про эту длл не знает, она ее не грузила.
Code:
  1. 0046EE10    8D85 ECFBFFFF   LEA EAX,[EBP-414]
  2. 0046EE16    53              PUSH EBX
  3. 0046EE17    50              PUSH EAX
  4. 0046EE18    FF76 68         PUSH DWORD PTR DS:[ESI+68]
  5. 0046EE1B    FF15 D0114700   CALL DWORD PTR DS:[4711D0]         ;GetModuleFileNameW с левой базой, на выходе пустая строчка
  6. 0046EE21    8D85 ECFBFFFF   LEA EAX,[EBP-414]
  7. 0046EE27    6A 2E           PUSH 2E
  8. 0046EE29    50              PUSH EAX
  9. 0046EE2A    E8 950EFFFF     CALL 0045FCC4
  10. 0046EE2F    66:8320 00      AND WORD PTR DS:[EAX],0000         ;eax=0, исключение


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




Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 05 марта 2019 19:54
· Личное сообщение · #7

Загрузи левую длл и отпачь ее лоадер ентри на эту длл, DllBase, SizeOfImage, имя если ей надо.




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 05 марта 2019 20:03 · Поправил: Kindly
· Личное сообщение · #8

f13nd пишет:
Вобщем с импортом там как ни странно нормально все. В DllMain есть GetModuleFileNameW на hInstance DllMain, разумеется винда ничего про эту длл не знает, она ее не грузила.

тут я прошляпил, что использовал Unicode вариант этой dll без соответствующих правок, но это важное исправление тем не менее проблему не решило.

вот бинарь c ANSI версией библиотеки, там же dmx.RES под сорцы:
https://www.upload.ee/files/9658879/deltamax_.zip.html

Alchemistry
костыли не хотелось бы юзать

-----
Array[Login..Logout] of Life





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

Создано: 05 марта 2019 20:08
· Личное сообщение · #9

Kindly пишет:
тут я прошляпил, что использовал Unicode вариант этой dll без соответствующих правок

Да не выйдет. Либо стелсить GetModuleFileName либо вон совсем дикое шаманство творить. Оно берет путь к длл и по-моему хочет отрубить расширение, чтоб слепить из этого путь к каким-то еще своим файлам (которых тоже видимо не будет). Еще можно патчить саму длл, чтобы выбросить всю эту помойку из нее.

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





Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 05 марта 2019 20:17
· Личное сообщение · #10

Вот подобный проект, где заюзан другой компонент, и тут все работает:
https://www.upload.ee/files/9658965/patchwise.zip.html

этот бинарь надо запустить с параметром -g или -a, чтобы попасть на аналогичную загрузку dll из ресурсов - тут все работает.

-----
Array[Login..Logout] of Life





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

Создано: 05 марта 2019 20:21
· Личное сообщение · #11

Kindly пишет:
Вот подобный проект, где заюзан другой компонент, и тут все работает

Там 2 дллки с очень маленьким и безобидным DllMain. Твоя длл не рассчитана на такое использование.

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





Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 05 марта 2019 20:29
· Личное сообщение · #12

f13nd пишет:
Твоя длл не рассчитана на такое использование.

я полагал, что юнит должен универсально работать со всеми 32-бит dll.

таскать dll рядом не комильфо для консольной апликухи. если поправить не получается, может поделитесь у кого есть аналогичные стабильные загрузчики для дельфи? в гугле всякое перепробовал, но чтоб стабильно работало, в том числе и на Windows 10, только этот юнит нашел.

-----
Array[Login..Logout] of Life





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

Создано: 05 марта 2019 20:33 · Поправил: f13nd
· Личное сообщение · #13

Kindly пишет:
я полагал, что юнит должен универсально работать со всеми 32-бит dll

Чичаз на колене сделанный загрузчик под 200 строчек тебе сымитирует полноценную загрузку модуля с учетом всех возможных маразмов, которые в длл могут оказаться. Я обычно рипаю дллки, чтобы не таскать отдельно, но относительно этой дважды подумал бы надо ли. Надо разбираться для чего ей это дополнительное файло и критично ли, чтобы оно было.

ЗЫ: вон инсталляторам совсем не стрёмно выкидывать файло в %TEMP% и оттуда загружать

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




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 05 марта 2019 21:44
· Личное сообщение · #14

Kindly пишет:
таскать dll рядом
enigma virtual box




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 06 марта 2019 17:21 · Поправил: ajax
· Личное сообщение · #15

выложи финал, который нужно смотреть, с сырками. в одном примере GetModuleFilename не отрабатывает, в другом валится на процессинге релоков

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 06 марта 2019 18:47
· Личное сообщение · #16

ajax пишет:
выложи финал, который нужно смотреть, с сырками. в одном примере GetModuleFilename не отрабатывает, в другом валится на процессинге релоков

ansi версия.
https://www.upload.ee/files/9662748/deltamax_ansi.zip.html

-----
Array[Login..Logout] of Life





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 06 марта 2019 22:35
· Личное сообщение · #17

Kindly
легче написать новый, чем это было править добавил хук GetModuleFileName, чтобы либа не крашилась. разберешься, думаю

9813_06.03.2019_EXELAB.rU.tgz - unitdmax.zip

-----
От многой мудрости много скорби, и умножающий знание умножает печаль


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


Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 06 марта 2019 23:29
· Личное сообщение · #18

ajax пишет:
добавил хук GetModuleFileName, чтобы либа не крашилась. разберешься, думаю

9813_06.03.2019_EXELAB.rU.tgz - unitdmax.zip

спасибо, взлетело! в pOptions надо было out объявить, чтоб видна была работа, но это никому не нужные кроме меня ньюансы.

респект! вопрос решен, тему закрываю.

-----
Array[Login..Logout] of Life



 eXeL@B —› Программирование —› Исправить Dll loader для Delphi
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати