Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› Использование функций чужой DLL |
Посл.ответ | Сообщение |
|
Создано: 07 июня 2006 18:58 · Личное сообщение · #1 Привет всем! Хочу написать распаковщик к одной игре. Пробовал выдирать куски нужного кода из игры - получалось очень даже неплохо... Почти раскопал всю защиту. Но столкнулся с тем, что там помимо кодирования используется какое-то самопальное сжатие. Как вы понимаете, куча CALL'ов и ничего не понятно. Было решено заюзать DLL, отвечающую за работу с форматом файлов. Там есть интересные функции - порядка 20. А теперь сам вопрос. Я пишу на C/C++. Как мне лучше сделать прототипы этих функций? Чтобы потом использовать их в своей программе? Очень интересно будет посмотреть на ваши решения. Thanx! ----- MicroSoft? Is it some kind of a toilet paper? |
|
Создано: 07 июня 2006 19:11 · Личное сообщение · #2 |
|
Создано: 07 июня 2006 19:14 · Личное сообщение · #3 |
|
Создано: 07 июня 2006 19:24 · Личное сообщение · #4 |
|
Создано: 07 июня 2006 20:25 · Поправил: Tim · Личное сообщение · #5 |
|
Создано: 07 июня 2006 22:25 · Личное сообщение · #6 |
|
Создано: 08 июня 2006 00:17 · Поправил: =TS= · Личное сообщение · #7 Tim вот так к примеру:
Это пример для конвенции WINAPI [norwed] ИМХО, флуд не по теме... ----- DREAMS CALL US |
|
Создано: 08 июня 2006 08:22 · Личное сообщение · #8 |
|
Создано: 08 июня 2006 08:56 · Личное сообщение · #9 |
|
Создано: 08 июня 2006 09:50 · Личное сообщение · #10 Для использования функций из длл нужно знать довольно много: порядок передачи параметров (справа налево или слева направо), метод передачи параметров (через регистры, через стек), способ передачи параметров (по значению или по ссылке). О порядке передачи и методе передачи смотри соглашения о вызовах: _fastcall - параметры передаются слева направо в ECX,EDX и через стек справа налево, _stdcall - параметры передаются справа налево через стек, _cdecl - параметры передаются справа налево через стек. Упомянутое WINAPI объявлено как _stdcall. |
|
Создано: 08 июня 2006 09:53 · Личное сообщение · #11 |
|
Создано: 08 июня 2006 10:46 · Личное сообщение · #12 BeeCrey пишет: Для использования функций из длл нужно знать довольно много: порядок передачи параметров (справа налево или слева направо), Все это можно понять просматривая дизасм функций. IDA вообще по-моему это на автомате делает. Tim пишет: Бился, бился, но линкер говорил unresolved external... хотя я явно задавал прототип функции сам... Все наступают на эти грабли. В Visual Studio я использовал .def файл(если память не изменяет), в Борланде не делал. Ты должен указать линкеру, что вызов будет идти через таблицу импорта, а иначе он ищет в простых библиотеках. |
|
Создано: 08 июня 2006 11:42 · Личное сообщение · #13 Tim пиÑеÑ: Бился, бился, но линкер говорил unresolved external... хотя я явно задавал прототип функции сам... Как сказал Alexus2006, следовало сделать .lib файл с длл. Этот файл содержит символьные имена функций и переменных, экспортируемых из длл. Укажешь линкеру на этот файл и можешь вызывать функции согласно своим прототипам. Вызов будет идти через таблицу импорта. В данном случае .def файл и .lib файл имеют одно и тоже значение. Они содержат символы, экспортируемые из длл. Мне кажется, что использовать .lib файл лучше, т.к. его можно сделать автоматически (см. пост Alexus2006). Из поста Tim я понял, что из длл нужно 20 функций. Мне кажется довольно утомительным делать .def файл на 20 функций. Поэтому я предпочел бы использовать implib.exe. |
|
Создано: 08 июня 2006 12:07 · Личное сообщение · #14 |
|
Создано: 08 июня 2006 13:19 · Личное сообщение · #15 |
|
Создано: 08 июня 2006 13:25 · Личное сообщение · #16 |
|
Создано: 08 июня 2006 13:45 · Поправил: =TS= · Личное сообщение · #17 tundra37 пишет: В Visual Studio я использовал .def файл Он нужен только если ты пишешь СВОЮ dll, а для днного случая не нужен вообще Tim пишет: Я пишу в Borland C++. Делал либу, привязывал с помощью макроса USELIB. Но не получилось... Такое впечатление, что он их игнорирует. Буду пробовать MSVC. Какая в каком компиляторе? Зачем юзать макросы? Я же написал РАБОЧИЙ пример. ЗЫ. Там FreeLibrary нужно делать еще после использования всех нужых функций... Cigan пишет: Там есть утилита для переделки длл в либ так что переделал длл и начал использовать имена функции ссылаясь на эту либу если там манглед то тогда GetProcAddress С манглироваными именами не сталкивался при программировании,п оэтому подтверждать или отрицать не буду ----- DREAMS CALL US |
|
Создано: 08 июня 2006 16:05 · Личное сообщение · #18 =TS= пишет: Я же написал РАБОЧИЙ пример. =TS= пишет: С манглироваными именами не сталкивался при программировании,п оэтому подтверждать или отрицать не буду Вообщем ты и написал пример когда юзаетьтся манглед импорт, но если его нет то можно создать либу с протоипами фунций и юзать прортотипы без GetProcAddress |
|
Создано: 08 июня 2006 17:15 · Личное сообщение · #19 Это mangled? _SFS_GetCacheBlockSize@8 _SFS_GetCacheSize@8 _SFS_IsFile@8 _SFS_Mount@12 _SFS_MountAs@16 _SFS_MountRes@12 _SFS_Mounted@12 _SFS_SetCacheBlockSize@8 _SFS_SetCacheSize@8 _SFS_UnMount@4 _SFS_UnMountPath@4 _SFS_close@4 _SFS_errno@0 _SFS_lseek@12 _SFS_open@8 _SFS_read@12 _SFS_write@12 ----- MicroSoft? Is it some kind of a toilet paper? |
|
Создано: 08 июня 2006 19:30 · Поправил: Cigan · Личное сообщение · #20 |
|
Создано: 08 июня 2006 19:35 · Личное сообщение · #21 |
|
Создано: 08 июня 2006 20:46 · Личное сообщение · #22 Вот мой вариант (Delphi) для замены результатов работы функций: Пробовал для функций по STDCALL и cdecl PS вроде как все нормально получалось. Для получения списка экспортируемых функций использовал dll2spy.exe из Kerberos 504c_08.06.2006_CRACKLAB.rU.tgz - sanctuarylib.dpr |
|
Создано: 03 ноября 2006 01:24 · Личное сообщение · #23 |
eXeL@B —› Программирование —› Использование функций чужой DLL |