0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5

Каким образом заставить программу загружать dll из указанной папки?

04.02.2011, 13:00. Показов 7632. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть одна программка, которую надо заставить подгружать .dll'ку из другой папки.
Пишу античит к одной игрушке, нужно сделать так, чтобы при запуске, прога первым делом искала .dll в указанной мною папке, а затем уже в текущей директории откуда она запускается и директориях system32, system и т.д

Подскажите как это сделать правильно. Это возможно 100%, по крайней мере на Delphi..
Процесс запускаю через CreateProcess();
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.02.2011, 13:00
Ответы с готовыми решениями:

Можно ли каким-то образом заставить WebClient создавать папки для скачиваемых файлов
Можно ли каким-то образом заставить WebClient создавать папки для скачиваемых файлов, т.е. я пишу путь для сохранения файла...

Каким образом лучше загружать данные из текстового файла? Можно ли обойтись при этом только js, не используя php?
Всем привет, столкнулся с определенной проблемой, у меня есть текстовый файл, в котором находятся слова в алфавитном порядке, состоящие из...

Возможно ли как-то заставить BIOS, каким то образом определить название проца
Здравствуйте уважаемые специалисты ну или просто многознающие люди!Заранее прошу прощения за возможно нубский вопрос, но всё же мне очень...

10
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
04.02.2011, 13:23
Как вариант:
C++
1
2
HMODULE hLib;
hLib = LoadLibrary("MyDll.dll");
0
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
04.02.2011, 13:37  [ТС]
Цитата Сообщение от zulkis Посмотреть сообщение
Как вариант:
C++
1
2
HMODULE hLib;
hLib = LoadLibrary("MyDll.dll");
Чтобы было понятнее:
Прога загружает dll'ку, допустим, "test.dll".
Мне нужно чтобы она ее сперва искала в указанной мной директории, а затем уже во всех остальных.
вариант с LoadLibrary не подходит, т.к. нет исходников.

Добавлено через 6 минут
Советовали перехватывать адрес LoadLibrary и заменять на свою функцию.
Надеюсь есть решение проще.
0
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
04.02.2011, 13:43
По мне так напрашивается решение помещения dll непосредственно в папку с игрой, и все
Иначе, имхо, вам необходимо перехватить вызов программы.
1. http://www.rsdn.ru -> Статьи -> Базовые сервисы -> Перехват вызовов API
2. Джеффри Рихтер, "Windows для профессионалов", глава 22
Это если я правильно вас понял
0
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
04.02.2011, 13:57  [ТС]
Цитата Сообщение от zulkis Посмотреть сообщение
По мне так напрашивается решение помещения dll непосредственно в папку с игрой, и все
Иначе, имхо, вам необходимо перехватить вызов программы.
1. http://www.rsdn.ru -> Статьи -> Базовые сервисы -> Перехват вызовов API
2. Джеффри Рихтер, "Windows для профессионалов", глава 22
Это если я правильно вас понял
В папке с прогой уже есть такая dll.
Мне же нужно чтобы прога эту "test.dll" грузила не из папки откуда ее запускают, а из любой папки, которую я укажу.
0
 Аватар для zulkis
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
04.02.2011, 14:07
Я конечно все понимаю, что у вас видение вашего проекта лучше, но все же понятнее было бы называть вещи своими именами, а не просто "прога". Я понимаю вас так: программе-античиту необходимо подключать dll откуда бы то ни было, а она изначально пытается запустить dll из своей папки. Это логично. И я бы пытался решить через, как я уже сказал, перехват вызова программы. Может кто еще что порекомендует.
0
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
04.02.2011, 14:27  [ТС]
Цитата Сообщение от zulkis Посмотреть сообщение
Я конечно все понимаю, что у вас видение вашего проекта лучше, но все же понятнее было бы называть вещи своими именами, а не просто "прога". Я понимаю вас так: программе-античиту необходимо подключать dll откуда бы то ни было, а она изначально пытается запустить dll из своей папки. Это логично. И я бы пытался решить через, как я уже сказал, перехват вызова программы. Может кто еще что порекомендует.
Нет не программе античиту нужно подключать. Игра подгружает dll. нашел адрес в .exe файле названия этого dll. Меняю с engine.dll на mygine.dll(в нем происходят проверки различные) в памяти. Далее mygine.dll уже грузит настоящую engine.dll
нужно чтобы этот mygine.dll игра цепляла из директории античита, а не из своей текущей директории.

Сейчас подгрузка dll происходит вышеописанным образом. изменить "engine.dll" на более длинную строку, допустим на c:\asd\mygine.dll, не имеется возможным т.к. можно затиреть другие байты. то есть в распоряжении только 10символов.
Похоже что придется перехватывать адрес loadlibrary. ищу вашу книгу...
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
04.02.2011, 15:55
как тут уже говорили, у рихтера целая глава этому посвящена
0
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
05.02.2011, 12:17  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
как тут уже говорили, у рихтера целая глава этому посвящена
У Рихтера, в 22 главе есть лишь теория о том как внедрить Dll, которая перехватит API функцию в другом процессе с помощью CreateProcess и флага CREATE_SUSPENDED. Никаких примеров. Сказано что возможно, но сложно.

Решение - найдено:

с помощью вот этого http://newgre.net/ninjectlib внедряю свою dll в процесс. DLL перехватывает функцию LoadLibraryA и заменяет на мою. В моей идет условие

C++
1
2
3
4
5
6
7
8
    if(strcmp(lpLibFileName, "engine.dll") == 0)
    {
        return LoadLibraryW(lpData);
    }
    else
    {
        return originalLoadLibrary(lpLibFileName);
    }
где lpData - переменная, которая получает значение из реестра. Другого способа передачи нахождения нужной мне DLL не придумал, да и не нужно, т.к. этот справляется на ура.

Добавлено через 4 минуты
код для DLL, в которой осуществляется перехват функции можно найти на том же сайте, либо использовать detours и ему подобные.

Добавлено через 3 минуты
Другие методы внедрения, кроме как через CreateProcess, для перехвата LoadLibrary не будут работать, т.к. процесс уже загрузит нужные ему dll и вы не сможете подменить нужную вам dll на свою.
0
Модератор
Эксперт по электронике
8967 / 6733 / 921
Регистрация: 14.02.2011
Сообщений: 23,792
14.02.2011, 01:56
Если я правильно понял то
в одной папке лежит прога и родная dll
а не родная в другой папке
программа должна обратится к неродной а та уже вызовет родную
Но программа конечно же ищет сначала в своей директории
1 порядок просмотра директорий определяется где то в реестре (но там помоему есть ограничения)

Можно сделать так
2 Создаем свою dll с именем родной, определяем в ней весь импрорт родной и кладем в папку к проге.
а родную переименовываем (или кладем в другое место) и обращаемся к ней уже из своей dll

3 можно попробовать задействовать Хуки
С важением Валерий
0
ramobili
05.03.2011, 01:25
Цитата Сообщение от basmann Посмотреть сообщение
У Рихтера, в 22 главе есть лишь теория о том как внедрить Dll, которая перехватит API функцию в другом процессе с помощью CreateProcess и флага CREATE_SUSPENDED. Никаких примеров. Сказано что возможно, но сложно.

Решение - найдено:

с помощью вот этого http://newgre.net/ninjectlib внедряю свою dll в процесс. DLL перехватывает функцию LoadLibraryA и заменяет на мою. В моей идет условие

C++
1
2
3
4
5
6
7
8
    if(strcmp(lpLibFileName, "engine.dll") == 0)
    {
        return LoadLibraryW(lpData);
    }
    else
    {
        return originalLoadLibrary(lpLibFileName);
    }
где lpData - переменная, которая получает значение из реестра. Другого способа передачи нахождения нужной мне DLL не придумал, да и не нужно, т.к. этот справляется на ура.

Добавлено через 4 минуты
код для DLL, в которой осуществляется перехват функции можно найти на том же сайте, либо использовать detours и ему подобные.

Добавлено через 3 минуты
Другие методы внедрения, кроме как через CreateProcess, для перехвата LoadLibrary не будут работать, т.к. процесс уже загрузит нужные ему dll и вы не сможете подменить нужную вам dll на свою.
А как непосредственно внедрение происходит, через указание PID процесса ?
можно поподробнее
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2011, 01:25
Помогаю со студенческими работами здесь

Как заставить программу загружать картинку рандомно?
Есть некое количество картинок в нескольких папках (все в одной коренной папке). Как заставить программу при старте загружать в...

Каким образом в цикле удалить файлы из папки
Бодрого утра, подскажите каким образом в цикле удалить файлы из папки. Есть папка архива БД, в которой лежат файлы с именами...

Можно ли каким-то образом заставить реагировать родительский объект на изменение параметров дочернего
Задача такая. Есть некий класс: class Vegetables { protected: long FCal; void __fastcall SetCal(long c); public: ...

Каким образом заставить компонент RichEdit1 перемещать свой Skroll на последнюю запись?
На форме есть компонент RichEdit1 На этот компонент постоянно добавляются записи с других процедур. Каким образом заставить компонент...

Интересно узнать каким образом скрывают файлы и папки?
Каким образом это делают программы типа Lock Folder, Hide Folders и подобные?.. Возможно ли такое реализовать самому в Delphi?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru