|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вызов функции из DLL по адресу
Доброго всем дня.
Банальный и старый вопрос про чужие DLL написанные "кем-то на С++". При отладке (взломе больше тренеровка мозга конечно..) DLL нашлись кодирующие процедуры, теперь для написания кейгена хочу использовать тот же DLL, поскольку в нем большой ХЕШ от BlowFish. Все вытаскивать нет смысла - надо просто вызвать процедуру и всё... - параметры идут в стек - адрес строки и ещё пара параметров. Знаю адрес процедуры в физической памяти от родного процесса - узнал при пошаговом трейсе в Syser. Никакой PE-explorer эти процедуры не видит. Их адреса вычисляются в "родной" программе написанной на VВ -PCode через какую-то таблицу, но это и не важно. Загрузив через LoadLibrary я могу получить старт адрес DLL у себя в проге, сравнить его с началом в "родной", высчитать смещение и - вызвать по адресу процедуру поместив данные в виде указателей на строки в стек. Вот этот процесс и синтаксис меня и интересует ))) (пишу на Delphi6, про закон и пр.. говорить не надо, прога давно сломана и ей более 10 лет ) |
#2
|
||||
|
||||
Как обычно, ничего не понятно но раз без примеров, тогда и обще-выборочный ответ - в понятии библиотек есть одна аксиома - функции и процедуры могут быть лишь локальными или экспортируемыми, универсалов нет, причём локали видны только внутри самой библиотеки и ни одна сборка не может их вызвать снаружи, потому как без объявления в "шапке" они не функции, это просто набор машкодных байтов
Цитата:
Цитата:
Цитата:
Код:
... // объявление функции и определение с типами параметров type TSomefun = function(par1: integer): integer; ... var i: integer; dllhandle: Thandle; abs: TSomefun; begin // загрузка dllhandle:= LoadLibrary('dll.dll'); // указатель на функцию @abs:= GetProcAddress(dllhandle, 'NameFun' {"родное" название}); // вызов i:= IntToStr(abs(5)); // выгрузка FreeLibrary(dllhandle); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
||||
|
||||
Цитата:
Цитата:
Цитата:
jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 20.11.2016 в 13:52. |
#4
|
|||
|
|||
Alegun, спасибо, Вы всё правильно написали и правильно поняли,
Цитата:
DLL не запакована, так как некоторые команды я нашёл HEX редактором и спокойно забил NOPами и получил нужный эффект. Цитата:
Во вложении полу-патченая эта DLL. 580кб/2.8Мб Примеры: при перескоке из приложения в библиотеку я вижу первую строку: 1001FB88:PUSH 10 В строке статуса Syser показывает license.dll+1fb88 Вот как мне найти и правильно указать этот адрес DLL 1001FB88 в моей программе? Я понимаю что он может быть изменён поскольку моя прога меньше и стартовый адрес загрузки DLL изменится, + какие-нибуть смещения... |
#5
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#6
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
|||
|
|||
Да, возможно и "шаманство", но делфи можно использовать лишь как оболочку а писать на API .
Видимо похожая ситуация возникает... Bargest возврат оттуда действительно ret 8. Цитата:
И ещё - вызываемая функция как-то прописана через ключи типа 02F12583-B34E-11D6-B2C6-00C04F680C18 и в реестре есть какая-то ссылка на него - тоже есть и в самой DLL но нет никаких адресов - а просто такой номер и всё... |
#8
|
|||
|
|||
А какие функции эта DLL экспортирует?
Может быть это Active-X библиотека? |
#9
|
|||
|
|||
Вот РЕ что выдаёт - картинка во вложении
Может конечно не совсем синтаксис, а технология или ещё что... Если смотреть потраха файла DLL то там видно остатки от Срр компилятора, в том числе имена файлов с расширением срр. Я кажется врубился - используется COM интерфейс к обращению в фунуции. Во второй картинке видно - в РЕ в дереве ресурсов увидел TYPELIB и там пролистав текст увидел номер CLSID и надпись: //Provides a COM interface to the Licensing of the system. Видимо работает как с СОМ... теперь как ) или я не прав? Последний раз редактировалось -=#PupaJr#=-, 21.11.2016 в 18:25. |
#10
|
|||
|
|||
Если перетащить эту DLL из проводника в редактор,то Дельфи покажет эту TYPELIB в виде pas файла. Этот файл нужно затем подключить к Вашему проекту,и далее будем смотреть, как с ним работать.
|
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
-=#PupaJr#=- (22.11.2016)
|
#11
|
|||
|
|||
icWasya СПАСИБО!! реально я об этом не знал!!! это точно развернулось невиданное окно по этой DLL!! и все функции там и CLSID высветились!!!!! Это реально сделано на COM технологии.
Теперь как с этим работать!!??? как по CLSID и имени/id функций и свойств к ним подключиться и использовать в программе??? Вот скрин. Во вкладке Project есть пункт Import type library, подсунул эту библиотеку, чего-то компильнулось и во вкладке ActiveX появилось множество элементов, выбрав который на форму я в тексте программы получаю кучу его свойств и методов!!! Правдя попросил сохранить саму DLL - хотя я её не менял... Дубу бытать теперь эти методы и пр... СПАСИБО! Напишу что получилось . Последний раз редактировалось -=#PupaJr#=-, 22.11.2016 в 16:42. |
#12
|
|||
|
|||
Всем спасибо.
Функции работают, все грузятся в те же адреса что и в родной программе, В отладчике так же можно всё проследить. Топик переродился наверное в другую тему - из синтаксиса в технологию, поскольку COM и ActiveX... Если посчитают нужным то пусть перенесут админы. У меня вопросы исчерпаны по ней. |
#13
|
|||
|
|||
Отладка ActiveX DLL
После всех мытарств понял что надо бы подключить все имена функций в отладчик, загрузив простую DLL в отладчик я вижу вызываемые функции по именам, эта же ActiveX DLL не имеет таблицы экспорта - как быть? Сейчас в проект я себе гружу полученный TLB и могу вызвать все свойства и функции с процедурами из неё, но как их загрузить имена в отладчик??
|