0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
|
|
1 | |
Каким образом заставить программу загружать dll из указанной папки?04.02.2011, 13:00. Показов 7382. Ответов 10
Метки нет (Все метки)
Есть одна программка, которую надо заставить подгружать .dll'ку из другой папки.
Пишу античит к одной игрушке, нужно сделать так, чтобы при запуске, прога первым делом искала .dll в указанной мною папке, а затем уже в текущей директории откуда она запускается и директориях system32, system и т.д Подскажите как это сделать правильно. Это возможно 100%, по крайней мере на Delphi.. Процесс запускаю через CreateProcess();
0
|
04.02.2011, 13:00 | |
Ответы с готовыми решениями:
10
Можно ли каким-то образом заставить WebClient создавать папки для скачиваемых файлов Каким образом лучше загружать данные из текстового файла? Можно ли обойтись при этом только js, не используя php? Возможно ли как-то заставить BIOS, каким то образом определить название проца Как заставить программу загружать картинку рандомно? |
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
|
||||||
04.02.2011, 13:23 | 2 | |||||
Как вариант:
0
|
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
|
|
04.02.2011, 13:37 [ТС] | 3 |
Чтобы было понятнее:
Прога загружает dll'ку, допустим, "test.dll". Мне нужно чтобы она ее сперва искала в указанной мной директории, а затем уже во всех остальных. вариант с LoadLibrary не подходит, т.к. нет исходников. Добавлено через 6 минут Советовали перехватывать адрес LoadLibrary и заменять на свою функцию. Надеюсь есть решение проще.
0
|
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
|
|
04.02.2011, 13:43 | 4 |
По мне так напрашивается решение помещения dll непосредственно в папку с игрой, и все
Иначе, имхо, вам необходимо перехватить вызов программы. 1. http://www.rsdn.ru -> Статьи -> Базовые сервисы -> Перехват вызовов API 2. Джеффри Рихтер, "Windows для профессионалов", глава 22 Это если я правильно вас понял
0
|
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
|
|
04.02.2011, 13:57 [ТС] | 5 |
В папке с прогой уже есть такая dll.
Мне же нужно чтобы прога эту "test.dll" грузила не из папки откуда ее запускают, а из любой папки, которую я укажу.
0
|
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
|
|
04.02.2011, 14:07 | 6 |
Я конечно все понимаю, что у вас видение вашего проекта лучше, но все же понятнее было бы называть вещи своими именами, а не просто "прога". Я понимаю вас так: программе-античиту необходимо подключать dll откуда бы то ни было, а она изначально пытается запустить dll из своей папки. Это логично. И я бы пытался решить через, как я уже сказал, перехват вызова программы. Может кто еще что порекомендует.
0
|
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
|
|
04.02.2011, 14:27 [ТС] | 7 |
Нет не программе античиту нужно подключать. Игра подгружает dll. нашел адрес в .exe файле названия этого dll. Меняю с engine.dll на mygine.dll(в нем происходят проверки различные) в памяти. Далее mygine.dll уже грузит настоящую engine.dll
нужно чтобы этот mygine.dll игра цепляла из директории античита, а не из своей текущей директории. Сейчас подгрузка dll происходит вышеописанным образом. изменить "engine.dll" на более длинную строку, допустим на c:\asd\mygine.dll, не имеется возможным т.к. можно затиреть другие байты. то есть в распоряжении только 10символов. Похоже что придется перехватывать адрес loadlibrary. ищу вашу книгу...
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
04.02.2011, 15:55 | 8 |
как тут уже говорили, у рихтера целая глава этому посвящена
0
|
0 / 0 / 0
Регистрация: 04.02.2011
Сообщений: 5
|
||||||
05.02.2011, 12:17 [ТС] | 9 | |||||
У Рихтера, в 22 главе есть лишь теория о том как внедрить Dll, которая перехватит API функцию в другом процессе с помощью CreateProcess и флага CREATE_SUSPENDED. Никаких примеров. Сказано что возможно, но сложно.
Решение - найдено: с помощью вот этого http://newgre.net/ninjectlib внедряю свою dll в процесс. DLL перехватывает функцию LoadLibraryA и заменяет на мою. В моей идет условие
Добавлено через 4 минуты код для DLL, в которой осуществляется перехват функции можно найти на том же сайте, либо использовать detours и ему подобные. Добавлено через 3 минуты Другие методы внедрения, кроме как через CreateProcess, для перехвата LoadLibrary не будут работать, т.к. процесс уже загрузит нужные ему dll и вы не сможете подменить нужную вам dll на свою.
0
|
Модератор
8947 / 6713 / 921
Регистрация: 14.02.2011
Сообщений: 23,690
|
|
14.02.2011, 01:56 | 10 |
Если я правильно понял то
в одной папке лежит прога и родная dll а не родная в другой папке программа должна обратится к неродной а та уже вызовет родную Но программа конечно же ищет сначала в своей директории 1 порядок просмотра директорий определяется где то в реестре (но там помоему есть ограничения) Можно сделать так 2 Создаем свою dll с именем родной, определяем в ней весь импрорт родной и кладем в папку к проге. а родную переименовываем (или кладем в другое место) и обращаемся к ней уже из своей dll 3 можно попробовать задействовать Хуки С важением Валерий
0
|
ramobili
|
|
05.03.2011, 01:25 | 11 |
А как непосредственно внедрение происходит, через указание PID процесса ?
можно поподробнее |
05.03.2011, 01:25 | |
05.03.2011, 01:25 | |
Помогаю со студенческими работами здесь
11
Каким образом в цикле удалить файлы из папки Можно ли каким-то образом заставить реагировать родительский объект на изменение параметров дочернего Каким образом заставить компонент RichEdit1 перемещать свой Skroll на последнюю запись? Интересно узнать каким образом скрывают файлы и папки? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |