Чужая DLL

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Чужая DLL

Сообщение drronnie » 31.01.2006 (Вт) 14:54

Господа, есть чужая ДЛЛка (не ActiveX), знаю какие у неё процедуры и функции, а как узнать (и можно ли вообще), какие они принимает аргументы и что возвращает?
Например процедура OnAbout ничего не принимает, и ничего не возвращает, а показывает окошко. Вызываю - работает,
а DeviceInfo... тут уже грабли.
Компиляция - перевод словесного поноса в машинный код.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.01.2006 (Вт) 15:05

Берём документацию к библиотеке, смотрим.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Шнурок
Постоялец
Постоялец
 
Сообщения: 371
Зарегистрирован: 12.11.2004 (Пт) 19:28
Откуда: Санкт-Петербург

Сообщение Шнурок » 31.01.2006 (Вт) 22:05

а если документации нету :roll:
02.01.2004

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 01.02.2006 (Ср) 2:17

Берем OllyDbg и копаемся в коде...
Кстати, это только на первый взгляд сложно.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 01.02.2006 (Ср) 10:40

2AjaxVS: Ты соверешенно прав, на второй взгляд это оказывается куда сложнее.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 01.02.2006 (Ср) 14:02

Пардон, про дебаггеры...... я не с Olly не с SI сроду не сталкивался, поэтому как посмотреть не знаю..... я смотрел при помощи PE Explorer...
А спомощью Олли...? Как это делается? Есть линк на статью какую-нидь?
GSerg, где ж вы такие умные берётесь? Что ж вы в столовую строем не ходите и тельник на себе не носите?
Компиляция - перевод словесного поноса в машинный код.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 01.02.2006 (Ср) 14:23

Зря ты, Andll. Это действительно просто.
2dronnie:
А ты не пробовал в VB подключить эту библу (через References), потом нажать F2, найти эту библу и посмотреть, что тебе надо?
Это вроде проще... Я всегда так библы изучаю.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.02.2006 (Ср) 14:35

AjaxVS, а ты перечитай для начала пилотный пост. Особенно 5 и 6 слово.
Lasciate ogni speranza, voi ch'entrate.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 02.02.2006 (Чт) 0:26

AjaxVS, не ActiveX :!: :!: :!:
А про Олли расскажи.... ну не пользовался я Дебаггерами

Кстати, может быть кто-то уже копал.... меня от uICE интересуют библы..... может у кого-то есть спецификация плагинов...
На сайте автора написано, что высылает по запросу, но у меня программа крякнутая, на запрос он ничего не ответил и сайт датирован 2003 годом....
Компиляция - перевод словесного поноса в машинный код.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 02.02.2006 (Чт) 1:14

Ну ладно, ладно, извините....
С Олли работать просто. Открываешь библу с помощью нее, делаешь поиск по внутренним фунциям... Далее либо через Alt+N, либо через брейкпоинты (так даже лучше - нагляднее) отыскиваешь свою функцию... Смотришь, какие параметры находяться в регистрах... Ну вот и все, в общем, дальше все ясно.
Но сам понимаешь, надо и самому чуть-чуть покапаться...
Удачи!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.02.2006 (Чт) 5:04

AjaxVS
По приведённому описанию понятно, что ты этим никогда не занимался. Либо занимался, анализируя функцию с одним параметром типа DWORD.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 02.02.2006 (Чт) 9:41

drronnie
Готового рецепта по определению назначения параметров нет.
Если ф-ция stdcall, кол-во параметров можно определить по операнду команды retn. (делить на 4). Если cdecl - смотреть, насколько далеко берет ф-ция параметры (в сторону больших адресов от содержимого esp). При этом учитывать, что каждый push/pop увеличивает/уменьшает на 4 адреса параметров (esp). Локальные переменные тоже изменяют esp и это тоже надо учитывать. Первоначально (в точке входа в ф-цию) esp указывает на точку возврата. Первый параметр находится по адресу, указанному в esp +4, второй +8 и т.д.
Если есть стековый фрейм (push ebp/mov ebp,esp) - вся адресация будет вестись относительно ebp: первый параметр - [ebp+8], второй [ebp+0C] и т.д.
Вот и следи постоянно за этими ячейками, что с ними делается.
Если в теле ф-ции есть вызовы апи - смотри, какие параметры в неё передаются, может какие-то из твоих (напрямую или после обработки). Это тоже помогает.
В общем, нужна практика. Дерзай :)

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 02.02.2006 (Чт) 10:24

Смотришь, какие параметры находяться в регистрах

А если параметров больше чем регистров?
Если cdecl - смотреть, насколько далеко берет ф-ция параметры (в сторону больших адресов от содержимого esp).

Если функция cdecl - то количество параметров вообще говоря вещь не постоянная.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 02.02.2006 (Чт) 10:41

Если функция cdecl - то количество параметров вообще говоря вещь не постоянная

Это из своей программы ты можешь передавать разное количество параметров.
А у ф-ции в dll количество параметров постоянное, независимо от того, переданы некоторые опциональные или нет.

Естественно это не относится к ф-циям типа wsprintf

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 02.02.2006 (Чт) 11:17

А у ф-ции в dll количество параметров постоянное

Неужто? С чего бы это?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 02.02.2006 (Чт) 11:54

Ну вот... вообще запутали :)
Полдня возился а результатов 0...

Ещё, я понимаю, что ламерская просьба типа "напишите мне что-нибудь", но всё же если может у кого-нибудь время будет, то может поглядит на эту библиотеку, а?
Вложения
Keyboard.zip
Плагин ввода, который использует uICE
(7.74 Кб) Скачиваний: 22
Компиляция - перевод словесного поноса в машинный код.

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 02.02.2006 (Чт) 12:08

ANDLL писал(а):
А у ф-ции в dll количество параметров постоянное

Неужто? С чего бы это?


С того.
Код в dll не перекомпилируется при каждом вызове в зависимости от количества переданных параметров, если было заложена обработка трех параметров - так и осталась обработка трех. Сколько хочешь, столько и передавай. Хоть 18. Это твои проблемы.
int foo ( int p1, int p2, int p3){
///
}
Вот и будем смотреть, что происходит с [esp+4], [esp+8], [esp+12]
А передаешь ты их или нет - это твои проблемы, и с количеством параметров, принимаемых ф-цией (3) это никак не связано.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 02.02.2006 (Чт) 12:13

А КТО тебе сказал, что код cdecl функций перекомпилируется, в зависимости от того, сколько параметров ему переданы??? Переменное колчиество параметров для cdecl функций это тебе не overloading. Короче ты не прав. Например такая cdecl-функция
Код: Выделить всё
int __declspec(dllexport) __cdecl A(...)

Компилируется однозначно. Независимо от того, какие вызовы к ней имеются в программе.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 02.02.2006 (Чт) 12:33

Код: Выделить всё
                       DeviceInfo:
10001590  682E340010       push   L1000342E
10001595  6898330010       push   SSZ10003398_Keyboard
1000159A  E8B1FCFFFF       call   SUB_L10001250
1000159F  8B4C240C         mov   ecx,[esp+0Ch]
100015A3  83C408           add   esp,00000008h
100015A6  894104           mov   [ecx+04h],eax
100015A9  C70110000000     mov   dword ptr [ecx],00000010h
100015AF  C7410803000000   mov   dword ptr [ecx+08h],00000003h
100015B6  C7410C01000000   mov   dword ptr [ecx+0Ch],00000001h
100015BD  C20400           retn   0004h


Ф-ция stdcall, количество параметров - 1. Параметр - указатель (видимо на какую-то структуру, т.е. передаётся адрес)
Вызывается cdecl подпрограмма SUB_L10001250, и результат её работы заносится в эту структуру (второй от её начала дворд)
В первый дворд структуры заносится 16, в третий - 3, в четвертый -1.
Вот и подбирай по смыслу, что за структура такая может быть, у которой первые четыре поля - дворды. (полей в структуре может быть и больше чем 4)

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 02.02.2006 (Чт) 12:36

ANDLL

Естественно, что любой правильный код компилится, даже если эта dll никогда не будет использована. Возможность скомпилировать ни о чём не говорит.

Если использовано cdecl, это ни о чём не говорит, кроме того, что вызывающий код сам очистит стек. То что ты привел - это не единственный, а только частный случай использования cdecl, вернее это сыграно на тех возможностях, что предоставляет cdecl. Но совершенно не значит, что cdecl должны быть именно такими, с vararg. Более того, это нетипичный случай, и такого рода ф-ций меньшинство.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 02.02.2006 (Чт) 12:48

Попробуем короче. Вот это
Код в dll не перекомпилируется при каждом вызове в зависимости от количества переданных параметров

не соответствует истине.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 02.02.2006 (Чт) 12:59

Да разве ж я говорю, что он компилируется каждый раз???
Иопта, ну что ж мы такие тугие?
Или читать и понимать прочитанное проблема?

Ещё раз: (цитирую себя)

Код в dll НЕ перекомпилируется при каждом вызове


Если тебе больше нравится, что он при каждом вызове перекомпилируется - сколько угодно, можешь заново компилировать ф-цию при каждом вызове. Под любое кол-во параметров.
Флаг в руки.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 02.02.2006 (Чт) 13:06

Ах там еще приставка не запала.
Иопта, ну что ж мы такие тугие?

Все от общения с вами, сильно умными....
Ну ладнно, тогда это:
А у ф-ции в dll количество параметров постоянное, независимо от того, переданы некоторые опциональные или нет.

не верно....
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 02.02.2006 (Чт) 13:24

Я уже устал спорить с сильно умным.
Пусть ваши dll перекомпилируются при вызове.
Пусть ваши cdecl автоматом становятся ф-циями с переменным количеством параметров (vararg).
Пусть ваши 2х2=31, а не 4.

Мне все равно, что в ваших dll происходит. Пусть хоть носороги там бегают в переменных количествах.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.02.2006 (Чт) 15:05

ANDLL, не кипятись... носителей синдрома BP ни в чём убедить нельзя...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 02.02.2006 (Чт) 15:38

Похоже, понимание того, что можно передавать лонг ByRef - это за пределами твоего понимания :)
Так что, если у кого и синдром, иак это у тебя.
А какой синдром - придумай себе сам.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 02.02.2006 (Чт) 19:21

Я вкратце объяснил человеку, с чего начинать...
Или вы думаете, что я/кто-то другой/ смогу объяснить за 5 минут принцип работы Олли во всех ее проявлениях?..
Последний раз редактировалось AjaxVS 02.02.2006 (Чт) 22:51, всего редактировалось 1 раз.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 02.02.2006 (Чт) 19:54

:rambo: Ну вы, блин, даете, горячие финские парни...
А я все практикую лечение травами...

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 03.02.2006 (Пт) 7:38

И это из темы в тему... :lol:
Кстате, а нельзя пробутофорсить дллку c помощью GetProcAddress, и с получеными адресами её потом в IDA исследовать? Хотя это безумно :)

[/quote]

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 04.02.2006 (Сб) 14:08

Wild VB Code for Food, а что значит " пробутофорсить дллку c помощью GetProcAddress"? и что такое IDA?
Компиляция - перевод словесного поноса в машинный код.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

    TopList  
cron