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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Source] ExtractApisEXEVB6 (Se puede Ampliar)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Source] ExtractApisEXEVB6 (Se puede Ampliar)  (Leído 4,857 veces)
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
[Source] ExtractApisEXEVB6 (Se puede Ampliar)
« en: 14 Octubre 2010, 04:19 am »

.
Hola, como estas, che una pregunta si no te molesta, podrias compartir el codigo que utilizas en
http://infrangelux.sytes.net/FileX/?file=Basic_API_Decompiler.exe&dir=/BlackZeroX/programas/Semi%20Decompiladores

me gustaria saber como haces para listar las apis de una aplicación

Saludos.

Se puede aun extraer mas informacion; como son los procesos, y sus parametros (con sus tipos de datos), Complementos  (OCX), Formularios, Modulos, mm bueno TODO... Este codigo solo se limita a la extraccion de las APIS de un Ejecutable en VB6

Código
  1.  
  2. '
  3. '   /////////////////////////////////////////////////////////////
  4. '   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
  5. '   //                                                         //
  6. '   // Web:     http://InfrAngeluX.Sytes.Net/                  //
  7. '   //                                                         //
  8. '   //    |-> Pueden Distribuir Este codigo siempre y cuando   //
  9. '   // no se eliminen los creditos originales de este codigo   //
  10. '   // No importando que sea modificado/editado o engrandecido //
  11. '   // o achicado, si es en base a este codigo                 //
  12. '   /////////////////////////////////////////////////////////////
  13.  
  14. Option Explicit
  15.  
  16. Private Const MAX_PATH                  As Long = 260
  17.  
  18. Public Type IMAGE_DOS_HEADER
  19.   Magic                                As Integer
  20.   NumBytesLastPage                     As Integer
  21.   NumPages                             As Integer
  22.   NumRelocates                         As Integer
  23.   NumHeaderBlks                        As Integer
  24.   NumMinBlks                           As Integer
  25.   NumMaxBlks                           As Integer
  26.   SSPointer                            As Integer
  27.   SPPointer                            As Integer
  28.   Checksum                             As Integer
  29.   IPPointer                            As Integer
  30.   CurrentSeg                           As Integer
  31.   RelocTablePointer                    As Integer
  32.   Overlay                              As Integer
  33.   ReservedW1(3)                        As Integer
  34.   OEMType                              As Integer
  35.   OEMData                              As Integer
  36.   ReservedW2(9)                        As Integer
  37.   ExeHeaderPointer                     As Long
  38. End Type
  39.  
  40. Public Type IMAGE_DATA_DIRECTORY
  41.   DataRVA                              As Long
  42.   DataSize                             As Long
  43. End Type
  44.  
  45. Public Type IMAGE_OPTIONAL_HEADER
  46.   Magic                                As Integer
  47.   MajorLinkVer                         As Byte
  48.   MinorLinkVer                         As Byte
  49.   CodeSize                             As Long
  50.   InitDataSize                         As Long
  51.   unInitDataSize                       As Long
  52.   EntryPoint                           As Long
  53.   CodeBase                             As Long
  54.   DataBase                             As Long
  55.   ImageBase                            As Long
  56.   SectionAlignment                     As Long
  57.   FileAlignment                        As Long
  58.   MajorOSVer                           As Integer
  59.   MinorOSVer                           As Integer
  60.   MajorImageVer                        As Integer
  61.   MinorImageVer                        As Integer
  62.   MajorSSVer                           As Integer
  63.   MinorSSVer                           As Integer
  64.   Win32Ver                             As Long
  65.   ImageSize                            As Long
  66.   HeaderSize                           As Long
  67.   Checksum                             As Long
  68.   Subsystem                            As Integer
  69.   DLLChars                             As Integer
  70.   StackRes                             As Long
  71.   StackCommit                          As Long
  72.   HeapReserve                          As Long
  73.   HeapCommit                           As Long
  74.   LoaderFlags                          As Long
  75.   RVAsAndSizes                         As Long
  76.   DataEntries(15)                      As IMAGE_DATA_DIRECTORY
  77. End Type
  78.  
  79. Public Type VBStart_Header
  80.    PushStartOpcode                     As Byte
  81.    PushStartAddress                    As Double
  82.    CallStartOpcode                     As Byte
  83.    CallStartAddress                    As Double
  84. End Type
  85.  
  86. Private Type VBHeader
  87.    lSignature                          As Long
  88.    iRuntimeBuild                       As Integer
  89.    sLanguageDLLName(13)                As Byte
  90.    sSecLangDLLName(13)                 As Byte
  91.    iRuntimeDLLVersion                  As Integer
  92.    lLanguageID                         As Long
  93.    lSecLanguageID                      As Long
  94.    aSubMain                            As Long
  95.    aProjectInfo                        As Long
  96.    fMDLIntObjs                         As Long
  97.    fMDLIntObjs2                        As Long
  98.    lThreadFlags                        As Long
  99.    lThreadCount                        As Long
  100.    iGUIObjectCount                     As Integer
  101.    iComponentCount                     As Integer
  102.    lThunkCount                         As Long
  103.    aGUIObjectArray                     As Long
  104.    aComponentArray                     As Long
  105.    aCOMRegData                         As Long
  106.    oProjectExename                     As Long
  107.    oProjectTitle                       As Long
  108.    oHelpFile                           As Long
  109.    oProjectName                        As Long
  110. End Type
  111.  
  112. Private Type tProjectInfo
  113.  Signature                             As Long
  114.  aObjectTable                          As Long
  115.  Null1                                 As Long
  116.  aStartOfCode                          As Long
  117.  aEndOfCode                            As Long
  118.  Flag1                                 As Long
  119.  ThreadSpace                           As Long
  120.  aVBAExceptionhandler                  As Long
  121.  aNativeCode                           As Long
  122.  oProjectLocation                      As Integer
  123.  Flag2                                 As Integer
  124.  Flag3                                 As Integer
  125.  OriginalPathName(MAX_PATH * 2)        As Byte
  126.  NullSpacer                            As Byte
  127.  aExternalTable                        As Long
  128.  ExternalCount                         As Long
  129. End Type
  130.  
  131. Public Type tAPIList
  132.    strLibraryName                      As String
  133.    strFunctionName                     As String
  134. End Type
  135.  
  136. Type ExternalTable
  137.   flag                                 As Long
  138.   aExternalLibrary                     As Long
  139. End Type
  140.  
  141. Type ExternalLibrary
  142.   aLibraryName                         As Long
  143.   aLibraryFunction                     As Long
  144. End Type
  145.  
  146.  
  147. Private St_DosHeader                    As IMAGE_DOS_HEADER
  148. Private St_OptHeader                    As IMAGE_OPTIONAL_HEADER
  149. Private St_VBStHeader                   As VBStart_Header
  150. Private St_VBHeader                     As VBHeader
  151. Private St_PInfo                        As tProjectInfo
  152. Private St_ETable                       As ExternalTable
  153. Private St_ELibrary                     As ExternalLibrary
  154. Private int_NTFile                      As Integer
  155.  
  156. Public Function ExtractApisEXEVB6(StrPath As String) As tAPIList()
  157. On Error GoTo End_:
  158. Dim Tmp_APIList()                       As tAPIList
  159. Dim Strs                                As String * 1024
  160. Dim lng_PosNull                         As Long
  161. Dim Lng_index                           As Long
  162. Dim Lng_CantApis                        As Long
  163. Dim NBytes(1 To 10)                     As Byte
  164.  
  165.    If Dir(StrPath, vbArchive) = "" Then Exit Function
  166.    int_NTFile = FreeFile
  167.    Open StrPath For Binary As int_NTFile
  168.        If LOF(int_NTFile) > 0 Then
  169.            Get int_NTFile, , St_DosHeader
  170.            Get int_NTFile, _
  171.                St_DosHeader.ExeHeaderPointer + &H19, _
  172.                St_OptHeader '   //  20  <-> LenB(Header) + 5 => &H19
  173.            Get int_NTFile, St_OptHeader.EntryPoint + 1, NBytes
  174.            With St_VBStHeader
  175.                .PushStartOpcode = NBytes(1)
  176.                .PushStartAddress = GetDWord(NBytes(2), NBytes(3), NBytes(4), NBytes(5))
  177.                .CallStartOpcode = NBytes(6)
  178.                .CallStartAddress = GetDWord(NBytes(7), NBytes(8), NBytes(9), NBytes(10))
  179.            End With
  180.            Get int_NTFile, _
  181.                (St_VBStHeader.PushStartAddress - St_OptHeader.ImageBase + 1), _
  182.                St_VBHeader
  183.            Get int_NTFile, _
  184.                St_VBHeader.aProjectInfo + 1 - St_OptHeader.ImageBase, _
  185.                St_PInfo
  186.            Lng_CantApis = 0
  187.            With St_PInfo
  188.                For Lng_index = 0 To .ExternalCount - 1
  189.                     Get int_NTFile, _
  190.                         .aExternalTable + 1 + (Lng_index * 8) - St_OptHeader.ImageBase, _
  191.                         St_ETable
  192.                     If .ExternalCount > 0 And St_ETable.flag <> 6 Then
  193.                        With St_ETable
  194.                            Get int_NTFile, _
  195.                                .aExternalLibrary + 1 - St_OptHeader.ImageBase, _
  196.                                St_ELibrary
  197.                            With St_ELibrary
  198.                                If .aLibraryFunction <> 0 Then
  199.  
  200.                                    ReDim Preserve Tmp_APIList(Lng_CantApis)
  201.                                    Seek int_NTFile, .aLibraryFunction + 1 - St_OptHeader.ImageBase
  202.                                    With Tmp_APIList(Lng_CantApis)
  203.                                        Do
  204.                                            Get int_NTFile, , Strs
  205.                                            lng_PosNull = InStr(1, Strs, Chr(0), vbBinaryCompare) - 1
  206.                                            .strFunctionName = .strFunctionName & Mid$(Strs, 1, lng_PosNull)
  207.                                        Loop Until lng_PosNull > 0
  208.                                    End With
  209.  
  210.                                    Seek int_NTFile, .aLibraryName + 1 - St_OptHeader.ImageBase
  211.                                    With Tmp_APIList(Lng_CantApis)
  212.                                        Do
  213.                                            Get int_NTFile, , Strs
  214.                                            lng_PosNull = InStr(1, Strs, Chr(0), vbBinaryCompare) - 1
  215.                                            .strLibraryName = .strLibraryName & Mid$(Strs, 1, lng_PosNull)
  216.                                        Loop Until lng_PosNull > 0
  217.                                    End With
  218.  
  219.                                    Lng_CantApis = Lng_CantApis + 1
  220.  
  221.                                End If
  222.                            End With
  223.                        End With
  224.                     End If
  225.                 Next Lng_index
  226.             End With
  227.         End If
  228.    Close 1
  229.    ExtractApisEXEVB6 = Tmp_APIList
  230.    Exit Function
  231. End_:
  232.    On Error GoTo 0
  233.    Call Err.Clear
  234. End Function
  235.  
  236. Private Function GetDWord(ByVal B1 As Byte, ByVal B2 As Byte, ByVal B3 As Byte, ByVal B4 As Byte) As Double
  237.    GetDWord# = GetWord(B1, B2) + 65536# * GetWord(B3, B4)
  238. End Function
  239.  
  240. Private Function GetWord(ByVal B1 As Byte, ByVal B2 As Byte) As Double
  241.    GetWord# = B1 + 256# * B2
  242. End Function
  243.  
  244.  

