|
Mostrar Temas
|
Páginas: [1]
|
1
|
Programación / Scripting / Desafio, eres capaz de sacar la contraseña? [BATCH]
|
en: 16 Junio 2007, 22:42 pm
|
Este code fue hecho por poder negro para un reto en la sección de batch de portalhacker.net, la pass la consegui sacar en unos 20 minutos, pero hace falta pensar. Os atreveis?, las batch injections estan evitadas... Quien lo solucione que me mande la pass por MP para que los demas no la sepan, lo agregare a la lista de personas que lo resolvieron. Personas que lo han resuelto:- Sirdarkcat- It@c|-|i- nhaalclkiemr - -[black_hack]-- blend5 :bucle1 if %reg1%== %var3% (set /a cod= %pass:~0,4%/38 %var4%&& goto sig1 ) if %reg1%== %var5% (set /a cod= %pass:~0,4%/575 && goto sig1 ) if %reg1%== %var4% (set /a cod= %pass:~0,4%/9 %var4%&& goto sig1 ) if %reg1%==4 (set /a cod= %pass:~0,4%/90 && goto sig1 ) if %reg1%==5 (set /a cod= %pass:~0,4%/2 %var3%5 && goto sig1 ) if %reg1%==6 (set /a cod= %pass:~0,4%/8 %var1%&& goto sig1 ) if %reg1%==7 (set /a cod= %pass:~0,4%/ %var3%8 %var3%&& goto sig1 ) if %reg1%==8 (set /a cod= %pass:~0,4%/ %var3%81 && goto sig1 ) if %reg1%==9 (set /a cod= %pass:~0,4%/90 && goto sig1 ) if %reg1%== %var3%0 (set /a cod= %pass:~0,4%/88 && goto sig1 ) if %reg1%==1 %var3% (set /a cod= %pass:~0,4%/88 && goto sig1 ) if %reg1%==12 (set /a cod= %pass:~0,4%/ %var3%18 && goto sig1 ) if %reg1%==1 %var4% (set /a cod= %pass:~0,4%/1 %var3%5 && goto sig1 ) if %reg1%==14 (set /a cod= %pass:~0,4%/111 && goto sig1 ) if %reg1%==15 (set /a cod= %pass:~0,4%/95 && goto sig1 ) if %reg1%== %var3%6 (set /a cod= %pass:~0,4%/8 %var1%&& goto sig1 ) if %reg1%==17 (set /a cod= %pass:~0,4%/8 %var2%&& goto sig1 ) if %reg1%== %var3%8 (set /a cod= %pass:~0,4%/8 %var1%&& goto sig1 ) if %reg1%== %var3%9 (set /a cod= %pass:~0,4%/1 %var3%50 && goto sig1 ) if %reg1%==20 (set /a cod= %pass:~0,4%/2 %var4%0 && goto sig1 ) if %reg1%==2 %var3% (set /a cod= %pass:~0,4%/9 %var4%&& goto sig1 ) if %reg1%==22 (set /a cod= %pass:~0,4%/ %var1%90 && goto sig1 ) if %reg1%==23 (set /a cod= %pass:~0,4%/ %var3%150 && goto sig1 ) if %reg1%==24 (set /a cod= %pass:~0,4%/ %var2%31 && goto sig1 ) if %reg1%==25 (set /a cod= %pass:~0,4%/230 && goto sig1 ) if %reg1%==26 (set /a cod= %pass:~0,4%/93 && goto sig1 ) if %reg1%==27 (set /a cod= %pass:~0,4%/18 %var3%&& goto sig1 ) if %reg1%==28 (set /a cod= %pass:~0,4%/ %var4%83 && goto sig1 ) if %reg1%==29 (set /a cod= %pass:~0,4%/93 && goto sig1 ) if %reg1%==30 (set /a cod= %pass:~0,4%/15 %var1%&& goto sig1 ) if %reg1%==3 %var3% (set /a cod= %pass:~0,4%/ %var1%90 && goto sig1 ) if %reg1%==32 (set /a cod= %pass:~0,4%/ %var3%81 && goto sig1 ) if %reg1%== %var4%3 (set /a cod= %pass:~0,4%/9 %var4%&& goto sig1 ) if %reg1%==34 (set /a cod= %pass:~0,4%/ %var1%90 && goto sig1 ) if %reg1%==35 (set /a cod= %pass:~0,4%/18 %var3%&& goto sig1 ) if %reg1%==36 (set /a cod= %pass:~0,4%/172 && goto sig1 ) if %reg1%== %var4%7 (set /a cod= %pass:~0,4%/230 && goto sig1 ) if %reg1%==38 (set /a cod= %pass:~0,4%/9 %var4%&& goto sig1 ) if %reg1%==39 (set /a cod= %pass:~0,4%/ %var1%90 && goto sig1 ) if %reg1%==40 (set /a cod= %pass:~0,4%/ %var3%91 && goto sig1 ) if %reg1%==4 %var3% (set /a cod= %pass:~0,4%/ %var1%90 && goto sig1 ) if %reg1%==42 (set /a cod= %pass:~0,4%/ %var3%81 && goto sig1 ) if %reg1%==4 %var4% (set /a cod= %pass:~0,4%/93 && goto sig1 ) if %reg1%==44 (set /a cod= %pass:~0,4%/8 %var1%2 && goto sig1 ) if %reg1%==45 (set /a cod= %pass:~0,4%/ %var4%83 && goto sig1 ) if %reg1%==46 (set /a cod= %pass:~0,4%/2 %var4%0 && goto sig1 ) if %reg1%==47 (set /a cod= %pass:~0,4%/18 %var3%&& goto sig1 ) :sig1 set var27= %var13%%var11%%var16% %var18%%var21%%var19%%var22%%var23%%var26%%var25%%var12% set var24= %var11%%var17%%var14%%var12% :sig2 %var27%
|
|
|
2
|
Programación / Scripting / Mini-manual sobre las variables de expansion
|
en: 26 Mayo 2007, 22:02 pm
|
Usando las variables de expansión Sustitución de caracteres:
Para sustituir uno o varios caracteres de una variable por otro hacemos lo siguiente: SET VariableResultado=%VariableOriginal:string1=string2% La VariableResultado y la VariableOriginal pueden ser las mismas o no, lo meremos mejor mas adelante en los ejemplos. string1 es el caracter o los caracteres que vamos a sustituir y logicamente string2 es el caracter o los caracteres por los que van a ser sustituidos. SI no ponemos el string2, strin1 se sustituira por nada, es decir, desaparacera. Ejemplos: SET VAR=hijo SET RESULTADO=%VAR:o=a% ECHO %RESULTADO%
Mostrara por pantalla "hija" El siguiente codigo también haria lo mismo: SET VAR=hijo SET VAR=%VAR:o=a% ECHO %VAR%
Ahora unos cuantos os preguntareis por que usamos el simbolo de porcentaje, "%", eso es por que le estas dando a una variable el valor de otra (modificado, claro esta) Mirar este code: SET /P PALABRA= IF [%PALABRA%]==[] ECHO No has puesto nada !&pause&exit SET PALABRA=%PALABRA:a=!% SET PALABRA=%PALABRA:b="% SET PALABRA=%PALABRA:c=·% ....... ....... ECHO %PALABRA%
De esta forma tendríamos un cifrador en batch, y haciendolo al reves un descifrador. Recordar que strin1 y strin2 pueden ser varios carácteres tambien. SET VAR=hola SET VAR=%VAR:a=aa% SET VAR=%VAR:h=hh% SET VAR=%VAR:o=oo% SET VAR=%VAR:l=ll% ECHO %VAR%
Mostraría "hhoollaa" Extracción de carácteres:Bien esta es una parte muy interesante, nos permita obtener "trozos" de variables llamados subcadenas, existen varias formas para ello, siendo la principal: SET VariableResultado=%VariableOriginal:~m,n%
Almacena en la VariableResultado la subcadena que existen en la VariableOriginal desde la posición "m" durante "n" carácteres. Ejemplo: SET VAR=123456789 SET RES=%VAR:~3,2% ECHO %RES%
Mostraria por pantalla: 45 (los dos caracteres a partir del tercero) Como en la sustitución de carácteres, la VariableResultado y la VariableOriginal pueden ser las mismas. Si "m" o "n" son iguales a 0 pueden omitirse, por ejemplo: SET VAR=123456789 SET RES1=%VAR:~,5% SET RES2=%VAR:~0,5% IF %RES1%==%RES2% ECHO Funciona ECHO %RES1%=%RES2%
Mostraria por pantalla, "Funciona" y despues: 12345=12345 Lo mismo con el siguiente code: SET VAR=123456789 :: Lo siguiente significa extraer a partir del caracter 5º hasta el final SET RES1=%VAR:~5% SET RES2=%VAR:~5,4% IF %RES1%==%RES2% ECHO Funciona ECHO %RES1%=%RES2%
Mostraria primero por pantalla "Funciona" y despues: 6789=6789 Estos metodos abreviados son utiles para cuando no conocemos el numero de caracteres de la variable, sobre todo el 2º, ya que si queremos extraer los 3 ultimos caracteres pero no sabemos a partir del cual seria eso no lo podriamos hacer. Ejemplos bastante usados: SET DIA=%DATE:~,2% SET MES=%DATE:~3,2% SET AÑO=%DATE:~6% Lo mismo para sacar las horas, minutos y segundos de la variable %TIME%, etc...
|
|
|
3
|
Programación / Scripting / Tipos de controladores de salida (Batch)
|
en: 26 Mayo 2007, 00:53 am
|
el 1 es para declarar el controlador de salida.. batch lo interpreta como el primer handle, (STDOUT), si le pusieras un 2.. lo tomaria como STDERR.. asi que no te preocupes.. todo funciona bien el 1 no debe modificar en nada la ejecución de > y >> Saludos!! Tras ver esa respuesta de Sdc busqué informacion pero no encontre nada.. alguien sabe algo acerca de esto?, o sabe algun link de un manual? o me puede explicar algo? Mientras sigo buscando.
|
|
|
4
|
Programación / Ejercicios / Ejercicio BATCH
|
en: 1 Mayo 2007, 16:21 pm
|
Lo que hay que hacer es lo siguiente:
Crear un script en batch que busque en todos los archivos por lotes del sistema los comandos que estaran almacenados en un archivo que le sirva de basen de datos.
Si encuentra mas de 2 coincidencias advertira de la existencia del archivo por lotes.
Si encuentra 3 lo renombrara a .txt manteniendolo en su ruta original.
Si encuentra 4 lo copia a una carpeta de cuarentena y borra el original.
Si encuentra 5 lo borrar ya directamente...
Os advierto de que el script no debe eliminarse a si mismo.
Si ya haceis la crêm de la crêm os la teneis que idearos para que cada vez que encuentra un archivo por lotes que supera 1 unico comando encontrado preguntar si lo agregais a la lista de excepciones, si este esta agregado ya , en futuros scanneos no se debe volver a preguntar si se agrega o no.
Todo esto yo ya lo consegui, asi que si que es posible usando unicamente batch, no debe mezclarse con ningun otro tipo de lenguaje de scripting, no esta permitido el uso del comando debug.
Si os poneis a hacerlo y os lleva tiempo ponerlo aqui para que sepa que por lo menos alguien lo hace.
Las soluciones mandarmelas por MP, si vuestro code cumple las condiciones anteriores pondre aqui vuestro nombre.
PD: Si no veis como hacerlo mirar por el foro de scripting, sobre todo una recompilación de scripts que hay y el manual de Sdc
|
|
|
5
|
Programación / Scripting / Librería de funciones y scripts BATCH Actualizado 26/05/07
|
en: 27 Abril 2007, 14:19 pm
|
Bien siempre tuve esta idea de ir recompilando algunos scripts buenos que veia, no solo mios. La mayoria o son funciones o pueden adaptarse para ello. Esta lista se ira actualizando poco a poco... Renombrar un archivo a su fecha de creación: : Sintaxis : nombrebat archivo_a_renombrar : Autor ne0x
@echo off if not exist %1 echo Error ! & goto :EOF set fechaYhora=%~t1 set fecha=%fechaYhora:~0,10% set fecha=%fecha:/=-% ren %1 %fecha%%~x1
Scripts NetBIOSPrimero hace ping's y despues checa NetBIOS: @echo off :: Script de scanner NetBIOS por ne0x set /p ip=3 primeros grupos Ip : if .%ip%==. echo Error&goto END
FOR /L %%a IN (1,1,225) DO ( ping -n 1 %ip%.%%a | find "Respuesta desde" && echo %ip%.%%a >> tmp.tmp ) FOR /F %%a IN (tmp.tmp) DO ( nbtstat -a %%a | find "<20>" ) del tmp.tmp
:END echo Pulse una tecla para salir pause>nul exit 0
Intenta iniciar sesion nula y si lo consigue lo muestra @echo off :: Script de scanner NetBIOS por ne0x set /p ip=3 primeros grupos de la ip : if .%ip%==%ip% exit 1 FOR /L %%i IN (1,1,255) DO net use \\%ip%.%%i\ipc$ "" /u:"" 2>> nul && echo Sesion nula en : %ip%.%%i
Usa una lista de users y pass para conseguir accesos @echo off :: Script de scanner NetBIOS por ne0x set /p ip=Escribe la ip if .%ip%==. exit 1 for /f %%a IN (ruta_logins) DO ( FOR /F %%i IN (ruta_pass) DO net use \\%ip%\ipc$ %%i /u:%%a >nul && echo IP: %ip% login: %%a pass: %%i )
Basados en un antiguo texto del foro de HxC Algoritmos de búsquedasBuscar comandos en todos los archivos por lotes, FOR: :: Autor ne0x echo. > %TMP%\lista.tmp for %%A IN (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 exist %%A:\ ( cd /D %%A:\ for /R %%E IN (*.cmd) DO echo %%E >> %TMP%\lista.tmp for /R %%E IN (*.bat) DO echo %%E >> %TMP%\lista.tmp ) ) for /F %%I IN (lista de comandos) DO ( for /F %%J IN (%TMP%\lista.tmp) DO ( find "%%I" "%%J" > nul if %errorlevel%==0 echo Comando %%I encontrado en %%J ) )
Función Sleep:: Autor ne0x :: Declaración de la función
:sleep :: Sintaxis: :: call:sleep [-s/-m] [x]
:: -s Indicamos los segundos a esperar :: -m Indicamos los milisegundos a esperar :: x Cantidad de segundos/milisegundos a esperar
if %1==-s (set /a tiempo=1+%2 && ping -n %tiempo% 127.0.0.1 > nul ) if %1==-m (ping -n 1 127.0.0.1 -w %2 > nul) goto:EOF
Calcular raices:: Autor Sdc @echo off if NOT "%~1"=="vv" (cmd /v /c %~nx0 vv^&exit&goto:EOF) set /P x=Valor: FOR /L %%i IN (%x%,-2,1) DO ( set /A y=%x%/%%i IF /I !y! EQU %%i ( echo %%i goto:EOF ) )
:: Autor ne0x @echo off set /P x=Valor : :BUCLE set /a cont=cont+1 set /a multi=cont*cont if %multi%==%x% echo Raiz: %cont%&pause&goto:EOF if %multi% GTR %x% echo El valor no tiene raiz entera&pause&goto:EOF goto BUCLE
Calcular potencias:: Autor ne0x @echo off set /P BASE=Base : set /P EXPONENTE=Exponente : if %BASE%.==. exit 1 if %EXPONENTE%.==. exit 1 set resultado=1 FOR /L %%A IN (1,1,%EXPONENTE%) DO set /A resultado=resultado*BASE echo Resultado : %resultado% goto:EOF
Función, saber las lineas de un archivo :: Autor ne0x :: Sintaxis
:: call:lineas [ruta] [variable] :: ruta Ruta del archivo :: variable Nombre de la variable en la que se almacenara el resultado
:lineas set cont=0 if not exist %1 goto:EOF for /F %%A IN (%1) DO call:texto set %2=%cont% goto:EOF
:texto set /a cont=1+cont goto:EOF
Funcion GetOS:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :GetOS os :: :: By: Ritchie Lawrence, 2003-09-18. Version 1.0 :: :: Func: Returns the O/S version; NT40, 2000, 2002 or 2003. :: For NT4/2000/XP/2003. :: :: Args: %1 var to receive O/S version (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set "cmd=net config work^|findstr/b /c:"Soft"" for /f "tokens=1-2 delims=." %%a in ('%cmd%') do ( for %%z in (%%a%%b) do set o=%%z) endlocal & set "%1=%o:40=NT40%" & (goto :EOF) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Funciones de comprobacionesFuncion, averiguar si un servicio esta corriendo: :: Autor ne0x :: Sintaxis:
:: call:svc nombre variable :: nombre Nombre del servicio a chequear :: variable Nombre de la variable en la que se pondra la respuesta en dato boleano
:svc net start | find "%~1" > nul if %errorlevel%==0 ( set %2=0 ) ELSE ( set %2=1 ) goto:EOF
Funcion, averiguar si se ha iniciado un proceso: :: Autor ne0x :: Sintaxis
:: call:pr nombre variable :: nombre Nombre del proceso a chequear :: variable Nombre de la variable en la que se guardara la respuesta en tipo boleano.
:pr taskklist | find "%~1" if %errorlevel%==0 ( set %2=0 ) ELSE ( set %2=1 ) goto:EOF
Funcion TIMER ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :Timer ID :: :: By: Ritchie Lawrence, 2002-10-10. Version 1.0 :: :: Func: Returns number of seconds elapsed since the function was last :: called and first called. For NT4/2000/XP/2003. :: :: Args: %1 (by ref) The first time this function is called, this variable :: is initialised to '<last> <first> <init>' where <last> and <first> :: are zero and <init> is the number of elapsed seconds since :: 1970-01-01 00:00:00. This value is used by subsequent calls to :: determine the elapsed number of seconds since the last call :: (<last>) and the first call (<first>). ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS&call set ID=%%%1%% set t=2&if "%date%z" LSS "A" set t=1 for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do ( for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do ( set %%a=%%d&set %%b=%%e&set %%c=%%f)) for /f "tokens=5-7 delims=:. " %%a in ('echo/^|time') do ( set hh=%%a&set nn=%%b&set ss=%%c) set /a dd=100%dd%%%100,mm=100%mm%%%100 set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 set /a hh=100%hh%%%100,nn=100%nn%%%100,ss=100%ss%%%100 set /a j=j*86400+hh*3600+nn*60+ss for /f "tokens=1-3 delims= " %%a in ('echo/%ID%') do ( set l=%%a&set f=%%b&set c=%%c) if {%c%}=={} endlocal&set %1=0 0 %j%&goto :EOF set /a l=j-c-l,f+=l endlocal&set %1=%l% %f% %c%&goto :EOF :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Funcion, obtener Puerta de enlace::: Autor ne0x :: Sintaxis
:: call:dg variable :: variable Nombre de la variable en la que se almacenara la IP de la puerta de enlace
:dg ipconfig | find "Puerta de enlace . . . . . 1" > %TMP%\rd.tmp for /F %%A "tokens=11" IN (%TMP%\rd.tmp) DO set %2=%%A goto:EOF
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :GetDG dg :: :: By: Ritchie Lawrence, 2003-09-22. Version 1.0 :: :: Func: Obtains the default gateway. For NT4/2000/XP/2003. :: If functions fails, 0.0.0.0 is returned. :: :: Args: %1 var to receive default gateway (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set "g=0.0.0.0" & set "j=" for /f "tokens=3" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do ( if not defined j for %%b in (%%a) do set "g=%%b" & set "j=1") endlocal & set "%1=%g%" & goto :EOF :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Funcion GetIP::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :GetIP ip :: :: By: Ritchie Lawrence, 2003-09-22. Version 1.0 :: :: Func: Obtains the IP address of primary adapter. For NT4/2000/XP/2003. :: If functions fails, 0.0.0.0 is returned. :: :: Args: %1 var to receive IP address (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set "i=0.0.0.0" & set "j=" for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do ( if not defined j for %%b in (%%a) do set "i=%%b" & set "j=1") endlocal & set "%1=%i%" & goto :EOF :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Funcion GetMAC ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :GetMAC mac :: :: By: Ritchie Lawrence, 2003-09-24. Version 1.0 :: :: Func: Obtains the MAC address of the primary adapter in the format of :: XX-XX-XX-XX-XX-XX. If the function fails 00-00-00-00-00-00 is :: returned. For NT4/2000/XP/2003. :: :: Args: %1 var to receive MAC address (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set "m=00-00-00-00-00-00" & set "i=" & set "j=" set "n=0" & set "c=ipconfig/all" & set "f=findstr" for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do ( if not defined j for %%b in (%%a) do set "i=%%b" & set "j=1") & set "j=" if not defined i endlocal & set "%1=%m%" & goto :EOF for /f "delims=:" %%a in ('%c%^|%f%/n IP.Address.*%i%') do set /a n=%%a-6 for /f "delims=" %%a in ('%c%^|more/e +%n%^|%f% Physical.Address') do ( if not defined j for %%b in (%%a) do set "m=%%b" & set "j=1") endlocal & set "%1=%m%" & goto :EOF :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Funcion GetNA ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :GetNA na :: :: By: Ritchie Lawrence, 2003-09-22. Version 1.0 :: :: Func: Obtains network address of primary adapter. For NT4/2000/XP/2003. :: If functions fails, 0.0.0.0 is returned. :: :: Args: %1 var to receive network address (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set "i=0.0.0.0" & set "n=0.0.0.0" & set "j=" for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do ( if not defined j (for %%b in (%%a) do set "i=%%b" & set j=1)) & set "k=" for /f "skip=1 tokens=1,3-4" %%a in ('route print^|findstr/b /c:" "') do ( for %%e in (%%a) do set "x=%%e" & for %%f in (%%b) do set "y=%%f" for %%g in (%%c) do set "z=%%g" for /f "tokens=1-3" %%a in ('echo/%%x%% %%y%% %%z%%') do ( if not defined k if "%%c"=="%i%" if "%%b"=="%i%" set k=1 & set n=%%a)) endlocal & set "%1=%n%" & goto :EOF :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Funcion GetSM::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :GetSM sm :: :: By: Ritchie Lawrence, 2003-09-22. Version 1.0 :: :: Func: Obtains the subnet mask of primary adapter. For NT4/2000/XP/2003. :: If functions fails, 0.0.0.0 is returned. :: :: Args: %1 var to receive subnet mask (by ref) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: setlocal ENABLEEXTENSIONS & set "i=0.0.0.0" & set "m=0.0.0.0" & set "j=" for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do ( if not defined j (for %%b in (%%a) do set "i=%%b" & set j=1)) & set "k=" for /f "skip=1 tokens=2-4" %%a in ('route print^|findstr/b /c:" "') do ( for %%e in (%%a) do set "x=%%e" & for %%f in (%%b) do set "y=%%f" for %%g in (%%c) do set "z=%%g" for /f "tokens=1-3" %%a in ('echo/%%x%% %%y%% %%z%%') do ( if not defined k if "%%c"=="%i%" if "%%b"=="%i%" set k=1 & set m=%%a)) endlocal & set "%1=%m%" & goto :EOF ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: Script para extraer el PID de un proceso@echo off :: Script para extraer el PID de un proceso :: By Sdc FOR /F "tokens=1,2" %%i IN ('tasklist') DO ( IF "%%i"=="PROCESO1.exe" ( SET pid1=%%j ) IF "%%i"=="PROCESO2.EXE" ( SET pid2=%%j ) )
Script para extraer el valor de una clave del registro@echo off :: Script para extraer el valor de una clave del registro :: By nhaalclkiemr :: Special thanks to Sdc reg export "RUTA_CLAVE" "temp.tmp" if not %errorlevel%==0 goto error type temp.tmp | find "NOMBRE_CLAVE" > cadena_encontrada.tmp del /S /F /Q /A:- temp.tmp FOR /F "tokens=2* delims==" %%I IN (cadena_encontrada.tmp) DO set var="%%I" if "%var%"=="" goto error FOR /F "tokens=2* delims==" %%I IN (cadena_encontrada.tmp) DO ( call:PARSEA %%I ) goto :EOF :PARSEA del /S /F /Q /A:- cadena_encontrada.tmp SET PP="%~1" SET PP=%PP:\\=\% SET PP=%PP:"=% :: Aqui va el bat, el valor de la clave queda guardado en la variable PP exit :error :: Aqui va el bat de error en caso de que la RUTA_CLAVE o NOMBRE_CLAVE no exista exit
Script para ejecutar un archivo BAT con salida nula@echo off :: Script para ejecutar un archivo BAT con salida nula :: By nhaalclkiemr if exist temp.bat goto mibat copy /Y %0 temp.bat>>NUL call temp.bat>>NUL exit :mibat :: Aqui va el bat del /S /F /Q /A:- temp.bat exit
Conocer si el valor de una variable es un numero o otro caracter:: Conocer si el valor de una variable es un numero o otro caracter :: By Sdc :: Aqui partimos de que tenemos una variable r set /a x=%r%*1 if "%x%"=="%r%" (REM Es un numero) else (REM No es un numero)
Ejecutar una aplicación como SYSTEM@echo off :: Ejecutar una aplicación como SYSTEM :: Puedes ejecutarla inmediatamente o programarla para cuando quieras :: Tal como está el codigo está programado para ejecutar al intantante la aplicación :: Borra los comentarios REM para ahorrar codigo y fijate en lo que pone :: By nhaalclkiemr set a=0 set z=%TIME:~0,2% if "%TIME:~0,1%"==" " set z=0%TIME:~1,1% if "%TIME:~8,1%"=="," goto normal if "%TIME:~10,1%"=="," goto 2caso if "%TIME:~12,1%"=="," goto 3caso :normal set x=%TIME:~3,2% goto a :2caso set x=%TIME:~4,2% goto a :3caso set x=%TIME:~5,2% :a set /A a=%a%+1 if "%x%"=="08" set x=8 if "%x%"=="09" set x=9 if "%a%"=="1" set /A x=%x%+1 REM El segundo 1 especifica el tiempo en minutos que tardará en ejecutarse la aplicación, es modificable REM Solo se puede sumar como máximo 86400 minutos, de lo contrario pueden producirse errores :e if %x% GTR 59 set /A z=%z%+1 if %z% GTR 23 set /A z=%z%-24 for /L %%A in (0,1,9) do if "%z%"=="%%A" set z=0%z% if %x% GTR 59 set /A x=%x%-60 if %x% GTR 59 goto e at.exe %z%:%x% AQUITUPROGRAMA.EXE REM En lugar de lo anterior puedes poner lo siguiente si quieres que la aplicacion sea visible: REM at.exe %z%:%x% /interactive AQUITUPROGRAMA.EXE REM %z% y %x% son la hora y los minutos a los que se ejecutará la aplicación, puedes poner otra cosa si quieres if %a%==11 goto b if not %errorlevel%==0 goto a schtasks /run /tn at1 REM Esta ultima linea ejecuta inmediatamente la aplicación, si la estás programando para una hora determinada borra esta linea exit :b set a=0 if %x% LEQ 9 set x=0%x% :c set /A a=%a%+1 schtasks /create /tn temp /tr AQUITUPROGRAMA.EXE /sc once /st %z%:%x%:00 /ru System REM Esto se ejecutará en caso de que el comando AT falle, es un intento alternativo, de esta manera no se puede hacer visible if %a%==11 goto error if not %errorlevel%==0 goto c schtasks /run /tn temp REM Esta ultima linea ejecuta inmediatamente la aplicación, si la estás programando para una hora determinada borra esta linea exit :error :: Aqui va el BAT que se ejecuta en caso de que se produzca un error
Configuracion IP :: Autor: pantocrator :: MAs información: http://pantocrator-blog.blogspot.com/
@Echo OFF echo [requerido] Primer parametro %1 es para ip estatica. echo [requerido] Segundo parametro %2 es la mascara de red. echo [requerido] Tercer parametro %3 es la puerta de enlace. echo [opcional] Cuarto parametro %4 es el servidor dns primario If [%1] == [] GOTO QUIT If [%2] == [] GOTO QUIT If [%3] == [] GOTO QUIT echo Starting %0 Echo ....................Configurando IP address en Conexi¢n de rea local a %1 con NetMask %2 netsh interface ip set address name="Conexi¢n de rea local" source=static addr=%1 mask=%2 Echo ....................Configurando Gateway en Conexi¢n de rea local a %3 netsh interface ip set address name="Conexi¢n de rea local" gateway=%3 gwmetric=1 If [%4] == [] GOTO QUIT Echo ....................Configurando DNS en Conexi¢n de rea local a %4 netsh interface ip set dns name="Conexi¢n de rea local" source=static addr=%4 register=primary GOTO QUIT
:QUIT ECHO ON
|
|
|
6
|
Programación / Scripting / Ejercicio BATCH
|
en: 27 Abril 2007, 14:16 pm
|
Bien, es una buena idea que he tenido y os la pongo.
Lo que hay que hacer es lo siguiente:
Crear un script en batch que busque en todos los archivos por lotes del sistema los comandos que estaran almacenados en un archivo que le sirva de basen de datos.
Si encuentra mas de 2 coincidencias advertira de la existencia del archivo por lotes.
Si encuentra 3 lo renombrara a .txt manteniendolo en su ruta original.
Si encuentra 4 lo copia a una carpeta de cuarentena y borra el original.
Si encuentra 5 lo borrar ya directamente...
Os advierto de que el script no debe eliminarse a si mismo.
Si ya haceis la crêm de la crêm os la teneis que idearos para que cada vez que encuentra un archivo por lotes que supera 1 unico comando encontrado preguntar si lo agregais a la lista de excepciones, si este esta agregado ya , en futuros scanneos no se debe volver a preguntar si se agrega o no.
Todo esto yo ya lo consegui, asi que si que es posible usando unicamente batch, no debe mezclarse con ningun otro tipo de lenguaje de scripting, no esta permitido el uso del comando debug.
Si os poneis a hacerlo y os lleva tiempo ponerlo aqui para que sepa que por lo menos alguien lo hace.
Las soluciones mandarmelas por MP, si vuestro code cumple las condiciones anteriores pondre aqui vuestro nombre.
|
|
|
|
|
|
|