IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Creer un byte via VBA/VB6


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut Creer un byte via VBA/VB6
    Bonjour tout le monde,

    Si je parle en humain plutôt qu'en informatique, je cherche à faire ceci sur VBA/VB6:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Tempbuf = {0,0,0,0,0,0,0,0}  {0,0,0,0,0,0,0,0}  {0,0,0,0,0,0,0,0}  {0,0,0,0,0,0,0,0}  {0,0,0,0,0,0,0,0}
    En gros je veux créer "TempBuf" tel qu'il représente 5 octets (ou 5 bytes si on parle en anglais).

    Je l'ai fait sur VB.net et sur C# et ça donne ça :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] TempBuf = new byte[5]
    (cette ligne de code marche sur C# et VB.net)

    Voila tout j'espère avoir été clair

    PS pour les intimes: J'ai réussi à faire une fonction sur C# et VB.net qui fait un write process memory sur une adresse statique (c'est à dire avec une base address + des pointers). Et j'essaie de faire ça sur VB6 mais c'est assez dur de trouver des forums pour se renseigner sur VB6 :/ alors que se renseigner sur C# et VB.net c'est bien plus simple! (rien que pour faire un write process memory sur adresse dynamique avec VBA, il a vraiment fallu que j'épluche le web pendant des heures...)

    À tôt bien.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Si tu place ton code c# ou Vb.net on pourra t'aider à le convertir!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Pour être honnête, j'en demande pas autant. Je suis pas du genre à demander à ce qu'on me mâche le boulot, je préfère de temps en temps demander la pièce du puzzle qui me manque.

    Comme demandé, voici le code sur VB.net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
        Public Function GetPointedAddr(ByVal BFhandle As IntPtr, ByVal BaseAddr As IntPtr, Optional ByVal Offs0 As Integer = -1, Optional ByVal Offs1 As Integer = -1, Optional ByVal Offs2 As Integer = -1, Optional ByVal Offs3 As Integer = -1, Optional ByVal Offs4 As Integer = -1) As Integer
            Dim Ptr As Integer = 0
            Dim TempBuf(4) As Byte
     
            ReadProcessMemory(BFhandle, BaseAddr, TempBuf, 4, 0)
            Ptr = BitConverter.ToInt32(TempBuf, 0) + Offs0
     
            If Offs1 = -1 Then Return BitConverter.ToInt32(TempBuf, 0)
            ReadProcessMemory(BFhandle, Ptr, TempBuf, 4, 0)
            Ptr = BitConverter.ToInt32(TempBuf, 0) + Offs1
     
            If Offs2 = -1 Then Return BitConverter.ToInt32(TempBuf, 0)
            ReadProcessMemory(BFhandle, Ptr, TempBuf, 4, 0)
            Ptr = BitConverter.ToInt32(TempBuf, 0) + Offs2
     
            If Offs3 = -1 Then Return BitConverter.ToInt32(TempBuf, 0)
            ReadProcessMemory(BFhandle, Ptr, TempBuf, 4, 0)
            Ptr = BitConverter.ToInt32(TempBuf, 0) + Offs3
     
            If Offs4 = -1 Then Return BitConverter.ToInt32(TempBuf, 0)
            ReadProcessMemory(BFhandle, Ptr, TempBuf, 4, 0)
            Ptr = BitConverter.ToInt32(TempBuf, 0) + Offs4
     
            Return Ptr
        End Function
    Voici un exemple d'utilisation de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Public Sub ScrewFog()
            Dim Ptr As Integer = GetPointedAddr(Process.GetProcessesByName("BF1942")(0).Handle, &H9A1D98, &H3E0, &H3DC, &H148, &H1FC, &H10)
            WriteProcessMemory(Process.GetProcessesByName("BF1942")(0).Handle, Ptr, BitConverter.GetBytes(400), 4, 0)
        End Sub

    Et le code sur c#:

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
            public int GetPointedAddr(IntPtr BFhandle, IntPtr BaseAddr, int Offs0 = -1, int Offs1 = -1, int Offs2 = -1, int Offs3 = -1, int Offs4 = -1)
            {
                int Ptr = 0;
                byte[] TempBuf = new byte[5];
     
                ReadProcessMemory(BFhandle, BaseAddr, TempBuf, 4, 0);
                Ptr = BitConverter.ToInt32(TempBuf, 0) + Offs0;
     
                if (Offs1 == -1)
                    return BitConverter.ToInt32(TempBuf, 0);
                ReadProcessMemory(BFhandle, (IntPtr)Ptr, TempBuf, 4, 0);
                Ptr = BitConverter.ToInt32(TempBuf, 0) + Offs1;
     
                if (Offs2 == -1)
                    return BitConverter.ToInt32(TempBuf, 0);
                ReadProcessMemory(BFhandle, (IntPtr)Ptr, TempBuf, 4, 0);
                Ptr = BitConverter.ToInt32(TempBuf, 0) + Offs2;
     
                if (Offs3 == -1)
                    return BitConverter.ToInt32(TempBuf, 0);
                ReadProcessMemory(BFhandle, (IntPtr)Ptr, TempBuf, 4, 0);
                Ptr = BitConverter.ToInt32(TempBuf, 0) + Offs3;
     
                if (Offs4 == -1)
                    return BitConverter.ToInt32(TempBuf, 0);
                ReadProcessMemory(BFhandle, (IntPtr)Ptr, TempBuf, 4, 0);
                Ptr = BitConverter.ToInt32(TempBuf, 0) + Offs4;
     
                return Ptr;
            }

    Utilisation de la fonction sur c#

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            public void ScrewFog()
            {
                int Ptr = GetPointedAddr(Process.GetProcessesByName("BF1942")[0].Handle, (IntPtr)0x9a1d98, 0x3e0, 0x3dc, 0x148, 0x1fc, 0x10);
                WriteProcessMemory(Process.GetProcessesByName("BF1942")[0].Handle, (IntPtr)Ptr, BitConverter.GetBytes(400), 4, 0);
            }
    Merci beaucoup.

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Et
    ce n'est pas accepté en VBA?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    J'aimerais bien pourvoir vérifier :/
    Par exemple avec un Integer / Long / Variant / String on peut faire une MsgBox, mais là je sais pas comment vérifier .

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub testByte()
    Cells.Clear
     
    Dim strT As String
     
    Dim a() As Byte
    Dim b() As Byte
     
    Dim c As String
    Dim d As String
     
    strT = "Byte SOFTWARE"
     
    a = strT
    b = StrConv(strT, vbFromUnicode)
     
     c = a
     
     d = b
     
    For i = LBound(a) To UBound(a)
            Cells(i + 1, 1) = a(i)
            Next
     
     For i = LBound(b) To UBound(b)
            Cells(i + 1, 2) = b(i)
            Next
     
     
     Cells(1, 3) = c
     Cells(2, 3) = d
     
    End Sub

  7. #7
    Nouveau membre du Club
    Profil pro
    Administration et finances
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administration et finances
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 29
    Points
    29
    Par défaut
    La déclaration:
    est acceptée par VBA.
    Voici un bout de code écrit à la va-vite pour illustrer cela (abstraction faite de ce à quoi va servir la variable de type Byte):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub TestByte()
        Dim TempBuf(4) As Byte
     
        TempBuf(0) = &HA0
        TempBuf(1) = &HA1
        TempBuf(2) = &HA2
        TempBuf(3) = &HA3
        TempBuf(4) = &HA4
     
        Dim Message As String
        Dim i As Byte
        Message = ""
        For i = 0 To 4
            Message = Message & "TempBuf(" & i & ")= " & Hex$(TempBuf(i)) & _
                    "          décimale : " & TempBuf(i) & _
                    "          octale : " & Oct(TempBuf(i)) & vbCrLf
        Next i
     
        MsgBox Message
    End Sub
    Avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Dim TBuf As Byte
        TBuf = &H100
    on a un message de dépassement de capacité

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Un gros merci à Jouad et Docmarti

    Maintenant j'ai les outils pour faire fonctionner ma fonction, je m'y mets dès ce soir!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] Creer et modifier un doc word depuis exel via VBA
    Par laynet dans le forum Excel
    Réponses: 4
    Dernier message: 16/10/2016, 22h13
  2. Réponses: 2
    Dernier message: 24/11/2005, 11h46
  3. Faire des modifs sur une sheet excel Read Only via VBA
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/11/2005, 18h02
  4. Manipulation du carnet d'adresse outlook via VBA Excel?
    Par Dragon Tours dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/11/2005, 12h16
  5. [C#] Comment créer un byte[] d'un ArrayList ?
    Par Royd938 dans le forum C#
    Réponses: 5
    Dernier message: 26/09/2005, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo