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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación Visual Basic / Re: cifrar/codificar datos en: 18 Mayo 2005, 21:39 pm
Ya vamos, pues si resulta que al final si que se van a usar el que use la funcion acabara como tu avatar, dandose cabezazos contra el pc  ;D

A mi me gusta pulir bien las cosas y aun asi siempre hay algo que o queda mal o no funciona como esperas, pero hay que ser cuidadoso con estas cosas , porque si el programa se hace cada vez mas y mas grande, imaginate para encontrar el bug.  ;)
2  Programación / Programación Visual Basic / Re: cifrar/codificar datos en: 18 Mayo 2005, 08:42 am
Separemos el codigo en el evento DataArrival y nos centramos en el caso de que no sea servidor. En este caso lo que hara sera ir leyendo el archivo hasta que llegue al final, y lo ira enviando por bloques (en esta caso de 8 bytes pero es a gusto del consumidor) . Para cifrar estos datos deberiamos recorrer la cadena 'CadenaEnviar' con la funcion que te pase de cifrar o la que mas te guste, asi pues la convertiria y pasaria a estar cifrada.
Código:
Case "EMPEZAR"
                        FPuntero = CLng(SubComando(1)) * 8 ' pone el puntero donde va a empezar
                        Do While FHex.Fichero(FPuntero, CadenaEnviar)
                            If WS.State <> 7 Then Cancelar = True: Exit Do
                            WS.SendData CStr(FPuntero) & "=" & CadenaEnviar & vbCrLf
                            FPuntero = FPuntero + 8
                            RaiseEvent Progreso(CInt((FPuntero * 100) / FHex.TArchivo))
                            If Cancelar Then Exit Do
                            DoEvents
                        Loop
                        If Not Cancelar Then
                            WS.SendData CStr(FPuntero) & "=" & CadenaEnviar & vbCrLf
                            RaiseEvent Completado
                        Else
                            RaiseEvent Mensaje("Cancelado por el usuario")
                            WS.Close
                            RaiseEvent Conexion(False)
                        End If
                End Select
           
 
Luego en el caso de que sea servidor hay que hacer la operacion inversa:
Código:
Case True ' ES SERVIDOR
                Select Case SubComando(0)
                    Case "FICHERO"
                            RutaFichero SubComando(1)
                            TamañoArchivoS = SubComando(2)
                            RaiseEvent RecibiendoDatos(iFichero, TamañoArchivoS)
                            WS.SendData "EMPEZAR=" & CStr(FHex.TArchivo \ 8) & vbCrLf ' manda el bloque
                            'donde debe empezar a transmitir
                    Case Else
                        RaiseEvent Progreso(CInt(CLng((SubComando(0)) * 100) / TamañoArchivoS))
                        If Not FHex.Fichero(CLng(SubComando(0)), SubComando(1)) Then
                            RaiseEvent Completado
                        End If
                End Select

Lo que es diferente es que la cadena que recibimos viene en una array 'SubComando' pues al recibir los datos se divide dos veces la cadena para saber varias cosas. Si los datos recibidos acaban de llegar o ya estaban llegando y tengo que resumirlos y tambien la posicion del archivo donde tengo que pegar ese bloque. Tendriamos que descifrar 'SubComando(1)'.

Los datos para que veas un ejemplo practico seria asi:

Código:
Supongamos que queremos enviar el archivoA y es un texto plano:

ArchivoA:"HOLA"

El envio seria asi mas o menos:

Se envia "FICHERO" Nombre y tamaño
se envia "EMPEZAR"
Do while not FinArchivo
   se van enviando los caracteres "HOLA"
   convertidos a hex
loop

Espero haberme explicado bien.  Piensa que el tema de los eventos es complicado. Se ha de estructurar y pensar muy bien cuando haces una aplicacion cliente / servidor. Porque sino podrias perder eventos y volverte loco :)
3  Programación / Programación Visual Basic / Re: cifrar/codificar datos en: 17 Mayo 2005, 20:33 pm
Lympex:
Citar
Básicamente lo que hace es ir transformando los caracteres, les coje el código ascii y lo convierte en 18 caracteres ascii menos para cifrar, y les suma esos 18 para descifrar. Es un algoritmo muy básico pero espero que te sirva


