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

#1021
.NET (C#, VB.NET, ASP) / Re: Seguridad en Servidor
20 Septiembre 2011, 19:52 PM
Por lo que me as dicho NO tiene caso el ser cliente servidor... digamos que verificas ok el servidor seguro envia un bloque de datos con el cual verificara si es o no original... en este caso simplemente se crea un programa que emule esto ultimo y ya esta crackeado.

Si tu programa es bueno y a buen precio seguro nadie lo crackea... no te lo aseguro, ya ves a los programades de Autodesk (Autocad...).

Nota: Espero que te muevan el tema a otro donde se ESPECIALISEN realmente, por que a  mi criterio el metodo que haces sera molesto, y terminaran crackeandote el programa, o si yo fuera lo recrearia y lo liberaria de manera Free.

Temibles Lunas!¡.
#1022
Estoy un poco aburrido y me e puesto a hacer esto:

Esta clase la he creado para tratar un poco las listas enlazadas de la manera:

Elemento 1, Elemento 2, ... , Elemento N

Es decir que la clase EMULA las listas enlazadas que libremente se pueden escribir con punteros en C/C++ pero en listas lineales.

* No estan enlazadas en forma de arbol.

De tal modo que Dejo de sustitucion a  Redim Preserve   NO en todos los casos Ojo.

Ventajas:

* Asigna memoria dependiendo sin cambiar la hubicacion de los demas elementos ( agregacion rapida de elementos ).
* Se trata a la memoria como un bloque de bytes como cualquier otro (Generico).


Desventajas:

* No se puede usar Copymemory para copiar a mas de 1 elemento...
* Solo es utilizable para casos contados...


cListLink.cls

Código (vb) [Seleccionar]


'
'   /////////////////////////////////////////////////////////////
'   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
'   //                                                         //
'   // Web:     http://InfrAngeluX.Sytes.Net/                  //
'   //                                                         //
'   //    |-> Pueden Distribuir Este codigo siempre y cuando   //
'   // no se eliminen los creditos originales de este codigo   //
'   // No importando que sea modificado/editado o engrandecido //
'   // o achicado, si es en base a este codigo                 //
'   /////////////////////////////////////////////////////////////
'   //                                                         //
'   // * Esta es una lista de 1 solo Orden... es decir no es   //
'   // de ordenamiento en arbol...                             //
'   //                                                         //
'   /////////////////////////////////////////////////////////////
'   // http://infrangelux.hostei.com/index.php?option=com_content&view=article&id=29:clistlink&catid=15:catmoduloscls&Itemid=24
'   /////////////////////////////////////////////////////////////

Option Explicit

Private Const MEM_DECOMMIT = &H4000
Private Const MEM_RELEASE = &H8000
Private Const MEM_COMMIT = &H1000
Private Const MEM_RESERVE = &H2000
Private Const MEM_RESET = &H80000
Private Const MEM_TOP_DOWN = &H100000
Private Const PAGE_READONLY = &H2
Private Const PAGE_READWRITE = &H4
Private Const PAGE_EXECUTE = &H10
Private Const PAGE_EXECUTE_READ = &H20
Private Const PAGE_EXECUTE_READWRITE = &H40
Private Const PAGE_GUARD = &H100
Private Const PAGE_NOACCESS = &H1
Private Const PAGE_NOCACHE = &H200
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal pDest As Long, ByVal pSrc As Long, ByVal ByteLen As Long)
Private Declare Function VirtualAlloc Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFree Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function VirtualLock Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long) As Long
Private Declare Function VirtualUnlock Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long) As Long
'Private Declare Function IsBadReadPtr Lib "kernel32" (ByVal lp As Long, ByVal ucb As Long) As Long
'Private Declare Function IsBadWritePtr Lib "kernel32" (ByVal lp As Long, ByVal ucb As Long) As Long
'Private Declare Function IsBadStringPtr Lib "kernel32" Alias "IsBadStringPtrA" (ByVal lpsz As Long, ByVal ucchMax As Long) As Long
'Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpStringDest As String, ByVal lpStringSrc As Long) As Long
'Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByVal Destination As Long, ByVal Length As Long)

Private Declare Sub PutMem4 Lib "msvbvm60" (ByVal Addr As Long, ByVal NewVal As Long)
Private Declare Sub GetMem4 Lib "msvbvm60" (ByVal Addr As Long, ByVal RetVal As Long)

Dim pfirst          As Long
Dim pLast           As Long
Dim lSize           As Long

Const SIZEAB        As Long = &H8
Const BEFORESIZE    As Long = &H0
Const AFTERSIZE     As Long = (BEFORESIZE + &H4)

Public Function release(ByVal pStream As Long) As Boolean
Dim lSizeF      As Long
Dim pAfter       As Long
Dim pBefore     As Long
   If (pStream = &H0) Then Exit Function
   lSizeF = (SIZEAB + lSize)
   pAfter = after(pStream)
   pBefore = before(pStream)
   VirtualUnlock pStream, lSizeF
   VirtualFree pStream, lSizeF, MEM_DECOMMIT
   VirtualFree pStream, 0, MEM_RELEASE
   If (pAfter) Then putBefore pAfter, pBefore
   If (pBefore) Then putAfter pBefore, pAfter
   If (pStream = pfirst) Then pfirst = pBefore
   If (pStream = pLast) Then pLast = pAfter
   release = True
End Function

Public Function getPtr(ByVal lIndex As Long) As Long
'   //  Retorna el puntero del elemento indicado en lIndex.
Dim pTmp            As Long
Dim i               As Long
   pTmp = first()
   Do Until (pTmp = &H0)
       i = (i + &H1)
       If (i > lIndex) Then Exit Do
       pTmp = after(pTmp)
   Loop
   getPtr = pTmp
End Function

Public Property Get size() As Long
   size = lSize
End Property

Public Property Let size(ByVal lVal As Long)
   Call clear
   lSize = lVal
End Property

Friend Sub writeStream(ByVal pStruct As Long, ByVal pData As Long)
'   //  Setea los valores en el bloque de la memoria de la lista enlazada.
   CopyMemory pStruct, pData, lSize
End Sub

Friend Function readStream(ByVal pStruct As Long, ByVal pData As Long)
'   //  Retorna los valores del bloque de la lista enlazada a una bloque.
   CopyMemory pData, pStruct, lSize
End Function


'   //  Estas funciones otienen el 1er y ultimo elemento agregado a la lista.
Friend Function first() As Long
   first = pfirst
End Function

Friend Function last() As Long
   last = pLast
End Function


'   //  funciones iteradoras.
Friend Function after(ByVal pStruct As Long) As Long    '   //  Rectorna del puntero al bloque que se agrego despues de pStruct
Dim pTmp            As Long
   If (pStruct = &H0) Then Exit Function
   GetMem4 ByVal (pStruct + lSize + AFTERSIZE), VarPtr(pTmp)
   after = pTmp
End Function

Friend Function before(ByVal pStruct As Long) As Long   '   //  Rectorna del puntero al bloque anteriormente agregado de pStruct
Dim pTmp            As Long
   If (pStruct = &H0) Then Exit Function
   GetMem4 ByVal (pStruct + lSize + BEFORESIZE), VarPtr(pTmp)
   before = pTmp
End Function

Friend Function addNew() As Long                        '   //  Agrega un nuevo bloque y lo enlaza.
Dim lSizeF      As Long
Dim pNew        As Long
   lSizeF = (SIZEAB + lSize)
   pNew = VirtualAlloc(ByVal 0&, lSizeF, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
   VirtualLock pNew, lSizeF
   ZeroMemory pNew, lSizeF                             '   //  llenamos de 0 el bloque.
   If (pLast) Then                                     '   //  Actualizamos el ultimo...
       putBefore pNew, pLast
       putAfter pLast, pNew
   End If
   If (pfirst = &H0) Then pfirst = pNew
   pLast = pNew
   addNew = pNew
End Function

Private Sub putAfter(ByVal pStruct As Long, ByVal pAfter As Long)
   If (pStruct = &H0) Then Exit Sub
   PutMem4 (pStruct + lSize + AFTERSIZE), pAfter        '   //  pNew.After
End Sub

Private Sub putBefore(ByVal pStruct As Long, ByVal pBefore As Long)
   If (pStruct = &H0) Then Exit Sub
   PutMem4 (pStruct + lSize + BEFORESIZE), pBefore     '   //  pNOW.BEFORE
End Sub

Public Function clear() As Long                         '   //  Libera la memoria asignada y retorna la cantidad liberada en bytes.
Dim lSizeRet        As Long
Dim pTmp            As Long
   pTmp = first()      '   //  Seteamos el 1ro.
   Do Until (release(pTmp) = False)
       lSizeRet = (lSizeRet + lSize + SIZEAB)
       pTmp = first()
   Loop
   clear = lSizeRet
End Function

Private Sub Class_Terminate()
   Call clear
End Sub



Ejemplo de uso

Código (Vb) [Seleccionar]


Option Explicit

Private Type DATOSPERSONALES
   edad        As Long
   categoria   As Long
   nombre      As String * 20
   apellidoP   As String * 10
   apellidoM   As String * 10
End Type

Private Sub Form_Load()
Dim oList       As cListLink
Dim tDatosP     As DATOSPERSONALES      '   //  Plantilla...
Dim pElement    As Long                 '   //  Puntero al elemento...
   
   Set oList = New cListLink
   
   oList.size = LenB(tDatosP)                                  '   //  Tamaño de la estructura (bloque de datos).
   
   With tDatosP
       .edad = 22
       .categoria = 1
       .nombre = "Miguel Angel"
       .apellidoP = "Ortega"
       .apellidoM = "Avila"
   End With
   Call oList.writeStream(oList.addNew(), VarPtr(tDatosP))     '   //  Escribimos la estructura en una lista enlazada.
   
   With tDatosP
       .edad = 42
       .categoria = 2
       .nombre = "Angel"
       .apellidoP = "Ortega"
       .apellidoM = "Hernandez"
   End With
   Call oList.writeStream(oList.addNew(), VarPtr(tDatosP))     '   //  Escribimos la estructura en una lista enlazada.
   
   With tDatosP
       .edad = 19
       .categoria = 2
       .nombre = "Maria Luisa"
       .apellidoP = "Beltran"
       .apellidoM = "Ramirez"
   End With
   Call oList.writeStream(oList.addNew(), VarPtr(tDatosP))     '   //  Escribimos la estructura en una lista enlazada.
   
   
   'Call oList.release(oList.before(oList.firts()))             '   //  Liberamos el 2 registro ("Angel Ortega Hernandez"), para eso obtenemos el 1 elemento y obtenemos el siguiente elemento con before...
   Call oList.release(oList.getPtr(1))                         '   //  Eliminamos el elemento con Index 1
   
   '   //  Retornamos los elementos...
   
   pElement = oList.first()
   
   Do Until (pElement = &H0)
       
       oList.readStream pElement, VarPtr(tDatosP)
       With tDatosP
           Debug.Print "Nombre:", .nombre
           Debug.Print "ApellidoP:", .apellidoP
           Debug.Print "ApellidoM:", .apellidoM
           Debug.Print "Edad:", .edad
           Debug.Print "Categoria:", .categoria
           Debug.Print
           Debug.Print
           Debug.Print
       End With
       pElement = oList.after(pElement)
   Loop
   
   Set oList = Nothing
   
End Sub



Temibles Lunas!¡.
#1023
.NET (C#, VB.NET, ASP) / Re: Seguridad en Servidor
20 Septiembre 2011, 04:51 AM
.
Que papel juega la BDD?... yo podria CLONAR la BDD y crackear tu Aplicacion aun asi...

* las operaciones basicas y que no tengan ninguna indole en la bdd haslas localmente en tu aplicacion, trata de que donde o el app que consulte la bdd (servidor) no se sature de cosas "Estupidas" como comprobar rangos y cosas por estilo...

* Si tienes un Cliente-Servidor dond el servidor consulta tu BDD y la interaccion entre cliente y servidor es por SQL, entonces tienes un GRAN AGUJERO, de lo contrario si es un protocolo de intercomuniccion estara seguro hasta cierto punto... puesto yo podria hacer un EMULADOR de tu servidor... simplemente destripando tu cliente xP.

* Mientras no publiques tu aplicacion sera la mas segura... una vez publicada una parte de ella pues no te dire que no se puede cracker por que la vdd es que si se puede, quisas tome tiempo pero de que se puede se puede aun cuando ofusques...

Dulces Lunas!¡.

Dulces Lunas!¡.
#1024
Programación Visual Basic / Re: SendMessage
19 Septiembre 2011, 06:42 AM
.
Cita de: calk9 en 19 Septiembre 2011, 03:35 AM
Pues eso es lo que busco... pero mas bien sería buscar la cadena en el handle y esa posición especificarla en el lParam. Con respecto al Pixel podría hacerse algo?

Quieres obtener el texto de una imagen?... si es eso revisa los mensajes de seba123neo, si no me equivoco claro, porque si no mal recuerdo el o alguien mas habia publicado la liga a un codigo ajeno que hacie lo ya dicho.

Explicate mejor a DETALLE no abrevies que confundes demasiado.

Dulces Lunas!¡.
#1025
Programación Visual Basic / Re: Como lo harian?
18 Septiembre 2011, 23:53 PM
listas enlazadas... es mas complejo en vb6.

Dulces Lunas!¡.
#1026
Cita de: raul338 en 18 Septiembre 2011, 04:07 AM
Lo malo es los que no tienen mucho tiempo (como yo :xD). Es un proyecto que ademas de ser intermedio, es mediano/grande y ademas necesita su tiempo de reflexion. Y proponer un reto para que salgan 4 o 5 interpretes, no lo veo productivo :xD

La idea no es crear un interprete en si como vbs... si no crear retos pequeños que no tienen fin de crear ni unirse a uno grande como ejemplo el del if then seria algo asi (Lo hice de una manera muy cutre y rapida):



Option Explicit

Private Sub Form_Load()
Const CODIGO As String = "if (-1 < 1)) {" & vbCrLf & "msgbox hola" & vbCrLf & "}"
    MsgBox CBool(validateCondition(itsIF(getLine(CODIGO, 0))))
End Sub

Public Static Function TextBetweenWords$(ByRef sText$, ByVal sWord1$, ByVal sWord2$)
Dim lPos1&, lPos2&, lStart&
    If LenB(sText) Then
        lPos1 = InStrB(1, sText, sWord1, vbBinaryCompare)
        If lPos1 Then
            lStart = lPos1 + LenB(sWord1)
            lPos2 = InStrB(lStart, sText, sWord2, vbBinaryCompare)
            If lPos2 Then TextBetweenWords = MidB$(sText, lStart, lPos2 - lStart)
        End If
    End If
End Function

Public Function getLine(ByRef sStr As String, ByVal lLine As Long) As String
Dim sVar()      As String
    sVar = Split(sStr, vbCrLf)
    If (UBound(sVar) < lLine) Then
        getLine = sVar(UBound(sVar))
    Else
        getLine = sVar(lLine)
    End If
End Function

Public Function itsIF(ByVal sLine As String) As String
Dim i As Long
    For i = 1 To Len(sLine)
        If (LCase$(MidB$(sLine, i, 4)) = "if") Then
            itsIF = TextBetweenWords$(sLine, "(", ")")
            Exit Function
        End If
    Next
End Function

Public Function validateCondition(ByRef sCondition As String) As Long
Dim sStr As String
Dim lIndex As Long
   
    sStr = TextBetweenWords$(sCondition, "(", ")")
    Do Until (sStr = vbNullString)
        sStr = TextBetweenWords$(sCondition, "(", ")")
        If Not (sStr = vbNullString) Then
            sCondition = Replace$(sCondition, "(" & sStr & ")", validateCondition(sStr), 1, 1, vbTextCompare)
        End If
    Loop
   
    sCondition = Trim$(sCondition)
    lIndex = InStr(1, sCondition, "=", vbTextCompare)
    If lIndex > 0 Then
        validateCondition = Trim$(MidB$(sCondition, 1, (lIndex - 1) * 2)) = Trim$(MidB$(sCondition, (lIndex * 2) + 3))
        Exit Function
    End If
   
    lIndex = InStr(1, sCondition, ">", vbTextCompare)
    If lIndex > 0 Then
        validateCondition = MidB$(sCondition, 1, lIndex) > Trim$(MidB$(sCondition, lIndex + 1))
        Exit Function
    End If
   
    lIndex = InStr(1, sCondition, "<", vbTextCompare)
    If lIndex > 0 Then
        validateCondition = MidB$(sCondition, 1, lIndex) < Trim$(MidB$(sCondition, lIndex + 1))
        Exit Function
    End If
   
    ' //  ...
End Function



Dulces Lunas!¡.
#1027
.
El interprete seria como crear un lenguaje como javascript, VBS, etc... claro se podrian crear retos por partes, pero me queda clarisimo que para crear un interprete por mas de 1 se debe llevar un seguimiento ordenado y planificado... sin contar el tiempo... etc, este reto del interprete seria como para 1 mes o mas, claro que se podria crear por partes... por ejemplo:

[Reto] Interprete if then, select case/Switch, ...:

* Donde por medio de un textbox se ponga el lenguaje y en un boton ejecute el codigo, obligamente sin interpretacion de variables (Que no se manejen variables)... es decir el if then, select case/switch, ...  sus funcionalidades basicas.

por ejemplo en un textbox que se pegue:


if 454 > 45 then
   msgbox "hola"
else if 41 = 41 then
   msgbox "adios"
else
   msgbox "error"
end if


Obviamente el interprete llamaria a msgbox de vb6, ya que solo se deberia programar un interprete de if then, posteriormente se al tener varios codigos se podria armar o unir... espero haberme explicado.

Sin usar algun ocx. o algo que ya haga el trabajo como vbs o javascript...

Es un poco LOCA esta propuesta y me la andaba pensando puesto que se debe planificar bien...

Dulces Lunas!¡.
#1028
.
Mi propuesta principal es el Interprete pero la vdd no se si les sea factible debida a su complejidad... claro esta que solo sera para matar el tiempo y pasar el rato, y como ya dige contendria:

* Manejo de procesos y funciones.
* Manejo de variables con sus tipos X (porejemplo Dim nombre as tipo, o tipo nombre variable = constructor, ...).
* Con que tipos de variables debe contar.
* Funciones predeterminadas del interprete (Mid, Left, IndexOf, ...).
* Instrucciones de flujo (If then, select case o Switch, ...).
* Bucles (do while, for(), ...).
* forma de retornar los valores (por la instruccion return o como lo hace vb6).
* Entre otras cosillas.
* Ademas de incluir ejemplos.

Enseguida expando cada tema ya que no es facil...

Dulces Lunas!¡.
#1029
.
El tema es proponer retos discutir su dificultad y por ende sacar a flote dicho tema respectivamente en un hilo ajeno a este, ya que proponer un reto la vdd no es cosa facil, por ejemplo:

Proponer crear una aplicacion X discutiendo su complejidad.
Proponer la recreacion de la funcion X.
Proponer la creacion de alguna indole X.

Que debera llevar ...?
Que se espera de ...?
Prototipo de la funcion ...?

Por ejemplo: tengo en mente proponer un 3 retos los cuales son:

Crear un interprete...
Crear un lector de estructuras en arbol (como XML, HTTP, etc)...
Otro que no por el momento.

Puedo decir que el interprete tiene una dificultad Intermedio-Avanzado y el lector de estructuras en arbol seria un nivel Intermedio, pero por el momento SUPONGAMOS que en el interprete digo que haga X cosas... pero me lleguen a faltar mas cosillas; es decir discutir SOLAMENTE lo que debe esperarse de este mas que codigo deberia llevar Por ejemplo:

* Manejo de procesos y funciones.
* Manejo de variables con sus tipos X (Dim nombre as tipo).
* Con que tipos de variables debe contar.
* Funciones predeterminadas del interprete (Mid, Left, IndexOf, ...).
* Instrucciones de flujo (If then, select case o Switch, ...).
* Bucles (dow while, for(), ...).
* forma de retornar los valores (por la instruccion return o como lo hace vb6).
* Entre otras cosillas.
* Ademas de incluir ejemplos.

Este ultimo me es interesante puesto que se podrian crear entre 2 o mas personas claro que tambien 1 podria hacerlo, ademas de que fomentaria el compañerismo del foro.

Esta es una propocision.

Cada Post para no hacerlo lago deberia llevar una cita de link mas no citar completamente el tema esto ultimo para mantener un orden en el tema hilo.

Dulces Lunas!¡.
#1030
Programación Visual Basic / Re: [Reto] IsHour
18 Septiembre 2011, 02:57 AM
Cita de: Psyke1 en 16 Septiembre 2011, 00:43 AM
@BlackZero
Ahh, ok, te lo había copiado de un código tuyo de no sé donde... :silbar:

lo se pero yo lo hacia de la manera (Solo en/para numeros).

TipoNumerico1 = (TipoNumerico1.2 + TipoNumerico2)

Donde: TipoNumerico1.2 es del mismo tipo que TipoNumerico1 pero con valor 0... y el tipo resultante sera del tipo TipoNumerico1.2, mas no del TipoNumerico2...

ej.:

Código (vb) [Seleccionar]


dim lVal as long
dim bVal as byte

lval = (&H0 + bVal)



y tu lo haces de una manera un poco mas ofuscada... ya que como sabras si pones

Código (vb) [Seleccionar]


dim lVal as long
Const VAL as string = "10"

VAL
lval = (&H0 + VAL) ' // mas no (VAL + &H0)



Realizara su trabajo, pero le das mas trabajo independiente a el lenguaje y sabra solo el que resultados salgan... ya que como sabras "10" se deberia transformar a un valor de tipo numerico (Lo que yo hago en mi codigo y que seguro Raul338 me copio..  :xD :xD na no te creas es un gran programador  ;) :))