![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| insider92 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.4.2008 Репутация: нет Всего: нет |
В общем, прошу извинить заранее, я во всем этом не очень разбираюсь.
Вступление: Все знают, что в exe можно встроить интерпретатор Lua. Только, в большинстве случаев, сам интерпретатор находится в lua.dll, а программа лишь экспортирует функции из нее. При запуске exe библиотека lua.dll грузится в память, при подключении C++-модуля внутри Lua скрипта он так же юзает фукции уже загруженной в память lua.dll Теперь мой случай: Есть exe со встроенным в него Lua-интерпретатором (писан не мной, исходников нет). Но никаких lua.dll, все нужные функции внутри самого exe. Необходимо внутри скрипта подключить C++-модуль. Т.к. модуль скомпилирован под использование lua.dll, то он, естественно, не загружается, ругаясь на ее отсутствие. Если просто подсунуть ему lua.dll, то он загрузится, но нормальная работа при этом невозможна. Т.к. основной скрипт будет выполняться в контексте exe, а модуль в контексте lua.dll. Т.е. функционал модуля по-прежнему недоступен для использования. Что я хочу: Подменить как-нибудь IAT модуля, чтобы он вместо вызова функций из lua.dll вызывал их из моего exe. Но нужен какой-нибудь немуторный способ, т.е. чтобы не сопоставлять руками каждую функцию и перебивать их адреса в HEX'е. Либо, я тут рядом прочитал, что функции в exe можно сделать экспортируемыми. Если это возможно без исходников, то сделать нужные функции экспортируемыми, затем сгенерировать для них .lib и подсунуть его модулю на стадии компиляции. Ну или какой-нибудь третий путь, о котором я не догадываюсь... Благодарю за внимание! |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
ох ща возможно будут крики про незаконную декомпиляцию программ...
хотя работа с заголовком программы - это не декомпиляция. а декомпиляция бесплатного кроссплатформенного lua - это вполне себе законно ---------------------------------------------------------------------------------------------------- Здесь может возникнуть принципиальная проблема - Lua линковался к .exe статически, и часть функций которая в .exe может отсутствовать вообще. Скорей всего так и будет, т.к. функции для работы внешних модулей скорей всего .exe не нужны. В этом случае, наиболее естественным решением будет заставить .exe использовать Lua из lua.dll, а не встроенный. Однако это может оказаться крайне трудоемкой задачей - найти в .exe все функции Lua. Здесь скорее всего подойдет сигнатурный поиск: надо смотреть машинный код всех функций в lua.dll, и искать эти же функции в .exe При это надо помнить, что код в .exe и в .dll обязательно будет отличаться, а именно будут отличаться все адреса, т.е. искать надо по маскам, содержащим только опкоды. Далее, найдя все точки входа функций Lua в .exe, надо пропатчить там переходники на IAT Подозреваю, что в этом может помочь скрипт для IDA который будет создавать сигнатуры всех экспортируемых функций lua.dll, и искать эти сигнатуры в .exe Хотя подозреваю, что таких функций там будет не больше десятка, и возможно в .exe они все будут рядом. Это сообщение отредактировал(а) GoldFinch - 23.2.2010, 00:56 |
|||
|
||||
| insider92 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.4.2008 Репутация: нет Всего: нет |
Допустим, у меня есть список функций, имеющихся в exe. Что мне делать дальше? |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
добавить Lua.dll в таблицу импорта .exe, добавить IAT с теми функциями которые есть в exe,
записать в начало каждой функции "jmp dword ptr [IAT_addr]" тогда .exe будет использовать Lua из длл Это сообщение отредактировал(а) GoldFinch - 23.2.2010, 01:56 |
|||
|
||||
| insider92 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.4.2008 Репутация: нет Всего: нет |
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
т.е. это будет выглядеть так:
Функция1_в_exe: jmp dword ptr [Функция1] .... Функция2_в_exe: jmp dword ptr [Функция2] .... ФункцияN_в_exe: jmp dword ptr [ФункцияN] .... import_directory: ......... 0,0,0,rva Lua_IAT,rva aLua ...... 0,0,0,0,0 aLua db "LUA.DLL",0 Lua_IAT: Функция1 dd rva имя_Функции1 Функция2 dd rva имя_Функции2 ... ФункцияN dd rva имя_ФункцииN ... dd 0 имя_Функции1 db 0,0,"Функция1",0 имя_Функции2 db 0,0,"Функция2",0 ... имя_ФункцииN db 0,0,"ФункцияN",0 ... Добавлено через 2 минуты и 2 секунды insider92, чем угодно сделать, хоть руками, хоть утилитами если не знаешь как - проще руками я наверное юзал бы фасм, но понятнее - руками Добавлено через 3 минуты и 22 секунды наверное, какие нить утилиты типа PETools или LordPE могут это сделать, но я никогда их для этого не юзал. Добавлено через 9 минут и 43 секунды кстати, надо отметить что эта тема к С++ никакого отношения не имеет. |
|||
|
||||
| insider92 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.4.2008 Репутация: нет Всего: нет |
Хм
А как быть с теми функциями, которые lua не экспортирует? Или ничего с ними делать не стоит, т.к. они даже вызываться не будут?
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
||||
|
||||
| insider92 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 4.4.2008 Репутация: нет Всего: нет |
ступил
Это сообщение отредактировал(а) insider92 - 26.2.2010, 15:23 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |