VB & libmcrypt.dll

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

VB & libmcrypt.dll

Сообщение JohnK » 01.08.2009 (Сб) 15:49

Есть библиотечка для шифрования libmcrypt.dll
Как к ней подступиться?
Я так понял нужно сделать TLB, тогда вопрос как?

PS. mktyplib не нашел...
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 01.08.2009 (Сб) 16:56

Э... найти mktypelib или midl, сперва.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 01.08.2009 (Сб) 18:58

Все же MKTYPLIB.EXE

А чем генерить ODL ? MKTYPLIB.EXE просит ODL файл...
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 01.08.2009 (Сб) 19:00

Блокнотом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 01.08.2009 (Сб) 19:13

Ага, понял... Это ж язык такой. :)

Тогда как мне сие чудо описать?

Код: Выделить всё
string mcrypt_encrypt ( string $cipher , string $key , string $data , string $mode [, string $iv ] )


Нужно найти синтаксис ODL ...

P.S. А как будет лучше работатьс библиотечко. Может так?
Код: Выделить всё
ret = LoadLibrary(App.Path & "\" & LibName)
pa = GetProcAddress(ret, "mcrypt_encrypt")


Вот только вопрос как мне строку эту забрать. Как это делает PHP? Он должен передавать ValByRef, а я должен CopyMemory?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 01.08.2009 (Сб) 19:35

Странно, довольно распространенная библиотечка. Неужели одному мне понадобилась она?

Кратко по задаче:
Сервер (Apache + PHP) присылает мне ответ закодированный libmcrypt, ключ я знаю. Мне нужно строку раскодировать.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 01.08.2009 (Сб) 20:12

Найди нормальный прототип.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 01.08.2009 (Сб) 21:18

Вот нашел:

Код: Выделить всё
   MCRYPT mcrypt_module_open(char *algorithm,
              char *a_directory, char *mode,
              char *m_directory);
   int mcrypt_module_close(MCRYPT td);

   int mcrypt_generic_init(const MCRYPT td, void *key, int lenofkey,
            void *IV);
   int mcrypt_generic_deinit(const MCRYPT td);

   int mdecrypt_generic(MCRYPT td, void *plaintext, int len);
   int mcrypt_generic(MCRYPT td, void *plaintext, int len);



Я не пойму откуда взять uuid ? Можно любой "случайный" написать, или только используя uuidgen.exe?

#define RTCALL _stdcall

[
uuid(C6799410-4431-11d2-A7F1-00A0C91110C3),
lcid (0), version(6.0), helpstring("McryptSupport for VB6")
]
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 01.08.2009 (Сб) 22:04

Я не пойму откуда взять uuid ?

Для чего? Для функций, модулей он не нужен, для библиотеки — сгенерируй случайный (тем же uuidgen-ом).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 01.08.2009 (Сб) 23:13

А как выглядит скелет obl файла, скажем для одной функции.

У меня mktyplib.exe ругается: fatal error M0006: unable to pre-process input file
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 01.08.2009 (Сб) 23:24

Код: Выделить всё
library
{
     module
     {
          function
     }
}
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 02.08.2009 (Вс) 1:45

Т.е. будет правильно ?

Код: Выделить всё
library
{
   #define LONG int
   #define INTEGER short
   typedef [uuid(C976801A-64E5-4c51-A94D-F4BB74363CD0)] short IntByVal;
   typedef [uuid(68F3A023-A663-4bac-A666-449F16223E5B)] short* IntByRef;
   typedef [uuid(EA1387E8-F516-460f-9E45-97F835426AE1)] int LongByVal;
   typedef [uuid(CA7559FA-0DE6-456d-92C0-8EAB8D59BD87)] int* LongByRef;
   typedef [uuid(3D57696A-BFC4-46f6-9F8C-6BE64F7FA76D)] BSTR StrByVal;
   typedef [uuid(4B44C940-89CD-4960-B7FF-5788E08BEC85)] BSTR* StrByRef;
   typedef [uuid(A10DA8C9-80CA-456b-AAE3-B5ACCA4C29F8)] LPSTR StrAnsiByVal;
   typedef [uuid(14A19CF8-3FC9-4167-AF70-2A2893EDAB02)] LPSTR* StrAnsiByRef;
   typedef [uuid(BBE81479-95BB-4ff5-900F-12DB1A72E03E)] unsigned char BYTE;
   typedef [uuid(20A967B7-DB8C-4d28-8815-ED42DA923967)] void* ANY;
     module
     {
           LONG mcrypt_module_open(StrAnsiByRef algorithm, StrAnsiByRef a_directory, StrAnsiByRef mode, StrAnsiByRef m_directory);
           LONG mcrypt_module_close(LongByVal td);
           LONG mcrypt_generic_init(LongByVal td, StrAnsiByRef key, LongByVal lenofkey);
           LONG mcrypt_generic_deinit(LongByVal td);
           LONG mdecrypt_generic(LongByVal td, StrAnsiByRef plaintext, LongByVal len);
           LONG mcrypt_generic(LongByVal td, StrAnsiByRef plaintext, LongByVal len);
     }
}
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 02.08.2009 (Вс) 1:48

Компилятор ODL и проверка результата даст тебе правильный ответ с большей вероятностью , чем я.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 02.08.2009 (Вс) 11:42

Сейчас придется Visual Studio полную поставить. Не могу нигде найти cl.exe, из-за котрого ругается mktyplib.exe (fatal error M0006: unable to pre-process input file)
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 02.08.2009 (Вс) 15:39

Выдает
Bad dll calling convention

Откуда VB узнает это? В dll прописывается тип соглашения и как его поменять?
Написал для эксперимента простую функцию сложения dll на VC, попробывал использовать в VB - работает. Ничего не пойму.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 02.08.2009 (Вс) 15:54

Он проверяет стек. Если стек сломан, кричит. Стек сломан.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 02.08.2009 (Вс) 16:28

Стек ломается из-за чего? Из-за того что вызвваемая функция "откусывает" больше стека, чем ей передается. Значит я неправильно передаю параметры?

P.S.
Просто уже весь проект сделан на VB, и мне приходится извращатся.

Я уже запутался. Есть у меня функция:
Код: Выделить всё
Private Declare Function mUpperCase Lib "Mydll.DLL" Alias "UpperCase" (ByVal lpStr As String) As Long


Но ничего не происходит..

в TASM работает,я вызываю ее так:
Код: Выделить всё
   call   UpperCase,offset Mystring


В чем прикол?
Последний раз редактировалось JohnK 02.08.2009 (Вс) 16:36, всего редактировалось 1 раз.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 02.08.2009 (Вс) 16:34

Из-за того, что нарушено соглашение насчёт того, кто и как очищает стек. То есть ты передал больше параметров, или передал меньше параметров, или передал столько, сколько надо, но функция их не убрала из стека (потому что cdecl, например, или fastcall).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 02.08.2009 (Вс) 16:41

Из-за безрезультатных попыток сделать TBL файл, я решил сделать обвертку на TASM и через свою библиотечку обращаться к этой злополучной libmcrypt.dll
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 02.08.2009 (Вс) 17:46

Да.. Тут дело не в конвенции, а в том, что VB делает со строками... :?

Вверху строка в ASCII формате. Внизу VB преобразовал строку непонятно во что (WIn1251???)

Изображение

Код: Выделить всё
Option Explicit

Private Declare Function mUpperCase Lib "E:\vb\prog\TASM_VB_test\Mydll.DLL" Alias "UpperCase" (ByVal lpStr As String) As Long

Private Sub Form_Load()
Dim tmpStr As String
tmpStr = "привет"
mUpperCase tmpStr
MsgBox tmpStr '
End
End Sub
Последний раз редактировалось JohnK 02.08.2009 (Вс) 17:53, всего редактировалось 1 раз.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 02.08.2009 (Вс) 17:49

Нет, дело именно в конвенции. И VB делает со строками ровно то, что ты ему скажешь (в зависимости от выбранного типа: LP(C)STR или LP(C)WSTR.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 02.08.2009 (Вс) 17:56

Т.е. все сводится к TLB? Если там описать как LP(C)STR, произойде долгожданное чудо?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 02.08.2009 (Вс) 18:02

Если там LPSTR, то будет конвертация Unicode->Ansi, если там LPWSTR, то конвертации не будет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 02.08.2009 (Вс) 18:34

Так что получается. Если я даже укажу
Код: Выделить всё
StrConv(tmpStr, vbFromUnicode)

Он все равно перед вызовом переведет в Unicode?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: VB & libmcrypt.dll

Сообщение Хакер » 02.08.2009 (Вс) 18:46

Он никогда не переводит ничего в юникод. Он либо переводит в A, либо оставляет в W.

Если функция ждёт ANSI-строку, худшее, что можно придумать: объявить параметр как LPWSTR и конвертировать самому. По-первых, это некрасиво, во-вторых, StrConv из vbNullString делает пустую строку, что часто чревато печальными последствиями. Встроенная конвертация vbNullString оставляет как vbNullString.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 02.08.2009 (Вс) 23:37

В дебагере провел весь день. Наконец-то получилось расшифровать строку используя библиотечку.
НО! Это все получилось в TASM`е. Как же теперь реализовать на VB?
Насколько я понял если функции в библиотеки объявляются как stdcall, в VB с ними нет проблем. Если используется конвенция cdecl, тогда труба. Здесь же и должен помочь TLB.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Re: VB & libmcrypt.dll

Сообщение JohnK » 05.08.2009 (Ср) 11:37

C TLB ничего не получилось (да и времени не было) сделал как и планировал. VB прога -> asm.dll ->libmcrypt.dll

P.S. Дествительно VB ничего ужасного не делает со строками.
Спасибо всем за участие! :D
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: VB & libmcrypt.dll

Сообщение Vi » 03.09.2009 (Чт) 7:47

Недавно попался пример, как вызывать из VB функции cdecl и прочие. Реализация - cls файл. Если интересует, то скажите, где можно запостить. Код не мой, гарантий нет, но идея интересная.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

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

Re: VB & libmcrypt.dll

Сообщение alibek » 03.09.2009 (Чт) 8:05

Прям тут, в FAQ перенесем.
Lasciate ogni speranza, voi ch'entrate.

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: VB & libmcrypt.dll

Сообщение Vi » 03.09.2009 (Чт) 9:13

alibek писал(а):Прям тут, в FAQ перенесем.

http://www.rsdn.ru/forum/vb/3523891.1.aspx - исходное сообщение - можно его не смотреть, т.к. тут вся информация изложена ниже.

Вложение с проектом, адаптированном (в пику исходному) к чему-то, я не понял к чему - http://files.rsdn.ru/52947/CallFuncByPtr.rar.

Копирайт - Спионерено отсюда - http://translate.google.com/translate?u ... uage_tools"

Если причесать, то может получиться удобная штука.


vbskb_api vbskb_cdecl vbskb_call vbskb_dll
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 17

    TopList