Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: aaronduran2 en 15 Agosto 2008, 22:56 pm



Título: [SOLUCIONADO] Extraer sonidos de una DLL
Publicado por: aaronduran2 en 15 Agosto 2008, 22:56 pm
Hola. Quisiera saber como extraer sonidos de una DLL. Tengo un código que permite extraer imágenes, pero lo que necesito es hacerlo con sonidos.

Código
  1. Type GUID
  2.     Data1 As Long
  3.     Data2 As Integer
  4.     Data3 As Integer
  5.     Data4(7) As Byte
  6. End Type
  7.  
  8. Type PicBmp
  9.     Size As Long
  10.     Type As Long
  11.     hBmp As Long
  12.     hPal As Long
  13.     Reserved As Long
  14. End Type
  15.  
  16.  
  17. Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnHandle As Long, _
  18. IPic As IPicture) As Long
  19. Declare Function LoadBitmap Lib "user32" Alias "LoadBitmapA" (ByVal hInstance As Long, ByVal lpBitmapID As Long) As Long
  20. Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  21. Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  22. Declare Function FreeLibrary Lib "kernel32" _
  23.               (ByVal hLibModule As Long) As Long
  24. '#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
  25. '    //CargarImagenDLL//
  26. '#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
  27. '   Cargar una imagen de una DLL.
  28. '#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
  29. Public Function CargarImagenDLL(sDLL As String, ByVal lID As Long) As Picture
  30. Dim hInst As Long
  31. Dim hBmp  As Long
  32. Dim Pic As PicBmp
  33.  
  34. Dim IPic As IPicture
  35. Dim IID_IDispatch As GUID
  36. Dim lRC As Long
  37.  
  38.  
  39. hInst = LoadLibrary(sDLL)
  40. If hInst <> 0 Then
  41.    hBmp = LoadBitmap(hInst, lID)
  42.    If hBmp <> 0 Then
  43.        IID_IDispatch.Data1 = &H20400
  44.        IID_IDispatch.Data4(0) = &HC0
  45.        IID_IDispatch.Data4(7) = &H46
  46.        Pic.Size = Len(Pic)
  47.        Pic.Type = vbPicTypeBitmap
  48.        Pic.hBmp = hBmp
  49.        Pic.hPal = 0
  50.        lRC = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)
  51.        If lRC = 0 Then
  52.            Set CargarImagenDLL = IPic
  53.            Set IPic = Nothing
  54.        Else
  55.            Call DeleteObject(hBmp)
  56.        End If
  57.    End If
  58.    FreeLibrary (hInst)
  59.    hInst = 0
  60. End If
  61. End Function
  62.  

Gracias de antemano.


Título: Re: Extraer sonidos de una DLL
Publicado por: aaronduran2 en 16 Agosto 2008, 00:49 am
Bueno, intentando conseguir algún resultado, hice esto:

Código
  1. Private Const SND_SYNC = &H0              '  play synchronously (default)
  2. Private Const SND_ASYNC = &H1             '  play asynchronously
  3. Private Const SND_NODEFAULT = &H2         '  silence not default, if sound not found
  4. Private Const SND_MEMORY = &H4            '  lpszSoundName points to a memory file
  5. Private Const SND_ALIAS = &H10000         '  name is a WIN.INI [sounds] entry
  6. Private Const SND_FILENAME = &H20000      '  name is a file name
  7. Private Const SND_RESOURCE = &H40004      '  name is a resource name or atom
  8. Private Const SND_ALIAS_ID = &H110000     '  name is a WIN.INI [sounds] entry identifier
  9. Private Const SND_ALIAS_START = 0         '  must be > 4096 to keep strings in same section of resource file
  10. Private Const SND_LOOP = &H8              '  loop the sound until next sndPlaySound
  11. Private Const SND_NOSTOP = &H10           '  don't stop any currently playing sound
  12. Private Const SND_VALID = &H1F            '  valid flags          / ;Internal /
  13. Private Const SND_NOWAIT = &H2000         '  don't wait if the driver is busy
  14. Private Const SND_VALIDFLAGS = &H17201F   '  Set of valid flag bits.  Anything outside this range will raise an error
  15. Private Const SND_RESERVED = &HFF000000   '  In particular these flags are reserved
  16. Private Const SND_TYPE_MASK = &H170007
  17.  
  18. Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  19. Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
  20. Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, _
  21. ByVal dwFlags As Long) As Long
  22.  
  23. '#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
  24. '    //CargarSonidoDLL//
  25. '#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
  26. '   Cargar un sonido de una DLL.
  27. '#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
  28. Public Sub CargarSonidoDLL(sDLL As String, ByVal lID As Long)
  29. Const flags = SND_RESOURCE Or SND_ASYNC Or SND_NODEFAULT
  30. Dim hInst As Long
  31. Dim SonidoCargado As Variant
  32. hInst = LoadLibrary(sDLL)
  33. If hInst <> 0 Then
  34.    SonidoCargado = PlaySound(CStr("#" & lID), hInst, flags)
  35. End If
  36. DoEvents
  37. FreeLibrary (hInst)
  38. hInst = 0
  39. End Sub
  40.  
Así que el problema está solucionado.

Saludos.


Título: Re: [SOLUCIONADO] Extraer sonidos de una DLL
Publicado por: user_foro en 25 Mayo 2022, 07:28 am
Disculpen mi ignorancia, pero Cómo puedo ejecutar ese código para poder usarlo y poder obtener audios de una dll.

Alguien tendrá el ejecutable...

Agradecería mucho que me ayuden porfa... De verdad!


Título: Re: [SOLUCIONADO] Extraer sonidos de una DLL
Publicado por: Serapis en 25 Mayo 2022, 11:39 am
De entrada este hilo data del 2008... y para colmo pone 'solucionado', con lo cual es más probable que menos gente entre e intente dar una respuesta que ya se supone facilitada.

Para otra abre un nuevo tema y en todo caso proveer un enlace como referencia (por ejemplo a este tema).

Para terminar lo que pides, lo mismo que el propio título de este hilo se presta a interpretación.

En el caso que trata el tema, al parecer la dll es de su propiedad, tiene acceso a ella y conoce su contenido y se supone que puede cambiarlo cuando quiera. Es decir, parece que lo que quería era simplemente utilizar los sonidos que él mismo tendría almacenado (o accediendo, rescatando desde la propia dll) a recursos de sonido.

En tu caso parece que tratas (a interpretación mía), de exportar recursos de sonido que contiene una dll, de la que no tienes nada más que el propio fichero (porque por ejemplo pertenezca a un juego). Esto puede ser algo muy simple, o extremadamente complejo.

...pero si simplemente tratas de ejecutar un sonido que tienes lamacenado como recurso en una dll, o desde un fichero, es básicamente lo mismo que acceder a  cualquier otro recurso de VB6, solo que en tal caso se trataría de un 'custom resource', por lo que hay que tratarlo de forma binaria... típicamente la función API PlaySound, puede recibir incluso los datos del sonido en formato de string, pués al pasar el dato por referencia simplemente está recibiendo el puntero...

Como no tengo nada claro que es con exactitud lo que quieres, aquí lo dejo. Si te expresas con más claridad, se te podrá orientar más acertadamente.