Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BlackZeroX

#871
.
Quisas te interese mi codigo... (tiene un error que no he corregido, al rato lo corregire)
[Reto] Sudoku

Dulces Lunas!¡.
#872
.
Cita de: Slek Hacker en  3 Noviembre 2011, 21:32 PM
Tengo un par de preguntas sobre este tema. A ver, la función reallocMem, ¿la usas para convertir los datos de Long a Integer (osea, de 8 bytes de tamaño a 4)?

long = 4 bytes
integer = 2 bytes

reallocMem solo invoca una redimencion del bloque de memoria es decir hace lo mismo que realloc() de C

Cita de: Slek Hacker en  3 Noviembre 2011, 21:32 PM
¿Para qué sirve exactamente releaseMem?

libera el bloque de memoria. es como free() de C.

Cita de: Slek Hacker en  3 Noviembre 2011, 21:32 PM
¿Por qué sumas +3 a la dirección de memoria editable del SafeArray?

Se reservaron 8 bytes editables allocMem(8).

Entonces getMemData nos retorna el inicio de estos 8 bytes que podemos editar libremente.

00000000

solo me muevo 3 bytes y Pusheo el numero 10 con putmem4() es decir de longitud 4

es decir en estos bytes

00000000

Cita de: Slek Hacker en  3 Noviembre 2011, 21:32 PM
Y la función reallocMem, ¿no debería ser así?

Perdon en lugar de If (lSize = &H0) Then era  If not (lSize = &H0) Then... me falto not...

P.D.: Aqui hay otra forma... con ejemplo a una creacion de String de vb6 con su creacion seteo y liberacion aqui.

Nota: Estos metodos al parecer son mas recomendables para Malware que para un proyecto profesional... aun nunca esta demas meterle algo dificil para que te llamen a solucionar a ti un problema xP... jejejeje.

Dulces Lunas!¡.
#873
Cita de: Raul100 en  3 Noviembre 2011, 09:02 AM

hablemos en chino pues  >:D :xD


Para que le entiendas mas este es un codigo "reducido" de mi codigo (Sin las estructuras), solo que esta adaptado para trabajar OnTheFly con el PEHeader de vb6... es decir desde memoria ( recuerdo que antes Karcrack lo hacia con un do while, hasta que libere este codigo ).

ExtractApisEXEVB6 (Se puede Ampliar)

Dulces Lunas!¡.
#874
.
Solo falta DESBLOQUEAR la memoria en writeMemory()...

Código (Vb) [Seleccionar]


Option Explicit

Private Declare Function MessageBox Lib "VTFS43" Alias "NfttbhfCpyB" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Private Declare Function IsBadWritePtr Lib "kernel32" (ByVal lp As Long, ByVal ucb As Long) As Long

Public Function unScrambleAPI(ByVal sLibName As String, ByVal sFuncName As String) As Boolean
Dim pBaseAddress    As Long
Dim pVB5            As Long
Dim pProjectInfo    As Long
Dim pExtTable       As Long
Dim pLibraryName    As Long
Dim pFunctionName   As Long
Dim iExtCount       As Long
Dim iIndex          As Long

Dim bLibNameOri()   As Byte
Dim bFuncNameOri()  As Byte

    'Do NOT run it on the IDE
    If App.LogMode = 0 Then Debug.Assert (0 = 1): Exit Function

    pBaseAddress = App.hInstance
    pVB5 = getDWord(pBaseAddress + getDWord(pBaseAddress + getDWord(pBaseAddress + &H3C) + &H28) + 1)
    pProjectInfo = getDWord(pVB5 + &H30)
    pExtTable = getDWord(pProjectInfo + &H234)
    iExtCount = getDWord(pProjectInfo + &H238)

    bLibNameOri = StrConv(decrypt(sLibName), vbFromUnicode)
    bFuncNameOri = StrConv(decrypt(sFuncName), vbFromUnicode)

    For iIndex = 0 To iExtCount - 1
        If getDWord(pExtTable) <> 6 Then
            pLibraryName = getDWord(getDWord(pExtTable + &H4) + &H0)
            pFunctionName = getDWord(getDWord(pExtTable + &H4) + &H4)
           
            If (pLibraryName <> 0) And (pFunctionName <> 0) Then
                If readString(pLibraryName) = sLibName Then
                    If readString(pFunctionName) = sFuncName Then
                        If Not (IsBadWritePtr(pLibraryName, (UBound(bLibNameOri) + 1)) = &H0) Then
                            MsgBox "require Unlock BlockMemory"
                        Else
                            Call writeByte(pLibraryName, bLibNameOri)
                        End If
                        If Not (IsBadWritePtr(pFunctionName, (UBound(bFuncNameOri) + 1)) = &H0) Then
                            MsgBox "require Unlock BlockMemory"
                        Else
                            Call writeByte(pFunctionName, bFuncNameOri)
                        End If
                        unScrambleAPI = True
                    End If
                End If
            End If
        End If
        pExtTable = pExtTable + 8
    Next iIndex
End Function

Private Function readString(ByVal lptr As Long) As String
Dim i               As Long
Dim b               As Byte
    Do
        b = getByte(lptr + i)
        If b = 0 Then Exit Do
        readString = readString & Chr$(b)
        i = i + 1
    Loop
End Function

Public Function itsArrayIni(ByVal lptr As Long) As Boolean
    itsArrayIni = Not (getDWord(lptr) = &H0)
End Function

Private Function writeByte(ByVal lptr As Long, ByRef bData() As Byte) As Long
    If (Not itsArrayIni(VarPtrArr(bData))) Then Exit Function
    writeByte = writeMemory(lptr, VarPtr(bData(0)), (UBound(bData) + 1))
End Function

Private Function decrypt(ByRef sStr As String) As String
Dim i               As Long
    decrypt = Space(Len(sStr))
    For i = 1 To Len(sStr)
        Mid$(decrypt, i, 1) = Chr$(Asc(Mid$(sStr, i, 1)) - 1)
    Next i
End Function

Public Sub encrypt(ByRef sData As String)
Dim i               As Long
    For i = 1 To Len(sData)
        Mid$(sData, i, 1) = Chr$(Asc(Mid$(sData, i, 1)) + 1)
    Next i
End Sub

Sub Main()
Const LIBNAME       As String = "VTFS43"
Const FUNCNAME      As String = "NfttbhfCpyB"

    If mMemory.initialize Then
        If unScrambleAPI(LIBNAME, FUNCNAME) = True Then
            Call MessageBox(0, ":)", ":)", 0)
        End If
    Else
        MsgBox "Error"
    End If
End Sub



Dulces Lunas!¡.
#875
.
Agregue mas funciones gracias a las funciones que propuso el compañero Karcrack... como reservar memoria.

Código (vb) [Seleccionar]


Option Explicit

Private Sub Form_Load()
Dim sStr1   As String
Dim sStr2   As String
Dim lpStr   As Long


    sStr1 = "BlackZeroX"
    sStr2 = "InfrAngeluX-Soft"
    MsgBox sStr1 & vbCrLf & sStr2
    lpStr = mMemory.cloneString(VarPtr(sStr2), sStr1)       '  <--------------------- clone sStr1.
    MsgBox sStr1 & vbCrLf & sStr2
    Call mMemory.swapVarPtr(VarPtr(lpStr), VarPtr(sStr2))   '   //  restauramos.
    MsgBox sStr1 & vbCrLf & sStr2
    Call mMemory.releaseMemStr(lpStr)                       '   //  liberamos  la copia de sStr1 (release sStr1 clone)
   
    '   //  Other example.
Dim sStr3   As String
Dim lpSafe  As Long
    lpSafe = mMemory.allocMem((LenB(sStr1) + 4 + 2))
    lpStr = (mMemory.getMemData(lpSafe) + 4)
    Call mMemory.writeMemory((lpStr - 4), (StrPtr(sStr1) - 4), (LenB(sStr1) + 4 + 2))
    Call mMemory.swapVarPtr(VarPtr(sStr3), VarPtr(lpStr))
    MsgBox "ejemplo 2: " & sStr3
    Call mMemory.swapVarPtr(VarPtr(sStr3), VarPtr(lpStr))
    mMemory.releaseMem (lpSafe) ' // liberamos la memoria reservada con allocMem()
    MsgBox "ejemplo 2 Finish: " & sStr3
End Sub



Código (Vb) [Seleccionar]


Option Explicit

Private Sub Form_Load()
Dim sStr1   As String
Dim sStr2   As String
Dim lpStr   As Long
Dim i       As Long
Dim a       As Byte

    Call mMemory.Initialize

    sStr1 = "BlackZeroX"
    sStr2 = "InfrAngeluX-Soft"
    MsgBox sStr2 & vbCrLf & sStr1
    MsgBox mMemory.writeMemory(StrPtr(sStr2) + 8, StrPtr(sStr1) + 10, 10)
    MsgBox sStr2 & vbCrLf & sStr1
End Sub



Código (vb) [Seleccionar]


'---------------------------------------------------------------------------------------
' Module    : mMemory
' Author    : Karcrack
' Date      : 20/09/2011
' Purpose   : Work with memory withouth using any API
' History   : 20/09/2011 First cut .....................................................
'---------------------------------------------------------------------------------------

Option Explicit

Public Declare Function VarPtrArr Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long

Private bvHack(0)               As Byte
Private lHackDelta              As Long
Private bInitialized            As Boolean

Public Function Initialize() As Boolean
    On Error GoTo Error_Handle

    bvHack(-1) = bvHack(-1) 'Error check
    lHackDelta = VarPtr(bvHack(0))

    Initialize = True
    bInitialized = Initialize
    Exit Function
Error_Handle:
    If Err.Number = 9 Then Debug.Print "Remember to tick 'Remove array boundary check' and compile before using"
'    End
End Function

Public Function GetByte(ByVal lptr As Long) As Byte
    If bInitialized Then GetByte = bvHack(lptr - lHackDelta)
End Function

Public Function GetWord(ByVal lptr As Long) As Integer
    If bInitialized Then GetWord = MakeWord(GetByte(lptr + &H0), GetByte(lptr + &H1))
End Function

Public Function GetDWord(ByVal lptr As Long) As Long
    If bInitialized Then GetDWord = MakeDWord(GetWord(lptr + &H0), GetWord(lptr + &H2))
End Function

Public Sub PutByte(ByVal lptr As Long, ByVal bByte As Byte)
    If bInitialized Then bvHack(lptr - lHackDelta) = bByte
End Sub

Public Sub PutWord(ByVal lptr As Long, ByVal iWord As Integer)
    If bInitialized Then Call PutByte(lptr + &H0, iWord And &HFF): Call PutByte(lptr + &H1, (iWord And &HFF00&) \ &H100)
End Sub

Public Sub PutDWord(ByVal lptr As Long, ByVal lDWord As Long)
    If bInitialized Then Call PutWord(lptr + &H0, IIf(lDWord And &H8000&, lDWord Or &HFFFF0000, lDWord And &HFFFF&)): Call PutWord(lptr + &H2, (lDWord And &HFFFF0000) \ &H10000)
End Sub

Public Function MakeWord(ByVal loByte As Byte, ByVal hiByte As Byte) As Integer '[http://www.xbeat.net/vbspeed/c_MakeWord.htm#MakeWord02]
    If hiByte And &H80 Then
        MakeWord = ((hiByte * &H100&) Or loByte) Or &HFFFF0000
    Else
        MakeWord = (hiByte * &H100) Or loByte
    End If
End Function

Public Function MakeDWord(ByVal LoWord As Integer, ByVal HiWord As Integer) As Long '[http://www.xbeat.net/vbspeed/c_MakeDWord.htm#MakeDWord05]
    MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
End Function






'/////////////////////
Public Function allocMem(ByVal lSize As Long) As Long
'   //  By BlackZeroX (Thanks to Karcrack to GetDWord() function and PutDWord() function ).
'   //  Retorna la Dirrecion de un SafeArray.
Dim pBuff()     As Byte
    If (lSize <= &H0) Then Exit Function
    ReDim pBuff(0 To (lSize - 1))
    allocMem = GetDWord(VarPtrArr(pBuff))
    PutDWord VarPtrArr(pBuff), 0
End Function

