VB/VB.Net L'opération arithmétique a provoqué un dépassement de ca...

A

Anonymous

Invité
#41
Re: L'opération arithmétique a provoqué un dépassement de ca

Code:
Public Class Version

    Public major As UInteger = 0
    Public minor As UInteger = 0
    Public release As UInteger = 0
    Public revision As UInteger = 0
    Public patch As UInteger = 0
    Public buildType As UInteger = 0
    Public protocolId As UInteger = 11
    Public Function Version()
        Return Me
    End Function

    Public Function getTypeId()
        Return 11
    End Function

    Public Function initVersion(ByVal param1 As UInteger, ByVal param2 As UInteger, ByVal param3 As UInteger, ByVal param4 As UInteger, ByVal param5 As UInteger, ByVal param6 As UInteger)

        Me.major = param1
        Me.minor = param2
        Me.release = param3
        Me.revision = param4
        Me.patch = param5
        Me.buildType = param6

        Return Me
    End Function

    Public Function reset()

        Me.major = 0
        Me.minor = 0
        Me.release = 0
        Me.revision = 0
        Me.patch = 0
        Me.buildType = 0

        Return Nothing

    End Function

    Public Function serialize(ByVal param1 As DofusWriter)
        If Me.major < 0 Then

            Throw New Exception("Forbidden value (" + Me.major + ") on element major.")
        End If
        param1.WriteByte(Me.major)

        If (Me.minor < 0) Then

            Throw New Exception("Forbidden value (" + Me.minor + ") on element minor.")
        End If
        param1.WriteByte(Me.minor)

        If (Me.release < 0) Then

            Throw New Exception("Forbidden value (" + Me.release + ") on element release.")
        End If
        param1.WriteByte(Me.release)

        If (Me.revision < 0 Or Me.revision > 65535) Then

            Throw New Exception("Forbidden value (" + Me.revision + ") on element revision.")
        End If
        param1.WriteInt16(Me.revision)

        If (Me.patch < 0) Then

            Throw New Exception("Forbidden value (" + Me.patch + ") on element patch.")
        End If

        param1.WriteByte(Me.patch)
        param1.WriteByte(Me.buildType)

        Return Me
    End Function

    Public Function deserialize(ByVal param1 As DofusReader)
        Me.major = param1.ReadByte()
        If Me.major < 0 Then

            Throw New Exception("Forbidden value (" + Me.major + ") on element major.")

        End If

        Me.minor = param1.ReadByte()
        If (Me.minor < 0) Then

            Throw New Exception("Forbidden value (" + Me.minor + ") on element minor.")

        End If


        Me.release = param1.ReadByte()
        If (Me.release < 0) Then

            Throw New Exception("Forbidden value (" + Me.release + ") on element release.")

        End If


        Me.revision = param1.ReadUnSignedshort()
        If (Me.revision < 0 Or Me.revision > 65535) Then

            Throw New Exception("Forbidden value (" + Me.revision + ") on element revision.")

        End If


        Me.patch = param1.ReadByte()
        If (Me.patch < 0) Then

            Throw New Exception("Forbidden value (" + Me.patch + ") on element patch.")

        End If

        Me.buildType = param1.ReadByte()
        If (Me.buildType < 0) Then

            Throw New Exception("Forbidden value (" + Me.patch + ") on element patch.")

        End If




        Return Me
    End Function

End Class
Je l'ai fais moi celui là donc ya peut être fautes mais j'en ai pas trouve.
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#42
Re: L'opération arithmétique a provoqué un dépassement de ca

Param1.WriteUInt16(Me.Revision) au lieu de WriteInt16(), pour commencer.

Teste et dis-nous.
 
A

Anonymous

Invité
#43
Re: L'opération arithmétique a provoqué un dépassement de ca

Ushort ne fonctionne pas : ça ne change rien.
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#44
Re: L'opération arithmétique a provoqué un dépassement de ca

Bon, alors c'est le mot de passe qui est mal écrit, je pense.
Donne ta classe qui gère le RSA !
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#45
Re: L'opération arithmétique a provoqué un dépassement de ca