ejemplo:

Código
  1.  
  2. Sub Main()
  3. Dim St_APIList()                        As tAPIList
  4. Dim Lng_index                           As Variant
  5.    St_APIList = ExtractApisEXEVB6("c:\a.exe")
  6.    If (Not St_APIList) = -1 Then Exit Sub
  7.    Debug.Print "Funciones", "Librerias"
  8.    For Lng_index = LBound(St_APIList) To UBound(St_APIList)
  9.        With St_APIList(Lng_index)
  10.            Debug.Print .strFunctionName, .strLibraryName
  11.        End With
  12.    Next
  13. End Sub
  14.  
  15.  

Dulce Infierno Lunar!¡.


« Última modificación: 14 Octubre 2010, 04:35 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: [Source] ExtractApisEXEVB6 (Se puede Ampliar)
« Respuesta #1 en: 14 Octubre 2010, 05:58 am »

Muchas Gracias BlackZeroX, es una lastima que no liste de cualquier ejecutable osea solo los de vb6, porque esta muy piola para ver que apis utilizan cada programa, yo tengo que andar con un editor hexadecimal y es medio hincha ir buscando la sección donde están y es incomodo.
seguramente se debe poder, pero esta medio complicado, por lo menos para mi.

Saludos.


En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [Source] ExtractApisEXEVB6 (Se puede Ampliar)
« Respuesta #2 en: 14 Octubre 2010, 08:59 am »

