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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


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


Desconectado Desconectado

Mensajes: 1.859


Muerte: Proceso fundamental de la existencia.


Ver Perfil WWW
Archivos .ini dentro de .exe
« en: 25 Noviembre 2005, 03:30 am »

¿Alguna forma de meter los ini dentro de las aplicaciones?

Gracias de antemano

Un Saludo... ;D


En línea

Mi amigo el libro, mi signo libra, mi estilo libre. No hay balanzas que equilibren palabras de este calibre.

dexer

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Archivos .ini dentro de .exe
« Respuesta #1 en: 25 Noviembre 2005, 05:21 am »

un ejemplo para empezar añades el contenido del .ini pongamos k esta en la variable ContenidoINI
para añadirlo haz un programa y pon
Open URLDelArchivo For Binary Access Read Write as #1
 dim programa as string
 programa = space(lof(1))
 get #1,,programa
 dim nPrograma as string

 nsPrograma = sfff & "*INI*" & ContenidoINI & "*/INI*"
Close #1
Open URLParaElProgramaConElIni For Binary Access Read Write as #2
 put #2,,nPrograma
close #2

para k se extraiga el ini correctamente pones en el programa
Open App.path & "/" & app.exename & ".exe" for binary access read as #1
Dim Datos as string
datos = space(lof(1))
get #1,,datos

i = instr(datos,1,"*INI*")
f = instr(datos,1,"*/INI*")
dim textoini as string
textoini = mid(datos,i+5,f-i+4)
Msgbox textoini o lo guardas en otro archivo como quieras
Close #1

el codigo seria mas o menos asi los instr y el mid puede k aiga k editarlos pero esk tengo sueño xD

Espero que sea eso lo que buscabas.

Salu2, Dex


En línea

Syphroot

Desconectado Desconectado

Mensajes: 268


All You Need To Do Is Follow The Worms


Ver Perfil WWW
Re: Archivos .ini dentro de .exe
« Respuesta #2 en: 26 Noviembre 2005, 09:07 am »

Que bien que tocan este tema, solo una observacion y/o "truco", como quieran llamarle.

Una vez embedi en un EXE y un INI asi:

.------------,
|     EXE    |
'------------'
|    INI      |
'...............'



Bueno, resulta ser que el EXE se ejecutaba correctamente y me pregunte:

¿ Porque no leer su contenido desde el mismo EXE sin extraer el INI? (NOTA: Esto con las API's dedicadas para ello)

Y asi lo hice, PUDE leer el contenido de las secciones y claves del INI embedido, el unico problema (obvio) es escribir nuevas secciones y/o claves...

Busco el codigo y lo posteo si alguien lo requiere....


saludos
En línea

__LoG26


Desconectado Desconectado

Mensajes: 1.859


Muerte: Proceso fundamental de la existencia.


Ver Perfil WWW
Re: Archivos .ini dentro de .exe
« Respuesta #3 en: 1 Diciembre 2005, 03:17 am »

Si tienes un codigo sera el mejor ejemplo para ponerlo en practica. :D

Un Saludo... ;D
En línea

Mi amigo el libro, mi signo libra, mi estilo libre. No hay balanzas que equilibren palabras de este calibre.

Syphroot

Desconectado Desconectado

Mensajes: 268


All You Need To Do Is Follow The Worms


Ver Perfil WWW
Re: Archivos .ini dentro de .exe
« Respuesta #4 en: 3 Diciembre 2005, 11:38 am »

El siguiente codigo va en un modulo, NO lo escribi yo, el autor es:
©Guillermo 'guille' Som, 1997-2001 <guille@costasol.net>

Ver las funciones y subs que escribió, se explica por si solo en los comentarios:



Código:

'--- Declaraciones para leer ficheros INI ---
' Leer todas las secciones de un fichero INI, esto seguramente no funciona en Win95
' Esta función no estaba en las declaraciones del API que se incluye con el VB
Public Declare Function GetPrivateProfileSectionNames Lib "kernel32" Alias "GetPrivateProfileSectionNamesA" _
    (ByVal lpszReturnBuffer As String, ByVal nSize As Long, _
    ByVal lpFileName As String) As Long

' Leer una sección completa
Public Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" _
    (ByVal lpAppName As String, ByVal lpReturnedString As String, _
    ByVal nSize As Long, ByVal lpFileName As String) As Long

' Leer una clave de un fichero INI
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
    (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
     ByVal lpDefault As String, ByVal lpReturnedString As String, _
     ByVal nSize As Long, ByVal lpFileName As String) As Long

' Escribir una clave de un fichero INI (también para borrar claves y secciones)
Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
    (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
     ByVal lpString As Any, ByVal lpFileName As String) As Long

Public Sub IniDeleteKey(ByVal sIniFile As String, ByVal sSection As String, _
                        Optional ByVal sKey As String = "")
    '--------------------------------------------------------------------------
    ' Borrar una clave o entrada de un fichero INI                  (16/Feb/99)
    ' Si no se indica sKey, se borrará la sección indicada en sSection
    ' En otro caso, se supone que es la entrada (clave) lo que se quiere borrar
    '
    ' Para borrar una sección se debería usar IniDeleteSection
    '
    If Len(sKey) = 0 Then
        ' Borrar una sección
        Call WritePrivateProfileString(sSection, 0&, 0&, sIniFile)
    Else
        ' Borrar una entrada
        Call WritePrivateProfileString(sSection, sKey, 0&, sIniFile)
    End If
End Sub

Public Sub IniDeleteSection(ByVal sIniFile As String, ByVal sSection As String)
    '--------------------------------------------------------------------------
    ' Borrar una sección de un fichero INI                          (04/Abr/01)
    ' Borrar una sección
    Call WritePrivateProfileString(sSection, 0&, 0&, sIniFile)
End Sub

Public Function IniGet(ByVal sFileName As String, ByVal sSection As String, _
                       ByVal sKeyName As String, _
                       Optional ByVal sDefault As String = "") As String
    '--------------------------------------------------------------------------
    ' Devuelve el valor de una clave de un fichero INI
    ' Los parámetros son:
    '   sFileName   El fichero INI
    '   sSection    La sección de la que se quiere leer
    '   sKeyName    Clave
    '   sDefault    Valor opcional que devolverá si no se encuentra la clave
    '--------------------------------------------------------------------------
    Dim ret As Long
    Dim sRetVal As String
    '
    sRetVal = String$(255, 0)
    '
    ret = GetPrivateProfileString(sSection, sKeyName, sDefault, sRetVal, Len(sRetVal), sFileName)
    If ret = 0 Then
        IniGet = sDefault
    Else
        IniGet = Left$(sRetVal, ret)
    End If
End Function

Public Sub IniWrite(ByVal sFileName As String, ByVal sSection As String, _
                    ByVal sKeyName As String, ByVal sValue As String)
    '--------------------------------------------------------------------------
    ' Guarda los datos de configuración
    ' Los parámetros son los mismos que en LeerIni
    ' Siendo sValue el valor a guardar
    '
    Call WritePrivateProfileString(sSection, sKeyName, sValue, sFileName)
End Sub

Public Function IniGetSection(ByVal sFileName As String, _
                              ByVal sSection As String) As String()
    '--------------------------------------------------------------------------
    ' Lee una sección entera de un fichero INI                      (27/Feb/99)
    ' Adaptada para devolver un array de string                     (04/Abr/01)
    '
    ' Esta función devolverá un array de índice cero
    ' con las claves y valores de la sección
    '
    ' Parámetros de entrada:
    '   sFileName   Nombre del fichero INI
    '   sSection    Nombre de la sección a leer
    ' Devuelve:
    '   Un array con el nombre de la clave y el valor
    '   Para leer los datos:
    '       For i = 0 To UBound(elArray) -1 Step 2
    '           sClave = elArray(i)
    '           sValor = elArray(i+1)
    '       Next
    '
    Dim i As Long
    Dim j As Long
    Dim sTmp As String
    Dim sClave As String
    Dim sValor As String
    '
    Dim aSeccion() As String
    Dim n As Long
    '
    ReDim aSeccion(0)
    '
    ' El tamaño máximo para Windows 95
    sBuffer = String$(32767, Chr$(0))
    '
    n = GetPrivateProfileSection(sSection, sBuffer, Len(sBuffer), sFileName)
    '
    If n Then
        '
        ' Cortar la cadena al número de caracteres devueltos
        sBuffer = Left$(sBuffer, n)
        ' Quitar los vbNullChar extras del final
        i = InStr(sBuffer, vbNullChar & vbNullChar)
        If i Then
            sBuffer = Left$(sBuffer, i - 1)
        End If
        '
        n = -1
        ' Cada una de las entradas estará separada por un Chr$(0)
        Do
            i = InStr(sBuffer, Chr$(0))
            If i Then
                sTmp = LTrim$(Left$(sBuffer, i - 1))
                If Len(sTmp) Then
                    ' Comprobar si tiene el signo igual
                    j = InStr(sTmp, "=")
                    If j Then
                        sClave = Left$(sTmp, j - 1)
                        sValor = LTrim$(Mid$(sTmp, j + 1))
                        '
                        n = n + 2
                        ReDim Preserve aSeccion(n)
                        aSeccion(n - 1) = sClave
                        aSeccion(n) = sValor
                    End If
                End If
                sBuffer = Mid$(sBuffer, i + 1)
            End If
        Loop While i
        If Len(sBuffer) Then
            j = InStr(sBuffer, "=")
            If j Then
                sClave = Left$(sBuffer, j - 1)
                sValor = LTrim$(Mid$(sBuffer, j + 1))
                n = n + 2
                ReDim Preserve aSeccion(n)
                aSeccion(n - 1) = sClave
                aSeccion(n) = sValor
            End If
        End If
    End If
    ' Devolver el array
    IniGetSection = aSeccion
End Function

Public Function IniGetSections(ByVal sFileName As String) As String()
    '--------------------------------------------------------------------------
    ' Devuelve todas las secciones de un fichero INI                (27/Feb/99)
    ' Adaptada para devolver un array de string                     (04/Abr/01)
    '
    ' Esta función devolverá un array con todas las secciones del fichero
    '
    ' Parámetros de entrada:
    '   sFileName   Nombre del fichero INI
    ' Devuelve:
    '   Un array con todos los nombres de las secciones
    '   La primera sección estará en el elemento 1,
    '   por tanto, si el array contiene cero elementos es que no hay secciones
    '
    Dim i As Long
    Dim sTmp As String
    Dim n As Long
    Dim aSections() As String
    '
    ReDim aSections(0)
    '
    ' El tamaño máximo para Windows 95
    sBuffer = String$(32767, Chr$(0))
    '
    ' Esta función del API no está definida en el fichero TXT
    n = GetPrivateProfileSectionNames(sBuffer, Len(sBuffer), sFileName)
    '
    If n Then
        ' Cortar la cadena al número de caracteres devueltos
        sBuffer = Left$(sBuffer, n)
        ' Quitar los vbNullChar extras del final
        i = InStr(sBuffer, vbNullChar & vbNullChar)
        If i Then
            sBuffer = Left$(sBuffer, i - 1)
        End If
        '
        n = 0
        ' Cada una de las entradas estará separada por un Chr$(0)
        Do
            i = InStr(sBuffer, Chr$(0))
            If i Then
                sTmp = LTrim$(Left$(sBuffer, i - 1))
                If Len(sTmp) Then
                    n = n + 1
                    ReDim Preserve aSections(n)
                    aSections(n) = sTmp
                End If
                sBuffer = Mid$(sBuffer, i + 1)
            End If
        Loop While i
        If Len(sBuffer) Then
            n = n + 1
            ReDim Preserve aSections(n)
            aSections(n) = sBuffer
        End If
    End If
    ' Devolver el array
    IniGetSections = aSections
End Function

Public Function AppPath(Optional ByVal ConBackSlash As Boolean = True) As String
    ' Devuelve el path del ejecutable                               (23/Abr/02)
    ' con o sin la barra de directorios
    Dim s As String
    '
    s = App.Path
    If ConBackSlash Then
        If Right$(s, 1) <> "\" Then
            s = s & "\"
        End If
    Else
        If Right$(s, 1) = "\" Then
            s = Left$(s, Len(s) - 1)
        End If
    End If
    AppPath = s
End Function
'------------------------------------------------------------------------------
' Fin del código para acceder a los ficheros INIs
'------------------------------------------------------------------------------



Para usar algunas funciones veamos el siguiente codigo:

Código:

Dim sFichero as string, Temp As String, i As Long, tValores() As String

sFichero = App.Path & "\" & App.EXEName & ".exe"
           
           'obtiene todas las llaves y lo mete en el array
            tValores = IniGetSection(sFichero, "Lista")
               
                If UBound(tValores) > 0 Then
               
                       For i = 0 To UBound(tValores) Step 2
                            'Lee los valores
                            Temp = IniGet(sFichero, "Lista", tValores(i))
                            Temp = Trim(Temp) 'Le quita los espacios
                           
                            If Len(Temp) > 0 Then
                                cLista.AddItem Temp
                            End If
                       
                       Next
                               
                End If


El codigo anterior saca los valores de las llaves de la sección "Lista" y las mete en el ListBox llamado cLista

El INI embedido puede paracerse a esto:

[Lista]
key1=valor1
key2=valor2
.
.
.
keyN=valorN


Checa las demas funciones del modulo, algunas obtienen Todas las secciones, otras borran secciones,otras borran llaves,etc.

Si no quedo claro el codigo, postea.

saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Borrar archivos dentro de un EXE...??
Software
radamantis2707 5 3,139 Último mensaje 15 Mayo 2012, 09:26 am
por Saberuneko
contribucion inspecionar archivos office por dentro
Java
sapito169 0 2,124 Último mensaje 5 Octubre 2021, 01:03 am
por sapito169
C sharp - Programacion dentro de archivos .DLL
Dudas Generales
Alanarguilez 2 4,250 Último mensaje 14 Noviembre 2023, 00:14 am
por Alanarguilez
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines