Generic Sever Editor Class [SRC]

Iniciado por cobein, 19 Septiembre 2008, 18:28 PM

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

cobein

Bueno me harte de que pregunten esto un millon de veces, aca les dejo un codigo super simple para leer y escribir datos al final de un EXE. Creditos a E0N por la funcion para calcular el EOF

Clase:

Código (vb) [Seleccionar]

'---------------------------------------------------------------------------------------
' Module      : cEditSvr
' DateTime    : 19/09/2008 13:23
' Author      : Cobein
' Mail        : cobein27@hotmail.com
' WebPage     : http://www.advancevb.com.ar
' Purpose     : Read Write data at EOF
' Usage       : At your own risk
' Requirements: None
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce
'               or publish this code on any web site,
'               online service, or distribute as source
'               on any media without express permission.
'
' History     : 19/09/2008 First Cut....................................................
'---------------------------------------------------------------------------------------
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Private c_pBag      As New PropertyBag
Private c_sFile     As String
Private c_lEOF      As Long
Public c_bHasData  As Boolean

'---------------------------------------------------------------------------------------
' Procedure : GetEOF
' Author    : E0N
' Purpose   : Calculate EOF
'---------------------------------------------------------------------------------------
Private Function GetEOF(sPath As String) As Long
    Dim vbData() As Byte
    Dim PE As Long, NumberOfSections As Integer
    Dim BeginLastSection As Long
    Dim RawSize As Long, RawOffset As Long
       
    Open sPath For Binary As #1
        ReDim vbData(LOF(1) - 1)
        Get #1, , vbData
    Close #1
   
    Call CopyMemory(PE, vbData(&H3C), 4)
    Call CopyMemory(NumberOfSections, vbData(PE + &H6), 2)
    BeginLastSection = PE + &HF8 + ((NumberOfSections - 1) * &H28)
    Call CopyMemory(RawSize, vbData(BeginLastSection + 16), 4)
    Call CopyMemory(RawOffset, vbData(BeginLastSection + 20), 4)
    GetEOF = RawSize + RawOffset
End Function

Public Function ExeFile(sPath As String) As Boolean
    c_sFile = sPath
    c_lEOF = GetEOF(c_sFile)
   
    If Not FileLen(c_sFile) = c_lEOF Then
        c_bHasData = True
       
        Dim vbData() As Byte
       
        Open c_sFile For Binary As #1
        ReDim vbData(LOF(1) - c_lEOF - 1)
        Seek #1, c_lEOF + 1
        Get #1, , vbData
        Close #1
        '+++++++++++++++++++++++++++++++++++++++++++++++++++++
        'At this point you can Decrypt the byte array [vbData]
        '+++++++++++++++++++++++++++++++++++++++++++++++++++++
        Set c_pBag = New PropertyBag
        c_pBag.Contents = vbData
    End If
   
End Function

Public Sub WriteProp(sName As String, vVal As Variant)
    c_pBag.WriteProperty sName, vVal
End Sub

Public Function ReadProp(sName As String) As Variant
    ReadProp = c_pBag.ReadProperty(sName)
End Function

Public Function WriteData(sDstFile As String) As Boolean
    Dim vbData() As Byte
   
    Open c_sFile For Binary Access Read As #1
    ReDim vbData(LOF(1) - 1)
    Get #1, , vbData
    Close #1
   
    Open sDstFile For Binary Access Write As #1
    Put #1, , vbData
    vbData = c_pBag.Contents
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++
    'At this point you can Encrypt the byte array [vbData]
    '+++++++++++++++++++++++++++++++++++++++++++++++++++++
    Put #1, , vbData
    Close #1
   
End Function


Como llamarlo

Código (vb) [Seleccionar]

Option Explicit

Private Sub Form_Load()

    Dim c As New cEditSvr
    c.ExeFile "c:\proyecto1.exe"
    c.WriteProp "IP", "123.123.123.123"
    c.WriteProp "Port", 1234
    c.WriteData "c:\test.exe"
   
   
    Set c = New cEditSvr
    c.ExeFile "c:\test.exe"
    Debug.Print c.ReadProp("IP")
    Debug.Print c.ReadProp("Port")
End Sub

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

Karcrack

Muy bueno Cobein, yo uso el Metodo Append sin PE ni na, con este queda mas pofesionar :laugh:

Saludos :D

PD: Que es eso de PropertyBag :-\??

Spider-Net

Interesante para aprender y muy útil, me lo guardo en mi biblioteca de códigos. Gracias cobein ;D ;D ;D ;D ;D

cobein

El propertyBag lo uso para empaquetar y desempaquetar los datos, de esa manera podes agregar la cantidad de propiedades/valores que quieras. El ejemplo tiene simplemente 2 pero se pueden seguir agregando las que sea.

Importante:Si alguno usa un code para modificar el EOF no use esto!

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

ssccaann43 ©

- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

aaronduran2

El aporte está muy bien, cobein. Al final conseguí solucionar el problema que tenía con este tema.

Saludos.

Freeze.

Menos mal que no empezé a hacerlo yo porque dsde hace ratico que vi un post con una duda dije "Voy a hacer un ejemplo..!" Pero contigo no se puede esperar ni 1 hora :xD

s E t H


‭‭‭‭jackl007

me encanto, yo usaba uno que habia publicado Hendrix (por cierto, hace tiempo no veo posts de el), y es mas corto...
pero este esta bien, para aprender otras cositas =D

‭‭‭‭jackl007

el PropertyBag no se declara, se crea un objeto referenciado hacia el...
Código (vb) [Seleccionar]
Set c_pBag = New PropertyBag