Lympex, esa funcion que usas para cifrar y descifrar no creo que sirva si vas a transferir datos que no sean alfanumericos. Piensa en el caso de que vayas a transferir un caracter ASCII de valor 0 que seria (a parte del 13) el vbcrlf o retorno de carro. Provocaria que el resultado fuese -18 y petaria. A mi me gusta mas la idea de usar XOR si conoceis el sistema binario XOR lo que hace es la negación de OR y el resultado es perfecta combinacion para cifrar. Por ejemplo:

Un codigo a OJO!!, podria ser:
Código:
' cuidado que esto lo estoy haciendo sobre la marcha

public function cifrar(byRef Cadena as string)
   dim BCadena as integer, BClave as integer
   const Clave="1X3fxpqw823"
   for BCadena =1 to len(Cadena)
     BClave=BClave+1
     If BClave>len(Clave) then BClave=1
     cifrar=cifrar & chr( asc(mid(cadena,BCadena,1)) XOR asc(mid(Clave,BClave,1)))
   next BCadena
End function

Si ponemos:
Código:
dim mipass as string
mipass="HOLA"
cifrar mipass
debug.print mipass

pues ya no saldra "HOLA" saldra un churro de caracteres que no se entiende. Lo bueno del asunto esque si usamos ese churro y lo volvemos a pasar por la funcion cifrar, devolvera otra vez "HOLA".

Ya digo que lo hago a ojo, asi os lo currais vosotros, si necesitais que lo pruebe me lo decis. Un saludo
4  Programación / Programación Visual Basic / Re: cifrar/codificar datos en: 17 Mayo 2005, 20:20 pm
Aqui te mando un ejemplo que hice para un grupo de news de programacion. Es un modulo de clase y aqui se gestiona tanto envio como recepción. En el código completo escribi otro modulo para desmontar un archivo y transmitirlo por bloques de 64 bits, convertia los caracteres a hex, para poder usar codigos de retorno y dividir los bloques. Cada vez que enviaba un bloque, antes del bloque iba la posicion del archivo, asi pues puedes resumir el archivo y reanudarlo posteriormente. Con este modulo de echo ya estas cifrando la transmisión puesto que no la mandas en el formato que usan normalmente los servidores ftp. Pero siempre puedes hacer un XOR del valor con una cadena que seria la clave de encriptacion. Si tienes alguna duda o quieres verlo completo, tendreis que decirme donde lo subo , para que otros puedan ver el codigo completo, ni tengo web ni servidor ftp (solo pa mi :) )

Código:
' ..................................................................
' .                                                                 .
' . Un ejemplo para enviar y recibir archivos atraves de Winsock    .
' . con posibilidad de cancelar transferencia y resumir datos       .
' .                                                                 .
' . Escrito por: coolbrain      Para:www.elhacker.net
' .                                                                 .
' . mod:CLS_TRANSMISION                                             .
' ...................................................................
Option Explicit
Public IP As String
Public Port As String
Public Cancelar As Boolean
Public PathDownload As String

Private esServidor As Boolean ' se usuara para saber si la clase va a ser servidor o cliente
Private WithEvents WS As Winsock
Private MiForm As Form ' Para instanciar Winsock
Private IMensaje ' Mensajes internos
Private FPuntero As Long ' Puntero donde se este leyendo actualmente del fichero hex
Private TamañoArchivoS As Long ' Tamaño del archivo recibido
Private iFichero As String     ' Nombre del fichero a recibir
Public Event Error(Numero As Double, Descripcion As String)
Public Event Conexion(Establecida As Boolean)
Public Event Completado()
Public Event Mensaje(Estado As String)
Public Event Progreso(Pos As Integer)
Public Event RecibiendoDatos(NombreFichero, TotalBytes As Long)  ' Evento que indica al servidor que esta recibiendo datos
Private FHex As cls_Hex
'
' Inicializar clase
'
Private Sub Class_Initialize()
    Set MiForm = New FC
    Load MiForm
    Set WS = MiForm.WS
    Set FHex = New cls_Hex
End Sub
'
' Establecer Parametros
'
' Parametro para establecer si trabajara como servidor
Public Property Let Servidor(ByVal valor As Boolean)
    esServidor = valor
    FHex.Servidor = valor