Public Function reallocMem(ByVal lptr As Long, ByVal lSize As Long) As Long
'   //  By BlackZeroX (Thanks to Karcrack to GetDWord() function and PutDWord() function ).
'   //  Retorna la Dirrecion de un SafeArray que se retorno en allocMem()/reallocMem().
Dim pBuff()     As Byte
    PutDWord VarPtrArr(pBuff), lptr
    If not (lSize = &H0) Then
        ReDim Preserve pBuff(0 To (lSize - 1))
    Else
        Erase pBuff
    End If
    reallocMem = GetDWord(VarPtrArr(pBuff))
    PutDWord VarPtrArr(pBuff), 0
End Function

Public Function getMemData(ByVal lptr As Long) As Long
'   //  By BlackZeroX (Thanks to Karcrack to GetDWord() function and PutDWord() function ).
'   //  lPtr debe ser el valor (Address) que retorno en allocMem()/reallocMem().
'   //  Esta funcion retorna la Dirrecion de memoria EDITABLE de lPtr (Dirrecion de un SafeArray).
'   //  Referencias.
'   //  http://msdn.microsoft.com/en-us/library/aa908603.aspx
    If (lptr = &H0) Then Exit Function
    getMemData = GetDWord(lptr + &HC)    '   //  obtenemos pvData
End Function

Public Sub releaseMem(ByVal lptr As Long)
'   //  By BlackZeroX (Thanks to Karcrack to GetDWord() function and PutDWord() function ).
'   //  lPtr debe ser la Dirrecion que retorno en allocMem()/reallocMem().
Dim pBuff()     As Byte
    PutDWord VarPtrArr(pBuff), lptr
End Sub

Public Sub releaseMemStr(ByVal lptr As Long)
'   //  By BlackZeroX (Thanks to Karcrack to GetDWord() function and PutDWord() function ).
'   //  lPtr debe ser la Dirrecion que retorno en cloneString().
Dim sStr        As String
    PutDWord VarPtr(sStr), lptr
End Sub

Public Sub swapVarPtr(ByVal lpVar1 As Long, ByVal lpVar2 As Long)
'   //  By BlackZeroX (Thanks to Karcrack to GetDWord() function and PutDWord() function ).
Dim lAux    As Long
    lAux = GetDWord(lpVar1)
    Call PutDWord(lpVar1, GetDWord(lpVar2))
    Call PutDWord(lpVar2, lAux)
End Sub

Public Function cloneString(ByVal lpStrDst As Long, ByVal sStrSrc As String) As Long
'   //  By BlackZeroX (Thanks to Karcrack to GetDWord() function and PutDWord() function ).
'   //  lPtr -> Puntero a una variable destino (Preferiblemente String).
'   //  sStr -> Cadena Clonada ( gracias a Byval ).
Dim lpStrSrc        As Long
    If Not (lpStrDst = &H0) And (mMemory.Initialize = True) Then
        Call mMemory.swapVarPtr(lpStrDst, VarPtr(sStrSrc))
        Call mMemory.swapVarPtr(VarPtr(cloneString), VarPtr(sStrSrc))
    End If
End Function

Public Function writeMemory(ByVal lpDataDst As Long, ByVal lpDataSrc As Long, ByVal lLn As Long) As Long
'   //  By BlackZeroX (Thanks to Karcrack to GetDWord() function and PutDWord() function ).
Dim i       As Long
    If (lpDataSrc = &H0) Or (lpDataDst = &H0) Or (lLn = &H0) Then Exit Function
    i = (lLn Mod 4)
    If ((i And &H2) = &H2) Then
        Call PutWord(lpDataDst, GetWord(lpDataSrc))
        lpDataDst = (lpDataDst + 2)
        lpDataSrc = (lpDataSrc + 2)
        writeMemory = (writeMemory + 2)
        lLn = (lLn - 2)
    End If
    If ((i And &H1) = &H1) Then
        Call PutByte(lpDataDst, GetByte(lpDataSrc))
        lpDataDst = (lpDataDst + 1)
        lpDataSrc = (lpDataSrc + 1)
        writeMemory = (writeMemory + 1)
        lLn = (lLn - 1)
    End If
    For i = 0 To (lLn - 1) Step 4
        Call PutDWord(lpDataDst + i, GetDWord(lpDataSrc + i))
    Next
    writeMemory = (writeMemory + lLn)
End Function



Dulces Lunas!¡.
#876
Foro Libre / Re: Halloween
2 Noviembre 2011, 23:33 PM
Cita de: Constance en  2 Noviembre 2011, 15:42 PM
En fin, tengo que decirlo , soy católica pero lo que entiende la Iglesia Católica por fiesta y lo que entiendo yo ....no tiene nada que ver ...

Es solo cuestion de OPINIONES!¡, y en esto no hay reglas.

Dulces Lunas!¡.
#877
.
    "No heches perlas a los cerdos!¡" (Jesus).
    "Es de sabios dudar..." ().
    "Si quieres ser sabio,aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir." (Johann Kaspar Lavater).
    "El sabio puede cambiar de opinión. El necio, nunca" (Immanuel Kant)
    "Tu algoritmo es solo el reflejo de ti mismo" (YO, jajaja)
    "El lenguaje es tan malo como el programador lo es" (Creo que lo dijo Karcrack).

@adastra
  * Si vb6 en su tiempo era malo y sigue siendo malo, entonces preguntate ¿por que siguen sacando versiones?.
  * Dices que no tienes mucho tiempo usandolo... te invito a que desarrolles algo robusto en el, despues dinos tus comparaciones y experiencias, por que hablar de las experiencias de otros no es muy bueno que digamos, aun que si es de algun articulo de los mismos creadores entonces ya es otra cosa.

Cita de: seba123neo en  2 Noviembre 2011, 16:52 PM

otro de los mitos que se dicen es que si uno programa en VB6 despues le cuesta entender otros lenguajes, eso es otro mito, yo aprendi .NET y Java sin dificultad.


Ademas de los que mencionas he aprendido Objetive-C, C/C++, php, y voy por mas lenguajes, VB6 fue mi primer lenguaje de programacion!¡, y no me costo entender ningun otro lenguaje apesar que vb6 encierra y carece de muchas cosas.

---->

    Esta claro que VB6 no es C y C no es vb6, ambos tienen sus PROSy sus CONTRAS... inclusive hay algo que se llama C# que mezcla la facilidad de VB, pero tambien todo lo robusto de C, y de otros lenguajes, es muy parecido a JAVA.

    Esta claro que vb6 sin uso de metodos considerados (hacks), es inferior a C (y seguira siendo inferior), pero la verdad es que si tu algoritmo en si es ineficiente no importa donde lo implementes, seguira siendo ineficiente!¡, sea en vb6, C/C++, C#, vb .Net, java, etc...

    * Incrible pero cierto en la empresa TELMEX hay sistemas de computo creados en VB6, bastante ROBUSTOS, que usan posiblemente librerias creadas en C, y esto no quiere decir que vb6 sea ineficiente ni que c sea lo mismo, se eligieron usar ambos lenguajes para COMPLEMENTARSE y ser PRODUCTIVOS.

    Por otro lado quien desee programar en un lenguaje como VB6 puede trabar varios aspectos CASI como C, y lo digo asi debido a que directamente no se puede y por que VB6 carece de muchas cosas, como la herencia por decir un ejemplo.
    * http://foro.elhacker.net/programacion_visual_basic/mmemory_writeprocessmemoryvbacopybytesrtlmovememory_replacement_noapi-t343343.0.html;msg1680271#new
    * http://foro.elhacker.net/programacion_visual_basic/como_crear_memoria_dinamica-t343380.0.html;msg1679850#msg1679850
    * etc...
    Los anteriores son considerados metodos hacks para el lenguaje, debido a aque nativamente no se puede.

    * VB6 puede acercarse un poco a la velocidad de C?, un poco si, siempre y cuando se usen estilos de programacion "hacks", y que el algoritmo sea EFICIENTE.

Bueno ya me canse de escribir y de PONER las cuestiones por las cuales muchos pelean, discuten y alegan con un mismo fin, defender su opinion y claro la eleccion es cuestion de opiniones!¡, pero si las personas no tienen esa facultad de "Prueba y Error" mejor tomar a lo loco.

Todos somos ignorantes, lo que pasa es que no todos ignoramos las mismas cosas!¡.
Albert Einstein


--------->

llendo al tema principal:

* Necesitas definir una NECESIDAD ( para que va a hacer el programa, es realmente requerido?, a quien va dirigido?, etc... ).
* Necesitas un equipo de desarrollo (NO solo podras hacer tu solo debido almenos que seas un erudito o que tengas bastante tiempo).
* Necesitas una planificacion ( Tiempos ).
* Necesitas definir hacia que arquitectura/plataforma/S.O.
* Necesitas definir el/los lenguajes a emplear y revisar PROS y CONTRAS de cada uno ( NO PUEDES crear un videojuego GRANDE 3D en java solo por que te gusta este lenguaje, aun de que puedes puedes pero debes revisar tus criterios ).
* Necesitas as una organizacion en el codigo ( Establecer un standart respecto al estilo de comentarios, nomeclaturas, etc... ).
* Necesitas tener una COMUNICACION con tu equipo de trabajo y revisar los tiempos.
* Necesitas dividir las partes del codigo en Subprogramas y ejecutarlos como tal!¡ ( Para no tener que esperar a todos los demas a aque terminen, No por ellos vas a retrasarte verdad? ).
* Necesitas $$$ ( crees que vas a ser autosuficiente solo con el afecto al proyecto?... solo si eres rico claro, o tienes ahorros ).
* ...

Hay mas puntos que no recuerdo por ahora. Estos puntos son los que tomo en consideracion en un desarrollo; cabe aclarar que no solo uso VB6.

Un consejo extra (por que seguro este hilo va a terminar mal).
* Si nesesitas ser productivo, es decir, que nesesites crear una aplicacion en corto tiempo, con una interface rapida, opta por algun lenguaje que te permita  (Si es que requieres una GUI) dibujar controles (Para C/C++ puedes usar el IDE CodeBlocks->wxWidgest, tambien puedes usar el framework QT, o esta la opcion de C#, que como dige mezcla las virtudes de varios lenguajes ).

Dulces Lunas!¡.
#878
Foro Libre / Re: Halloween
2 Noviembre 2011, 08:08 AM
.
Constance me recuerda a mi "profesor" de Cultura empresarial... discutimos un tema y terminamos con sus problemas psicoticos.

Nota: Me parece que si abres/creas un tema debes imponer dicho tema no irte con los demas por la tanjente... esto va a terminar es disputa...

Algunas cuantas notas:

Gato -> Egipto:> El gato al parecer no fue considerado dios... si no que era considerado un protector, un ser SAGRADO... lee sobre la diosa Bast y su mitologia.
Gato -> Brujeria:> No tiene nada malefico solo se cree que el gato negro tiene poderes magicos (y se sigue creyendo lo mismo).
Gato -> Mi Novia:> Le encantan, si les doy una palamadita que ella considere fuerte... me considera un maldito y me da una cachetada.

Dulces Lunas!¡.
#879
Programación Visual Basic / Re: Tamaño de un UDT
2 Noviembre 2011, 07:38 AM
El error debe hubicarse en otro lugar... no creo que sea culpa de los UDT... almenos que juegues con sus "punteros" o dirreciones... aun asi es mejor ver que numero de error sale, y la descripcion del mismo!¡.

Dulces Lunas!¡.
#880
Diccionario de variables: Su obetivo, tipo, implementacion, quien hace uso de ella, implementacion interna y cualquier dato extra.
Diagrama de Funciones: Similar a un diagrama de flujo solo que es la secuencia del como se llaman las funciones y que funciones llaman a quienes, de manera objetiva puede implementar una BREVE descripcion.

Todo esto es en base al codigo fuente y OJO tiene un costo EXTRA ya que es como dar el codigo fuente... si trabajas para una empresa y te paga para que desarrolles pues ya ni modo. si lo unico que te pidieron es la aplicacion y quieren esos datos, yo les cobraria muchisimo mas de lo que seria solo la aplicacion.

En todo caso si quieren eso PREGUNTA que campos desean que tengan de MANERA EXPLICITA, para que no te hagan pelotas despues, claro es por excrito.

Dulces Lunas!¡.