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 - soplo

#21
Criptografía / Re: Esteganografia
12 Octubre 2010, 04:32 AM
Hola

Andar tocando el bit menos significativo es un método válido para incrustar algo en una imagen, pero no es el único.

Pongamos un ejemplo: quiero insertar un texto en un PNG y que no se note.

Una forma de hacerlo es efectivamente buscar la estructura del archivo PNG para encontrar donde están los bits menos significativos. Para averiguar eso me voy a la RFC que define el formato

RFC 2083
http://www.rfc-editor.org/rfc/rfc2083.txt

Y efectivamente curioseando por allí encuentro donde están y como acceder a esos datos, pero me encuentro con algo que no esperaba. Resulta que el formato PNG tiene una cabecera con un formato específico y luego unas secciones. Esas secciones contienen diversos datos, pero lo curioso es que para que los distintos programas puedan ampliar capacidades (y por capacidades futuras del formato PNG) se pueden agregar secciones a voluntad que serán ignoradas por los programas gráficos pero que pueden contener bloques de hasta 64k y puedes usar cuantos bloques quieras.

Así que todo el problema consiste en ver como se hace una sección y escribir en ella lo que me de la santa gana.

En la RFC pone que una sección se compone de así:
4 bytes para longitud de datos
4 bytes para su nombre
los datos (aquí meteré mi texto)
4 bytes para el crc

El nombre de una sección (4 letras) debe cumplir las siguientes reglas
1ª letra ---> Si es mayúscula el bloque es CRITICO. En mi caso no, es un bloque opcional osea que mi nombre empezará por minúscula
2ª letra ---> Si es mayúscula el bloque es PUBLICO (descrito en la rfc). En mi caso no. Es un bloque privado así que la segunda letra será minúscula.
3ª letra ---> Es un valor reservado para el futuro. Actualmente debe ser siempre mayúscula
4ª letra ----> Si es mayúscula un editor de png que grabe este código guardará también este bloque. Si no lo es no lo guardará. En mi caso prefiero que si la imagen la pilla alguien con un editor de png y comete el error de guardar el bloque se pierda así que usaré un nombre con mayúscula.

Así que me invento un nombre que cumpla esas condiciones por ejemplo "abCD"

Así que primero grabo en los primeros cuatro bytes la longitud de lo que quiero escribir, luego el nombre que le daré a la sección "abCD", luego lo que quiero escribir (que podría tener algún tipo de cifrado obviamente) y luego el CRC-32 que utiliza PNG y que ocupa 4 bytes.

La forma de hacerlo por tanto es leer la imagen. Primero el bloque cabecera, luego el bloque IHDR, grabar mi sección y luego continuar leyendo y grabando secuencialmente el PNG.

Hay que tener cuidado que PNG utiliza bigendian.

Como veis es mas dificil de explicar que de hacer porque en realidad lo único que haces es leer un determinado número de bits (cabecera y bloque IHDR), luego escribir tu bloque y luego escribir secuencialmente todo el PNG original para que tu bloque quede debidamente insertado donde tu quieras. Lo único "dificil" es crear un string que tenga 4 bytes con la longitud del mensaje, 4 bytes con el nombre, los datos que quieras y 4 bytes con su crc.

Para leerlo solo hay que buscar el nombre de su sección. Los cuatro bytes anteriores son la longitud del mensaje.

Para quien tenga interes en saber como funciona eso del CRC también le puedo explicar. Todo se reduce a una división polinómica en módulo dos (que también suena a algo terrible pero es una chorrada). Hay diversos CRC según el uso que se va a dar.

¡Cuanto tiempo que no venía yo por aquí!
;D
#22
Caray. Si resulta que este hilo está vivo y todo. Yo creo que lo escribí hace como seis años o asi!!!!!!!

Tcp/Ip sigue siendo lo mismo, pero muuuchas cosas han cambiado desde entonces y también yo he aprendido algunas cosillas mas je je je. Supongo que a la gente le sigue sirviendo igual porque al final lo que se hace ahí es jugar con direccionamientos IP.

En fin, un saludo

;D
#23
Hola
Gambas funciona con todos los linux en todos los casos. En debian sid y ubuntu está en la 2.19 en los respositorios del sistema operativo aunque te puedes descargar de los respositorios gambas la 2.99 si quieres. En lenny está en la 2.7.

Toda la gente que conozco que estaba en VB y le gustaba que se decidió a probar gambas está muy contenta. Hay que aprender un poco, pero la transición es fácil porque es parecido. Quizá la mayor diferencia es que funciona en linux y por ejemplo ni hay apis ni falta que hacen porque el lenguaje tiene en sí mismo recursos para hacer todo lo que necesites a alto o bajo nivel sin necesidad de meterte en algo tan áspero, antipático e ilegible como una api.
#24
Hola
La verdad es que gambas es el mejor lenguaje para los que conozcan VB y quieran seguir en ese lenguaje, pero tiene muchas diferencias (a mejor) que lo hacen mucho mas potente. He cogido un cierto cariño al lenguaje porque se hacen muchas cosas muy bien y la transición desde VB no me ha sido dificil pero como en todo siempre hay alguna cosa y aquí también.

Estoy en otro sitio (que no diré para que no piensen los mal pensados que he venido a hacer spam) y veo que muchos de los que vienen son gente que venía de VB y están encantados. Esto lo digo como información no por otra cosa. El resto es gente que quiere programar en entornos linux con un lenguaje visual.

Os pondré algunos ejemplos que se hacen con gambas con toda facilidad:
1. Aplicaciones gráficas con todo tipo de controles tipo vb (algunos mucho mas potentes).
2. Scripts de consola (interpretados) donde se puede realizar todo lo que se quiera. Puedes hacer sockets o manejar bases de datos, cambiar cosas, ..., etc.
3. Crear páginas web tipo ASP o PHP con toda facilidad. Son páginas con HTML y código gambas embebido al modo de php por ejemplo.
4. Clases para trabajar directamente con XML por ejemplo.

Realmente es un buen lenguaje y me ofrezco para iniciar a quien quiera. A los que nos gusta la programación realmente hacer tantas cosas tan bien y can tan poco problema la verdad es que es un gustazo.

No he venido a hacer spam. He venido a animar a la gente que le gusta VB que no se de por vencida. Hay un sucesor para VB que es excelente sin necesidad de meterse en .NET que digan lo que digan es otra cosa. No mejor que gambas ni tampoco peor pero otra cosa bien distinta.

Si alguno tiene interes y no quiere abandonar windows le explico como montar virtualbox e instalar allí un linux de prueba para ver que la cosa no muerde y que no se arrepiente nadie.

¡Viva el software libre!
;D
#25
CitarEres un administrador de una red, la cual tienes q abandonar por despido, y tienes que dejarle al futuro administrador un manual con los fallos que puede encontrarse en la red y como solucionarlo cada uno de los posibles  fallos (fallos de protocolos, hardware, cableado, dispositivos de conexión, servidor,...)
Nadie deja nada nunca. Si vieras en que estado dejaron la red cuando la cogí ni te lo crees. El tio hizo lo que le dió la gana y con tal que funcionara le funcione, pero cuando llegué yo tenía que andar con cuidado porque cada pequeña cosa daba problemas.

Los únicos que si dejan información son las consultoras porque ni les va ni les viene, vienen, hacen lo que se les pide, lo dejan documentado y se van.

Los demás ni pio.
#26
Pues suponiendo que tengas una colección de Winsocks manteniendo conexiones distintas harás

sub form1_load
for x%=0 to Winsocks.count-1
list1.additem "IP:" & winsock(x%).RemoteHost  & " Puerto: " & Winsock(x%).RemotePort & "\" & iif(Winsock(x%).Protocol=0,"TCP","UDP")
next x%
end sub


#27
CitarPero donde coloco el:

shell "netstat >Salida.Txt",vbhide
Pues donde quieras ejecutar el netstat. Eso lo que hace es ejecutarlo sin mostrar nada, pero deja el resultado en un archivo llamado salida.txt

Cuando quieres mostrar eso lo que haces es sacar el block de notas con ello.
#28
Acabo de ver que eso tampoco vale porque también se cierra.

Supongo que debes guardar el resultado en un archivo y conservar el archivo

Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


Ahora ejecutar el netstat sabiendo que se cerrará, pero guardando el resultado en un archivo

[code]shell "netstat >Salida.Txt",vbhide

Meter el resultado en el block de notas
sub command1_click()
dim res as long
res = ShellExecute(Me.hwnd, "Open", "salida.txt","", "", 1)
end sub
[/code]
#29
Primero declaramos la función en declaraciones
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


Ahora cuando necesites en ese formulario ejecutas
sub command1_click()
dim res as long
res = ShellExecute(Me.hwnd, "Open", "c:\windows\system32\netstat.exe","", "", 1)
end sub

#30
A ver

sub Main()
Dim Sw as boolean
Sw=ObtenerResultado()
if sw then
   label1="obtuviste un true"
else
   label1="obtuviste un false"
endif
end sub


Function ObtenerResultado()
' aquí hacer el cálculo que sea
El resultado dejarlo en ObtenerResultado
ObtenerResultado=ValorObtenido
end function