as tu "envoie : id = xx" dans la fenetre de sortie ? si oui et que pas de MsgBox("Il ne va pas ici") alors il ne va pas dans le "If Form1.socketConnexion.Connected Then" (pourquoi c'est pas connected ???) mais dans son "else" alors il essait d'envoyer avec socketjeu (qui lui est pas encore co , ca c'est normal donc tu as l'erreur qui dit que le sock est pas co)
 
A

Anonymous

Invité
#46
Re: L'opération arithmétique a provoqué un dépassement de ca

Rebonjour, Oui je comprends pas pourquoi il se deco alors qu'on lui a rien dit :/ on fait juste que recevoir : il serait plus compréhensible qu'il se déco après le premier envoi.

Classe de cryptage est la suivante :

Code:
Imports System.Security.Cryptography
Imports CSInteropKeys
Imports System.IO
Imports System.Text

Public Class RSAManager

    Private Const Key As String =
        "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApHRiGIhIJrNdUJkKGtWC" +
        "sSqIza+2gPsjGXhSoDTOcokq59Et8d8SzgF68RvAZXezPO8tnUhlyvaDem4QSFLV" +
        "PVAmSRcp47HW4lpp11WHBlDsEEXQTBkM8nDyqSgn8dMANvButRDt/44OKslrfqmV" +
        "7ANmZggZ2wXN0T6XWt3FVC66X8+E7rUMUOREQYCDq3zrX4dNYy3y21lyJZeXTkSd" +
        "AmijqIHrrwLPTA/wpWLCEaIJ9OAWjds8L6TqONXvnf3qOtI/QsrWv24lRjtmRSeR" +
        "eKFIPrk8QQbcd2h4VUi06fJZ2ydCx0pOwU33izN42pmZoCrgdCwghFm1i2feQa0M" +
        "vQIDAQAB"

    Public _salt As String
    Public _publicKey As String

    Private Shared Function CompareByteArrays(ByVal a As Byte(), ByVal b As Byte()) As Boolean
        If a.Length <> b.Length Then
            Return False
        End If
        Dim i As Integer = 0
        For Each c As Byte In a
            If c <> b(i) Then
                Return False
            End If
            i += 1
        Next
        Return True
    End Function

    Private Shared Function DecodeX509PublicKey(ByVal x509Key As Byte()) As RSACryptoServiceProvider

        Dim seqID As Byte() = {&H30, &HD, &H6, &H9, &H2A, &H86, _
         &H48, &H86, &HF7, &HD, &H1, &H1, _
         &H1, &H5, &H0}
        Dim seq As Byte()

        Dim mem As New MemoryStream(x509Key)
        Dim binr As New BinaryReader(mem)

        Dim bt As Byte
        Dim twobytes As UShort

        Try

            twobytes = binr.ReadUInt16()
            If twobytes = &H8130 Then
                binr.ReadByte()
            ElseIf twobytes = &H8230 Then
                binr.ReadInt16()
            Else
                Return Nothing
            End If

            seq = binr.ReadBytes(15)
            If Not CompareByteArrays(seq, seqID) Then
                Return Nothing
            End If

            twobytes = binr.ReadUInt16()
            If twobytes = &H8103 Then
                binr.ReadByte()
            ElseIf twobytes = &H8203 Then
                binr.ReadInt16()
            Else
                Return Nothing
            End If

            bt = binr.ReadByte()
            If bt <> &H0 Then
                Return Nothing
            End If

            twobytes = binr.ReadUInt16()
            If twobytes = &H8130 Then
                binr.ReadByte()
            ElseIf twobytes = &H8230 Then
                binr.ReadInt16()
            Else
                Return Nothing
            End If

            twobytes = binr.ReadUInt16()
            Dim lowbyte As Byte
            Dim highbyte As Byte = &H0

            If twobytes = &H8102 Then
                lowbyte = binr.ReadByte()
            ElseIf twobytes = &H8202 Then
                highbyte = binr.ReadByte()
                lowbyte = binr.ReadByte()
            Else
                Return Nothing
            End If

            Dim modint As Byte() = {lowbyte, highbyte, &H0, &H0}
            Dim modsize As Integer = BitConverter.ToInt32(modint, 0)

            Dim firstbyte As Byte = binr.ReadByte()
            binr.BaseStream.Seek(-1, SeekOrigin.Current)

            If firstbyte = &H0 Then
                binr.ReadByte()
                modsize -= 1
            End If

            Dim modulus As Byte() = binr.ReadBytes(modsize)

            If binr.ReadByte() <> &H2 Then
                Return Nothing
            End If
            Dim expbytes As Integer = CInt(binr.ReadByte())
            Dim exponent As Byte() = binr.ReadBytes(expbytes)

            Dim RSA As New RSACryptoServiceProvider()

            Dim RSAKeyInfo As New RSAParameters() With {
             .Modulus = modulus,
             .Exponent = exponent
            }

            RSA.ImportParameters(RSAKeyInfo)

            Return RSA

        Catch e As Exception

            Return Nothing

        Finally

            binr.Close()

        End Try

    End Function

    Public Shared Function Encrypt(ByVal text As String) As String

        Dim rsa As RSACryptoServiceProvider = DecodeX509PublicKey(Convert.FromBase64String(Key))
        If rsa Is Nothing Then Return ""
        Return Convert.ToBase64String(rsa.Encrypt(Encoding.UTF8.GetBytes(text), False))

    End Function
    Public Function setSalt(ByVal param1 As String)
        Me._salt = param1
        If (_salt.Length < 32) Then
            Console.WriteLine("Authentification salt size is lower than 32")
            While (Me._salt.Length < 32)
                Me._salt = Me._salt + " "
            End While
        End If
        Return Me
    End Function
    Public Function setPublicKey(ByVal param1 As List(Of Int32)) As String
        Dim _loc_2 As New List(Of Byte)
        Dim _loc_3 As Int32 = 0
        While (_loc_3 < param1.Count)
            _loc_2.Add(Convert.ToByte(param1(_loc_3)))
            _loc_3 = _loc_3 + 1
        End While
        Dim loc4 = Convert.ToBase64String(_loc_2.ToArray)
        Me._publicKey = loc4
        Return Me._publicKey
    End Function
    Public Function cipherRsa(ByVal param1 As String) As List(Of Int32)
      Dim loc7 As Int32 = 0
        Dim rsa As RSACryptoServiceProvider = DecodeX509PublicKey(Convert.FromBase64String(_publicKey))
        If rsa Is Nothing Then Return Nothing
        Dim loc5 As List(Of Int32) = New List(Of Int32)
        Dim loc4 = rsa.Encrypt(Encoding.UTF8.GetBytes(Me._salt + param1), False)
        For Each loc6 In loc4
            loc5.Add(Convert.ToByte(loc6))
        Next
        Return loc5
    End Function

End Class
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#47
Re: L'opération arithmétique a provoqué un dépassement de ca

Donc le packet 4 est bien envoyé.
Ta classe qui gère le RSA est dépassée.
 
A

Anonymous

Invité
#48
Re: L'opération arithmétique a provoqué un dépassement de ca

C4est bien ce que je me disais :/ J'avais decompiler une ancienne version. Je sens que je vais galérer a traduire la class :( mais merci beaucoup, j’espère que c'est ça ^^
 
A

Anonymous

Invité
#49
Re: L'opération arithmétique a provoqué un dépassement de ca

Un dernière petite question : C'est normal quand je traduit la fonction de cryptage j'ai plein de nouvelles classes ! RSA, PEM, plein de nouveaux trucs. On doit tout traduire ou c'est des fonctions de D. qui sont résumes dans les Class comme RSAManager qui as été mise sur le fofo. C'est vraiment le bazar ! J'ai l'impression que je suis le seul a avoir les problèmes alors que c'est vachement le bordel pour tout traduire ligne par ligne avec des fonctions qui n'existent aps dans vb. :/
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#50
Re: L'opération arithmétique a provoqué un dépassement de ca

Tu peux prendre un résumé sur le forum. J'en avais posté un il n'y a pas si longtemps que ça !
(cherche dans mes messages)
 
A

Anonymous

Invité
#51
Re: L'opération arithmétique a provoqué un dépassement de ca

C'est la classe obsolète non ? Par exemple dans la classe PEM :

J'ai aucune idée de comment traduire ça :
Code:
var(_loc_4) : Array = null
ou ça
Code:
* =
Faut bien dire ce qu'est l'array, ils le remplissent avec un truc dans la class DER :/ Encore une ! Comme s'ils faisaient ça pour nous faire chier.
 
A

Anonymous

Invité
#53
Re: L'opération arithmétique a provoqué un dépassement de ca

Merci, il me deco :
Code:
recu : id = 1 taille = 8
recu : id = 3 taille = 330
envoie : id = 4, taille = 279
0x00020503D38201000002667200052A2A2A2A2A01001588EEBA03C260D2536A9DDBF1E27F6392DAAC24C309A4FEC707D5C5B82EFE89293491D6394EDA6912ADA8ED696BEFD4421C137EA099E0266F3A0A7991820A7E794515E966B9CC60420D326DC32A1995739157F22B660B569FA67B44247EB61CDFC09195F402757ADAED1FC49358AA4FFA165687882A795EAD7BDF6BBBFC54F0EF9B31C62CB25BDDD5C1D7190FFA60E13BE32400E6EE173443AC4CAF161EC87F3E1A40052BFCE7CCD764141003F9DA32131CB9D7CA72F58E84B6F2E34B84748C9F99FF92C63C0CE84B1DF7FC8C07EBDCD276E962B7AECFAC25E59ED2BAEF74FD50C52A9922289A6AC573173E1832789014B21519416772832A204EBB0F22B7680000
parsing() Send -> Une requête d’envoi ou de réception de données n’a pas été autorisée car le socket n’est pas connecté et (lors de l’envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n’a été fournie
Il doit envoyer quelque chose qu'il faut pas :/

Pourtant tout me semble correct :
Code:
ID_Message = New HelloConnectMessage
                ID_Message.Deserialize(PacketData)

                Dim key = ID_Message.key
                Dim salt = ID_Message.salt

                Dim Account As String = "*****"
                Dim Password As String = "******"

                ''''''''''''''''''''''''''''''''''''''''''''''''''''
                Dim CryptedPassword As List(Of Integer)

                Dim PublicKey As String = ""
                Dim PublicKeyTemp As New List(Of Byte)
                Dim saltt As String = salt

                For Each u In key
                    PublicKeyTemp.Add(u)
                Next

                PublicKey = Convert.ToBase64String(PublicKeyTemp.ToArray())

                If Salt.Length < 32 Then
                    While Salt.Length < 32
                        Salt &= " "
                    End While
                End If

                CryptedPassword = RSAManager.Encrypt(PublicKey, salt & Password)

                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                Dim version_ As New Version
                version_.initVersion(2, 5, 3, 54146, 1, 0)

                Dim Message As New IdentificationMessage
                Message.initIdentificationMessage(version_, "fr", Account, CryptedPassword, 0, True, True, False)
                Message.pack()
Décidément, il m'aime pas D. :(
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#54
Re: L'opération arithmétique a provoqué un dépassement de ca

En même temps, si tu mets UseCertificat à True...
 
A

Anonymous

Invité
#55
Re: L'opération arithmétique a provoqué un dépassement de ca

Le mettre a false ne change rien : j'ai déjà essayer ;)
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#56
Re: L'opération arithmétique a provoqué un dépassement de ca

Bah dis donc.
C'est une grande énigme pour moi.
 
A

Anonymous

Invité
#57
Re: L'opération arithmétique a provoqué un dépassement de ca

Bonsoir,

tout a l'air correct, un probleme de traduction des class ou du cryptage RSA...
Cela ne peux venir que de la, ton code est correct.

Cordialement
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#58
Re: L'opération arithmétique a provoqué un dépassement de ca

mais noooon , c'est déco AVANT l'envoie (contrairement a ce que le log raconte) donc pour le moment rien a voire avec la clef ou je ne sais pas quoi puisque de toute facont y'a pas de sock avant d'envoyer , c'est plutot du coté des receptions qu'il faut regarder en pas a pas
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#59
Re: L'opération arithmétique a provoqué un dépassement de ca

ToOnS a dit:
mais noooon , c'est déco AVANT l'envoie (contrairement a ce que le log raconte) donc pour le moment rien a voire avec la clef ou je ne sais pas quoi puisque de toute facont y'a pas de sock avant d'envoyer , c'est plutot du coté des receptions qu'il faut regarder en pas a pas
Totalement illogique j'ai envie de dire, mais au point où on en est...
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#60
Re: L'opération arithmétique a provoqué un dépassement de ca

mais si c'est logique ... regarde le code page 4 ... le log est ecrit AVANT d'envoyer donc meme si le sock est deco (ce systeme je le connais comme si je l'avais fait , surement parceque c'est moi qui l'a fait ...)
et l'erreur c'est :
parsing() Send -> Une requête d’envoi ou de réception de données n’a pas été autorisée car le socket n’est pas connecté
donc c'est bien que l'envoie ne marche pas car c'est deco avant l'envoie
 
Haut Bas