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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17
61  Programación / Scripting / Re: [Batch] Función año bisiesto de 3 líneas. en: 5 Mayo 2009, 16:33 pm
He actualizado el código levemente, he añadido la palabra disabledelayedexpasion, ya que cuando se llamaba a la función con la expansión retardada activada se producía un error que decía: Sobran o faltan paréntesis.
Cuando se hacía esto:
Código:
setlocal enabledelayedexpansion
call :esBisiesto 2009
rem se producía el error.
rem ahora ha sido corregido.
62  Programación / Scripting / Re: [Batch] Función año bisiesto de 3 líneas. en: 5 Mayo 2009, 16:00 pm
Supongo que también funcionaría:

Código:
:esBisiesto
setlocal enableextensions
set /a "etc=%~1/4*4"
if "%~1" equ "%etc%" (exit /b 1) else (exit /b 0)

Nada que ver, el algoritmo de año bisiesto no dice solamente que sea divisible por 4, por ejemplo: 1900 no es año bisiesto, ya que es divisible por 100 pero no por 400.
63  Programación / Scripting / Re: Vulnerabilidades en programas BATCH en: 5 Mayo 2009, 05:58 am
Sirdarckcat, creo que por fin el tema de las batch injections es cosa del pasado:

Aquí la versión 2.0 de la función clean.
http://foro.elhacker.net/scripting/batch_funcion_clean_20-t254050.0.html

Nota: Disculparme por favor por responder un tema con más de 60 días sin respuestas.
64  Programación / Scripting / [Batch] Función Clean 2.0 en: 5 Mayo 2009, 05:50 am
Con Matt actualizamos la función clean que había realizado yo la otra vez, y ahora ha quedado mucho mejor.

Funcionalidad:
-Limpiar carácteres que no estén dentro del rango [0-9] [a-z] [Espacio] en el contenido de las variables.

Mejoras con respecto a la versión anterior:

-Funciona con las extensiones de comando deshabilitadas. (cmd.exe /e:off)

-Ya no es necesario hacer, if defined variable call :clean variable.

-Toda esta función ha sido respuesta al artículo de sirdarckcat: Vulnerabilidades en programas BATCH (buscarlo en google).

código de la función.
Código:
:CLEAN
::deja solo caracteres dentro del rango a-z 0-9 y espacio en el contenido de las variables.
::version 2.0
::Recibe un parametro con el nombre de la variable que se quiere filtrar su contenido.
::Ejemplo:
::call :clean nombreDeMiVariable
::autores: Matt Alvariz , Carlos
@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@SET "V=%*"
@SET "S=!%V%!"
@IF NOT DEFINED S EXIT /B 1
@SET "V="
:LOOP
@FOR %%* IN (
" " 0 1 2 3 4 5 6 7 8 9 A B C D E F G
H I J K L M N O P Q R S T U V W X Y Z
) DO @IF /I "!S:~0,1!" EQU "%%~*" SET "V=!V!!S:~0,1!"
@SET "S=!S:~1!"
@IF DEFINED S GOTO :LOOP
@(ENDLOCAL & SET %*=%V%)
@SETLOCAL ENABLEEXTENSIONS
@EXIT /B 0

Ejemplo en acción:
login.cmd
Código:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

SET /A "I=3"
SET "PWL=ByeWorld"
SET "P=PWL"

:START
@ECHO OFF
CLS
echo.*===============================================================
echo.Bienvenido a Telnet Server de Microsoft.
echo.*===============================================================
IF !I! LEQ 0 EXIT
SET /A "I-=1"
SET "INPUT="
SET /P "INPUT=Password:"
CALL :CLEAN INPUT
@FOR /F %%_ IN ("!P!") DO @IF NOT "!INPUT!"=="!%%_!" (
GOTO :START
)

ECHO.BIENVENIDO.
PAUSE
EXIT /B


:CLEAN
::deja solo caracteres dentro del rango a-z 0-9 y espacio en el contenido de las variables.
::version 2.0
::Recibe un parametro con el nombre de la variable que se quiere filtrar su contenido
::autores: Matt Alvariz , Carlos
@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@SET "V=%*"
@SET "S=!%V%!"
@IF NOT DEFINED S EXIT /B 1
@SET "V="
:LOOP
@FOR %%* IN (
" " 0 1 2 3 4 5 6 7 8 9 A B C D E F G
H I J K L M N O P Q R S T U V W X Y Z
) DO @IF /I "!S:~0,1!" EQU "%%~*" SET "V=!V!!S:~0,1!"
@SET "S=!S:~1!"
@IF DEFINED S GOTO :LOOP
@(ENDLOCAL & SET %*=%V%)
@SETLOCAL ENABLEEXTENSIONS
@EXIT /B 0

65  Programación / Scripting / [Batch] Función año bisiesto de 3 líneas. en: 5 Mayo 2009, 04:02 am
La otra vez había hecho una función para saber si un año es bisiesto o no, y tenía muchas líneas. Ahora la he escrito en menos.

Código:
@echo off

call :esBisiesto 2008
echo.2008 : bisiesto : %errorlevel%
call :esBisiesto 2000
echo.2000 : bisiesto : %errorlevel%
call :esBisiesto 1900
echo.1999 : bisiesto : %errorlevel%
pause
goto :eof

:esBisiesto
::Funcion para saber si un anyo es bisiesto o no
::Autor: Carlos
::Devuelve 1 si es bisiesto y 0 si no lo es.
::Recibe un argumento con el anyo.
::Ejemplo: call :esBisiesto 2008
::Ejemplo: call :esBisiesto 2000
::Ejemplo: call :esBisiesto 1900
::Para ver el retorno deben expandir errorlevel
@setlocal enableextensions disabledelayedexpansion
@set /a b="(!(%~1%%4)&!!(%~1%%100))|!(%~1%%400)"
@exit /b %b%
66  Programación / Scripting / Re: Juego Ahorcado v.1.1 [Bash] en: 4 Mayo 2009, 18:16 pm
Está bueno Leo, yo no conozco bash, pero lo del "monito" se me ocurriría hacerlo así:

Que no pidas cuántos intentos hacer, sino que definas una cantidad que no cambie, ejemplo 10.

y que tengas 3 arreglos así:

Código:
parteUno[0]=   O

parteDos[0]=  |
parteDos[1]= -|
parteDos[2]= -|-
parteDos[3]=o-|-
parteDos[4]=o-|-o

parteTres[0]=  /
parteTres[1]=  /\
parteTres[2]= _/\
parteTres[3]= _/\_

y declaras 3 variables:
así:
int indiceParteUno=0;
int indiceParteDos=4;
int indiceParteTres=3;

Entonces haces:
formato java:

/* mostrar el monito completo por primera vez */
 System.out.println(parteUno[indiceParteUno]);
 System.out.println(parteDos[indiceParteDos]);
 System.out.println(parteTres[indiceParteTres]);

/*pregunta por letra */

if (laLetraNoExiste)
{
     if (indiceParteTres >=0)
     {
         --indiceParteTres;
     }
     else if (indiceParteDos >=0)
     {
         --indiceParteDos;
      }
     else if (indiceParteUno >=0)
     {
         --indiceParteUno;
     }

     /* limpiar la pantalla */
    if (indiceParteUno >=0)
    {
        System.out.println(parteUno[indiceParteUno]);
        if (indiceParteDos >=0)
        {
             System.out.println(parteDos[indiceParteDos]);
             if (indiceParteTres >=0)
             {
                 System.out.println(parteTres[indiceParteTres]);
             }
        }
   }
   else
   {
      /* perdió la cabeza, perdió, hacer algo */
   }
}



67  Programación / Scripting / Re: equivalente de set /a en vista o 7? [Batch] en: 3 Mayo 2009, 06:51 am
Yo uso windows 7 y funciona el set /a

Código:

C:\>ver

Microsoft Windows [Version 6.1.7048]

C:\>set /a 3+3
6
C:\>

68  Programación / Scripting / [Batch] (IF diferencia equ y == ) (SET /A Diferencia entre %v% y v) en: 2 Mayo 2009, 21:44 pm
En SET /A dentro de una expresión pueden utilizarse los nombres de variables sin los % % a cada costado.

Ejemplo:

Código:
set cincuenta=50
set /a numero1=cincuenta
set /a numero2=%cincuenta%
echo.numero1:%numero1%
echo.numero2:%numero2%
produce:
Código:
numero1:50
numero2:50

En este caso se produce exactamente el mismo resultado. Sin embargo, en determindas situaciones esto puede ser diferente.

ejemplo:
Código:
set n=5
set c=n
set /a n1=c
set /a n2=%c%
echo.n1:%n1%
echo.n2:%n2%
produce:
Código:
n1:0
n2:5
Esto es porque, al presionar enter aquí:
Código:
set /a n2=%c%
cmd expande o reemplaza %c% por: el contenido de c es decir n, por lo que envía:
Código:
set /a n2=n
y n2 queda en 5

En cambio:
Código:
set /a n1=c
produce 0 porque c no contiene un número, o porque no estaba definida.

Esto demuestra que puede ser mejor escribir las variables dentro de set/a con las % al costado.

Aún así, escribir las variables dentro de set/a sin % puede ser útil para lo siguiente:

Código:
set /p numero=ingrese numero:
set /a numero=%numero%
si solo se presiona enter, se hace lo siguiente:
set /a numero=
y se recibe un mensaje de error.
Ahora si se hace:
Código:
set /p numero=ingrese numero:
set /a numero=numero
numero queda en 0 porque numero es una variable no definida, pero si el contenido de la variable numero inicialmente fuera el nombre de una variable que contiene un numero, numero no quedaría en 0 por contener una palabra, y quizás no deseamos eso.

Una óptima solución es:

Código:
(set numero=)
set /p numero=ingrese numero:
if not defined numero set numero=0
set /a numero=%numero%

Escribir las variables sin % también, puede traer un problema, que es que se pierde la notación hexadecimal y octal, es decir:
No se puede hacer:
Código:
set n=3
set /a numero1=0xn
set /a numero2=0n
pero si:
Código:
set n=3
set /a numero1=0x%n%
set /a numero2=0%n%

Algo útil que se pierde también con perder la notación hexadecimal y octal es una solución para el típico problema de asignar 08 o 09 a un set /a , que no se puede porque en notación octal no existe el 8 ni el 9, y que consiste en hacer lo siguiente:

Anteponer 0x.
08 no es un número válido
09 no es un número válido
Así:
0x08 es un número válido
0x09 es un número válido
Código:
set ocho=08
set n=0x%ocho%
Pero como esto no funcionaría así:
Código:
set ocho=08
set /a n=0xocho

Puede hacerse lo siguiente:

Código:
set ocho=08
set nueve=09
if %ocho% equ 8 set ocho=8
if %nueve% equ 9 set nueve=9
y luego:
Código:
set /a n=ocho
Lo que hacemos con el comando if es dejar el número en notación decimal.
Nota: debe ser con la variable no encerrada entre comillas y con equ. No es lo mismo == que equ, pues == compara cadenas, es equivalente a equ con comillas.
Para comparar números debe hacerse como lo mostré, de lo contrario se toma como cadenas.
Demostración:
Código:
@echo off

set n=5

if %n%==5 echo 1
if %n%==05 echo 2
if %n%==0x5 echo 3

if "%n%"=="5" echo 4
if "%n%"=="05" echo 5
if "%n%"=="0x5" echo 6

if /i "%n%"=="5" echo 7
if /i "%n%"=="05" echo 8
if /i "%n%"=="0x5" echo 9

if %n% equ 5 echo 10
if %n% equ 05 echo 11
if %n% equ 0x5 echo 12

if "%n%" equ "5" echo 13
if "%n%" equ "05" echo 14
if "%n%" equ "0x5" echo 15

if /i "%n%" equ "5" echo 16
if /i "%n%" equ "05" echo 17
if /i "%n%" equ "0x5" echo 18

pause

La única salida que demuestra una comparación númerica son la de las opciones 10,11,12, el resto son comparaciones de cadenas.

Nota: pareciera que con la opción /i se logra comparación númerica aún encerrando la variable y su comparación entre comillas, pero lo único que hace es no considerar los ceros iniciales.

Para usar equ se deben tener las extensiones de comando habilitadas.

Escrito por Carlos.
69  Programación / Scripting / Re: (Batch) Es Posible hacer password char en batch? (Pregunta) en: 29 Abril 2009, 21:12 pm
el código de timo pienso que tiene un problema, que es cuando presionas backspace.

Por ejemplo:
si escribes en la primera password:
qbasic
y en la segunda escribes:
qbasic[backspace,borramos la c]c
dice que no concuerdan.

70  Programación / Scripting / Re: (Batch) Es Posible hacer password char en batch? (Pregunta) en: 29 Abril 2009, 18:53 pm
Conozco otra forma de hacerlo también en batch, que es usando batch, debug, ansi.sys, command.com, aunque no lo he probado, pero pienso que debe funcionar. Si a alguien le interesa lo posteo, sino no.



Post it please!

Aquí está el código:
http://foro.elhacker.net/scripting/batchfuncion_password-t253336.0.html

Ese no muestra asteriscos, es igual al que posteo NovLucker...
solo no muestra lo que escribes..
SaluDOS!!!
Unix like.
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines