|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 25, 2004 14:00:19 Я тут решил поиграться с переадресацией.... то бишь делаю фальшивый .. предположим wsock32.dll .... экспортирую функции с такими же именами и ординалами .... и при вызове ... программой ... функции из моей библиотеки переадрисовываю этот вызов реальной библиотеке а результат соотсвенно передаётся... в вызывающую программу ну вот естьп пару проблем... После того как будет вызвана библиотека я загружаю реальную всок32 и получаю адрес той процедуры которую подменять собрался... после того как получил адрес и сохранил его например в realsuckaddr ... в функции с таким же именем ... как в и реальной ... пушаю параметры в стек и call realsuckaddr ... так вот тут первый вопрос можно ли как нибудь это сделать быстрее (проще)... второй вопрос в том что когда в DEF файле прописываю экспорт функции ну вот так например bind @2 ... то .. ординал у bind почему то всё ровно 1... а не 2... =(.. в чём может быть проблема? |
|
|
Дата: Апр 25, 2004 19:34:52 · Поправил: rst в том то и дело, что ординалы могут быть (и есть) разные в разных версиях библиотек. Как вариант - не делать прокси-либу (то, что ты предлагаешь - переадресация вызовов). Лучше - загрузить либу, и настроить импорты в модулях на неё. Я почти так делал (только я делал хуки, а не фейк-либу) |
|
|
Дата: Апр 25, 2004 20:08:45 А не проще попробовать готовые решения, например Dll Wrapper Wizard.. |
|
|
Дата: Апр 25, 2004 20:31:49 · Поправил: Quantum Fallout пушаю параметры в стек и call realsuckaddr ... так вот тут первый вопрос можно ли как нибудь это сделать быстрее (проще)... Можно. Например так: include wsock32.inc ; ... xbind PROC a:DWORD,b:DWORD,c:DWORD invoke bind,a,b,c ; ... xbind ENDP А потом в DEF прописать так: EXPORTS xbind = bind bind @2 ... то .. ординал у bind почему то всё ровно 1... а не 2... =(.. в чём может быть проблема? EXPORTS accept @1 EXPORTS bind @2 |
|
|
Дата: Апр 26, 2004 21:12:30 EXPORTS accept @1 EXPORTS bind @2 а способ прикольный +))) а вот еслиб такая проблема действительна была ...а ассемпт был бы не нужен +)) ? с этим оказалось всё ок просто ПЕ вьювер был не нормальный.... EXPORTS xbind = bind если так экспортировать то будет экспортироваться xbind +) а не bind надо вот так EXPORTS bind = xbind а в моём случаи EXPORTS bind = xbind @2 так ну ладно ... весь код переписал по твоему совету который по логике.... логичен... всё остальное стёр... не оставил не бекапа ничего (предыдущая версия работала и занимала 5.5 кб) тут переделал всё откомпилил .... получилось 4.5 Ура! +) всё экспортирвоано нормально .... и тд итп но когда приложение загружается то .. ОШИБКа! =((( обидно даже... может поможет кто .. использовать ... такой... же принцып который по логике правилен... но почему то не работает =((( |
|
|
Дата: Апр 27, 2004 00:56:40 Fallout а вот еслиб такая проблема действительна была ...а ассемпт был бы не нужен +)) ? Даже не знаю, но ординалы можно править в хекс-редакторе. с этим оказалось всё ок просто ПЕ вьювер был не нормальный.... Юзай PE Tools! надо вот так EXPORTS bind = xbind Точно. Это я напутал, когда делал copy/paste. ОШИБКа! Что за ошибка? Можешь приаттачить приложение? |
|
|
Дата: Апр 27, 2004 10:22:01 xbind PROC a:DWORD,b:DWORD,c:DWORD invoke bind,a,b,c xbind ENDP Хм.. поздно вчера прсото пришёл ... не помню уже что за ошибка но она критическая была...(приатачить не могу так как всё дома а я на работе... работаем мы +)) так вот если просто обмазговать вот что тут написано ... впринцыпи возвращение в точку вызова то тут нет (ret) .. хм.. а если нет то код так и политит.. всё дальше и дальше... так что я думаю ret тут .. решит проблему... так как ВСок АПИ уже сама стек очитстит от параметров... то нам надо будет просто возвратится в точку вызова... хм. вот. |
|
|
Дата: Апр 27, 2004 11:29:57 Может, я и глупость спрашиваю, но учел ли ты тот факт, что под Win2K все экспортируемые из wsock32.dll функции перенаправляются в ws2_32.dll, а в wsock32.dll "лежат" только имена функций, и вызывать их не имеет смысла? |
|
|
Дата: Апр 27, 2004 12:22:29 Программа которая использует функции из всок32 вызывает их...из wsock32.... хочешь првоерить попробуй дизассемблируй всок и погляди что там.... |
|
|
Дата: Апр 27, 2004 12:26:56 Я это уже сделал, потому и задаю вопрос. .text:74FE2D5B ; Exported entry 1. accept .text:74FE2D5B public accept .text:74FE2D5B ; SOCKET __stdcall accept(SOCKET s,struct sockaddr *addr,int *addrlen) .text:74FE2D5B accept db 'ws2_32.accept',0 .text:74FE2D69 ; Exported entry 2. bind .text:74FE2D69 public bind .text:74FE2D69 ; int __stdcall bind(SOCKET s,const struct sockaddr *name,int namelen) .text:74FE2D69 bind db 'ws2_32.bind',0...ну и так далее. Догадайся, что будет, если ты передашь управление на одну из таких функций? |
|
|
Дата: Апр 27, 2004 14:04:38 Это не важно самое главное... я получаю аргументы при вызове всок32... и перенаправляю вызов в реальную сок32... а вот что дальше будет меня не волнует ... + заодно и совместимость с 9х +))) так что я всё вроде верно делаю.... |
|
|
Дата: Апр 27, 2004 14:31:13 Fallout Смотря как перенаправляешь. Если сам "ходишь" по таблице экспорта, то должен учитывать вот такие "перенаправления". Учтешь - совместимость будет и с Win9x, и с Win2K+, не учтешь - получишь совместимость только с Win9x. А если пользуешься GetProcAddress, тогда, конечно, неважно. Но если ты "все делаешь верно", то откуда у тебя берется ОШИБКа, о которой ты все еще ничего внятного не сказал? All Я смутно помню (могу и ошибаться), что была какая-то проблема, связанная именно с перехватом функций winsock. Якобы дело в том, что, в отличие от стандартных API-функций, winsock использует не __stdcall, а __cdecl. Сейчас пытаюсь посмотреть, и (по крайней мере с первого взгляда) ничего такого не замечаю. Кто знает, напомните - было ли что-то такое? |
|
|
Дата: Апр 27, 2004 14:45:08 Помнится, некто mamaich с reversing.net писал что-то для перехвата функций winsock. Кажется это есть на mamaich.fuckru.net, не помню точно. И вообще, исходники винсок "зарелизили" вместе с сырцами win2k |
|
|
Дата: Апр 27, 2004 16:10:11xbind PROC a:DWORD,b:DWORD,c:DWORD invoke bind,a,b,c xbind ENDP Если это заменить на: xbind: jmp bind ;; или jmp [bind] Параметры все равно в стеке. Так же могут решиться проблемы с stdcall / cdecl. Только надо учесть, что после jmp нет смысла писать код, в отличае от invoke |
|
|
Дата: Апр 27, 2004 16:35:40 Через ГетПроцессАдрес ничего не ошибалось (не в момент написания первого поста. а через два часа после него).... ошибка появилась после того как я инвокал ... по примеру.. уважаемого Квантума... который логичен обсалютно ... я прсото хочу по возможности уменьшить всё... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.078 |