Muy buen trabajo, hace tiempo estuve investigando sin exito, muchas gracias, ya puedo acabar un modulito que tengo a medias por ahi ;)


Muchas Gracias BlackZeroX, es una lastima que no liste de cualquier ejecutable osea solo los de vb6, porque esta muy piola para ver que apis utilizan cada programa, yo tengo que andar con un editor hexadecimal y es medio hincha ir buscando la sección donde están y es incomodo.
seguramente se debe poder, pero esta medio complicado, por lo menos para mi.

Saludos.
Si te interesa listar de cualquier ejecutable simplemente has de listar las funciones importadas en la IAT.
En línea

EddyW

Desconectado Desconectado

Mensajes: 187



Ver Perfil WWW
Re: [Source] ExtractApisEXEVB6 (Se puede Ampliar)
« Respuesta #3 en: 14 Octubre 2010, 18:05 pm »

Se agradece el aporte, lo estaba buscando para un Proyectito :)

Muchas Gracias BlackZeroX, es una lastima que no liste de cualquier ejecutable osea solo los de vb6, porque esta muy piola para ver que apis utilizan cada programa, yo tengo que andar con un editor hexadecimal y es medio hincha ir buscando la sección donde están y es incomodo.
seguramente se debe poder, pero esta medio complicado, por lo menos para mi.

Saludos.
Para otros ejecutables puedes usar PEExplorer LeandroA, este programa te muestra las llamadas a la DLL así como las funciones, Procedimientos propios del programa, además tiene otras funciones más este programa.

SaluDOS!!!
En línea

karmany
Colaborador
***
Desconectado Desconectado

Mensajes: 1.614


Sueñas que sueñas


Ver Perfil WWW
Re: [Source] ExtractApisEXEVB6 (Se puede Ampliar)
« Respuesta #4 en: 14 Octubre 2010, 21:03 pm »

Excelente código BlackZeroX...

Cita de LeandroA: yo tengo que andar con un editor hexadecimal y es medio hincha ir buscando la sección donde están y es incomodo
-Para los programas en Visual Basic 6 las API utilizadas las puedes encontrar con el excelente código de BlackZeroX o con programas específicos de VB como VB Decompiler Lite etc...
En los demás compiladores no suele ser necesario hacer esa búsqueda (lo digo de forma general...) ya que los programas en VB dependen de su librería y en la Tabla de importaciones sólo llaman a su librería MSVBVM60.dll. Sin embargo, lo normal con otros compiladores distintos de VB6 es que las API utilizadas estén directamente en la Tabla de import..(por ej. ASM, C, C++...) y esto se puede ver con cualquier programa específico de formato PE: como PE Explorer, PE Editor, Lord PE, Stud PE y largo etc... Y para extraer dicha tabla estoy convencido que hay muchos códigos...
En línea

Dessa


Desconectado Desconectado

Mensajes: 624



Ver Perfil
Re: [Source] ExtractApisEXEVB6 (Se puede Ampliar)
« Respuesta #5 en: 14 Octubre 2010, 22:18 pm »

No sé mucho del tema pero parece buena oportunidad para aprender !!!

"Grandioso"  "Grandiabloso"    ;)


En línea

Adrian Desanti
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: [Source] ExtractApisEXEVB6 (Se puede Ampliar)
« Respuesta #6 en: 15 Octubre 2010, 01:21 am »

Perdonden la igorancia (el que no pregunta no aprende) pero en en Pe Explorer en donde se fijan que api utiliza, alguna captura de imagen?

sAludos.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Source] ExtractApisEXEVB6 (Se puede Ampliar)
« Respuesta #7 en: 15 Octubre 2010, 03:50 am »

.
--> Boton Dependence Scanner



Dulce Infierno Lunar!¡.
En línea

The Dark Shadow is my passion.
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: [Source] ExtractApisEXEVB6 (Se puede Ampliar)
« Respuesta #8 en: 16 Octubre 2010, 02:53 am »

no pero no es lo mismo,el  Pe Explorer muestra las dependencias pero no las apis utilizadas es decir si abrimos iexplorer.exe nos mostrara advapi32.dll, kernel32.dll, gdi32.dll etc etc. pero no que apis en cuestión esta utilizando de todas esas dll, para los ejecutables de vb6 solo muestra msvbvm60.dll

ahora si abro el iexplorer.exe con un editor hexadecimal en la posición DF96 puedo ver

RegCloseKey, RegQueryValueExW, RegOpenKeyExW .etc

Saludos.
En línea

burbu_1

Desconectado Desconectado

Mensajes: 159


hamen gaoz


Ver Perfil
Re: [Source] ExtractApisEXEVB6 (Se puede Ampliar)
« Respuesta #9 en: 16 Octubre 2010, 09:30 am »

Creo que dices el Import Viewer  ;D

En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ampliar ram puede provocar problemas??
Hardware
Vjuan_ 3 3,569 Último mensaje 1 Noviembre 2011, 23:21 pm
por InMortal..?
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines