Convertir un code C++ en VB...

Signaler
Messages postés
48
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
15 octobre 2007
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Salut !

Voilà je dois utiliser le code suivant dans un serveur en VB6 pour décrypter/encrypter :

--------------------------
struct RC4STATE {
unsigned char l1, l2, s[256];
};

//
// Used for v3.3+ clients to initialize RC4
//
const unsigned char rc4_init_v33[16] = {
0x057, 0x04F, 0x049, 0x036, 0x0A, 0x0FE, 0x022, 0x007,
0x0DF, 0x0B3, 0x036, 0x099, 0x097, 0x02B, 0x05A, 0x0E1
};

//
// Used for v3.3+ worlds to initialize RC4
//
const unsigned char rc4_init_world_v33[16] = {
0x058, 0x059, 0x0A1, 0x0F5, 0x06F, 0x0B8, 0x075, 0x0C4,
0x0E0, 0x04E, 0x042, 0x080, 0x020, 0x00C, 0x09E, 0x088
};

//
// Initialize p using init which is init_len bytes long
//
void rc4_init(struct RC4STATE *p, const unsigned char *init, int init_len)
{
unsigned char tmp = 0;
int i, j = 0;

p->l1 = 0;
p->l2 = 0;
for (i = 0; i < 256; i++) {
p->s[i] = i;
}

for (i = 0; i < 256; i++) {
unsigned char tmp2 = p->s[i];
tmp = tmp2 + init[j] + tmp;
p->s[i] = p->s[tmp];
p->s[tmp] = tmp2;
if (++j >= init_len) {
j = 0;
}
}
}

//
// Get next byte in keystream from p
//
unsigned char rc4_get_key(struct RC4STATE *p)
{
unsigned char tmp;
p->l1++;
p->l2 += p->s[p->l1];
tmp = p->s[p->l2];
p->s[p->l2] = p->s[p->l1];
p->s[p->l1] = tmp;
return p->s[(p->s[p->l1] + p->s[p->l2]) & 0x0ff];
}

//
// Skip keys in the keystream from p
//
void rc4_skip_keys(struct RC4STATE *p, unsigned short skip)
{
while (skip-- > 0) {
rc4_get_key(p);
}
}

--------------------------

Si quelqu'un pouvait me le convertir en VB ou le mettre en DLL utilisable sous vB, je le remercierai infiniment !
Si vous voulez plus d'informations sur la méthode utilisée pour crypter, demandez-moi. Le cryptage est celui utilisé par ActiveWorlds :-)

Je vous remercierai en vous offrant une bannière de  1 mois (voir plus) sur mon forum de bientôt 3000 utilisateurs.

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
http://bnmvp.free.fr/rc4.zip



Le zip fait 695 octets et la dll 2.5 Ko

rc4_init(), rc4_get_key() et rc4_skip_keys() sont exportées.

Annonce quand tu auras pris le zip, j'enlève au maxi dans 3 jours.

ciao...
BruNews, MVP VC++
Messages postés
14764
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
26 janvier 2021
151
Bonjour

struct RC4STATE {
unsigned char l1, l2, s[256];
};

Type RC4STATE
l1 as byte
l2 as byte
s(0 to 255) as byte
End Type

void rc4_skip_keys(struct RC4STATE *p, unsigned short skip)
{
}

Sub rc4_skip_keys(byref p as RC4STATE, byval skip as integer)
'Code
End Sub

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
Messages postés
48
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
15 octobre 2007

Merci beaucoup, BruNews, tu me décharges d'un poids important :)

Nhenry, le code n'est aps de moi
Messages postés
48
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
15 octobre 2007

Ok alors voilà j'utilise ceci pour accéder à rc4_init
Public Declare Function rc4_init Lib "C:\Documents and Settings\Aweb\Mes documents\VB\AWserv\rc4.dll" () As String

Puis je fais
MsgBox rc4_init

Et VB plante.

Sauriez-vous m'indiquer les moyens d'utiliser cette DLL ?
Je me sers de ce tutoriel http://edais.mvps.org/Tutorials/CDLL/ mais malheureusement ce n'est pas assez clair pour moi
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
rc4_init() ne retourne ni String ni quoi que ce soit et de plus elle prend 3 paramètres.

Je sens que là on part de trop loin alors je lache l'affaire.
NHenry t'a préparé plus haut le 'type' VB qui remplace la struct C, vois avec un pro du VB pour la suite.

ciao...
BruNews, MVP VC++