![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго всем дня.
Банальный и старый вопрос про чужие DLL написанные "кем-то на С++". При отладке (взломе ![]() Знаю адрес процедуры в физической памяти от родного процесса - узнал при пошаговом трейсе в 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
|
|||
|
|||
![]() После всех мытарств понял что надо бы подключить все имена функций в отладчик, загрузив простую DLL в отладчик я вижу вызываемые функции по именам, эта же ActiveX DLL не имеет таблицы экспорта - как быть? Сейчас в проект я себе гружу полученный TLB и могу вызвать все свойства и функции с процедурами из неё, но как их загрузить имена в отладчик??
|