End Property
' La ruta del fichero a trabajar
Public Function RutaFichero(ByVal valor As String)
    Dim NombreDirs() As String
    NombreDirs = Split(valor, "\")
    iFichero = NombreDirs(UBound(NombreDirs()))
    If esServidor Then ' si es servidor establecera la ruta en el path configurado
                       'y solo toma el nombre del archivo
        If Dir(PathDownload & iFichero) = "" Then ' Como no existe el fichero
            Dim IFF As Integer                     ' creamos un fichero vacio
            IFF = FreeFile
            Open PathDownload & iFichero For Output As #IFF
            Close #IFF
        End If
        FHex.RutaArchivo = PathDownload & iFichero
        If FHex.TArchivo > 0 Then RaiseEvent Mensaje("Recuperacion de fichero incompleto. Bloque:" & CStr(FHex.TArchivo \ 8))
    Else
        FHex.RutaArchivo = valor
        RaiseEvent Mensaje("Fichero de envio = " & CStr(FHex.TArchivo) & " bytes")
    End If
End Function
'
' Llaman a la puerta :)
'
Private Sub WS_ConnectionRequest(ByVal requestID As Long)
    If WS.State = 2 Then    ' como esta escuchando
        WS.Close            ' se tiene que cerrar
        WS.Accept requestID ' para aceptar la nueva conexion
        RaiseEvent Conexion(True)
        WS.SendData "ESPERANDODATOS" & vbCrLf ' Enviamos al cliente un mensaje
    End If                                    ' diciendo que estamos listos
End Sub
'
' La conexion se pierde
'
Private Sub WS_Close()
    WS.Close
    If esServidor Then
        RaiseEvent Mensaje("Conexion finalizada")
        FHex.RutaArchivo = iFichero
        If TamañoArchivoS <> FHex.TArchivo Then
            RaiseEvent Mensaje("El archivo esta incompleto.")
        End If
        WS.Listen
    Else
        RaiseEvent Conexion(False)
    End If
End Sub
'
' Conectar
'
Public Function Conectar()
    On Error GoTo Errores
    WS.Close
    Cancelar = False
    If esServidor Then      ' Segun trabaje como servidor o cliente, establecemos
        WS.LocalPort = Port ' unos parametros u otros
        WS.Listen
        RaiseEvent Conexion(True)
    Else
        WS.RemoteHost = IP
        WS.RemotePort = Port
        WS.Connect
    End If
Errores:
    If Err.Number <> 0 Then RaiseEvent Error(Err.Number, Err.Description)
End Function
'
' Desconectar
'
Public Function Desconectar()
    WS.Close                        ' Para desconectar manualmente
    RaiseEvent Conexion(False)      ' lo normal es usarlo al trabajar
If esServidor Then                  ' en modo servidor
    RaiseEvent Conexion(False)
End If
End Function
'
' Recibir Datos
'
Private Sub WS_DataArrival(ByVal bytesTotal As Long)
    Dim Datos As String, bucle As Integer, Comandos() As String, SubComando() As String
    Dim CadenaEnviar As String
    WS.GetData Datos, vbString
    Comandos = Split(Datos, vbCrLf)
   
    For bucle = 1 To UBound(Comandos())
        SubComando = Split(Comandos(bucle - 1), "=")
        Select Case esServidor
            Case True ' ES SERVIDOR
                Select Case SubComando(0)
                    Case "FICHERO"
                            RutaFichero SubComando(1)
                            TamañoArchivoS = SubComando(2)
                            RaiseEvent RecibiendoDatos(iFichero, TamañoArchivoS)
                            WS.SendData "EMPEZAR=" & CStr(FHex.TArchivo \ 8) & vbCrLf ' manda el bloque
                            'donde debe empezar a transmitir
                    Case Else
                        RaiseEvent Progreso(CInt(CLng((SubComando(0)) * 100) / TamañoArchivoS))
                        If Not FHex.Fichero(CLng(SubComando(0)), SubComando(1)) Then
                            RaiseEvent Completado
                        End If
                End Select
                   
            Case False ' NO ES SERVIDOR
                Select Case SubComando(0)
                    Case "ESPERANDODATOS"
                        RaiseEvent Conexion(True)
                        WS.SendData "FICHERO=" & FHex.RutaArchivo & "=" & FHex.TArchivo & vbCrLf
                    Case "EMPEZAR"
                        FPuntero = CLng(SubComando(1)) * 8 ' pone el puntero donde va a empezar
                        Do While FHex.Fichero(FPuntero, CadenaEnviar)
                            If WS.State <> 7 Then Cancelar = True: Exit Do
                            WS.SendData CStr(FPuntero) & "=" & CadenaEnviar & vbCrLf
                            FPuntero = FPuntero + 8
                            RaiseEvent Progreso(CInt((FPuntero * 100) / FHex.TArchivo))
                            If Cancelar Then Exit Do
                            DoEvents
                        Loop
                        If Not Cancelar Then
                            WS.SendData CStr(FPuntero) & "=" & CadenaEnviar & vbCrLf
                            RaiseEvent Completado
                        Else
                            RaiseEvent Mensaje("Cancelado por el usuario")
                            WS.Close
                            RaiseEvent Conexion(False)
                        End If
                End Select
        End Select
    Next
End Sub


5  Programación / Programación Visual Basic / Re: Participas? en: 17 Mayo 2005, 11:21 am
Vale!, ya veo que preferis un desensamblador a un programita para comparar estados de la memoria y hacer cambios. Pero os hago otra pregunta, yo normalmente uso el IDA PRO, y me gustaria hacer lo que va a acabar haciendo este programita y es lo siguiente:

- Buscar un valor en la memoria
- Compararlo con un estado anterior para filtrar
- Los nuevos resultados cambiarlos todos automaticamente por otro valor.

- Por ejemplo, ya he echo pruebas y mediante mi programa, podría cambiar valores de variables y captions de menus y botones. Si se puede hacer con IDA, como se hace? sin modificar permanentemente, solo modificando la memoria del proceso.

Gracias

P.D. Yo voy preguntando con la esperanza de algun dia encontrar una respuesta.  ::)
6  Programación / Programación Visual Basic / Participas? en: 13 Mayo 2005, 09:27 am
Proyecto

Hola amigos, hace poco descargue una herramienta llamada TSearch, es una herramienta para buscar valores dentro de la memoria de un proceso y congelarlos o cambiarlos a gusto, ideal para hacer Trainers para juegos o lo que haga falta. Al probarlo me gusto bastante y descubri que le faltaban algunas cosas:

- Comparar dos estados del proceso (Antes y despues).
- Descartar los valores que no se han alterado o solo los que se hayan alterado
- Buscar cadenas alfanumericas.
- y otras cosas que tengo en mente.

Total que como me gusto la idea, pense en hacerme yo mismo un programa que hiciese lo mismo pero planteado desde otro punto de vista. Incluso me gustaria llegar a monitorizar las transmisiones que efectue el proceso (para los juegos online). Al que le sobre imagianción seguramente ya haya pensado que esto podria servir para muchas mas cosas.

Ahora, tengo el tema bastante verde, aunque ya funcionan varias cosas, en principio pense programarlo solo para mi, puesto que asi es mucho mas sencillo y no hace falta que el programa siga unos estandars. Pero ahora me planteo que podria ser una herramienta util para esta comunidad y compartiendola con vosotros tambien podria aprender mucho más y programarla mucho mejor. El problema es que me falta tiempo y ando escaso de fe en todo este tema. Me gustaria saber si hay gente que este dispuesta a seguir el curso de todo el desarrollo de este proyecto, aportando ideas para implementar, ayudandome a recopilar informacion y probando el software. La idea es que seguramente todos habeis probado mas programas de este tipo que yo, y juntando todo lo mejor de estos programas, podriamos tener una nueva herramienta a medida. Los que quieran participar me podeis contestar a este post y decirme que os parece. Aqui nos podemos organizar y yo hare una pequeña documentacion de lo que va haciendo el programa y de los bugs o cambios que vaya arreglando. En principio como esta el tema verde es ideal para aportar todo lo que querais, siempre y cuando no sean burradas y esten dentro de mis posibilidades :) .

P.D. Saludos a todos!!
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines