Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meine programmen en 1 Enero 2013, 14:43 pm



Título: [BATCH] Acceso denegado en REG QUERY
Publicado por: Meine programmen en 1 Enero 2013, 14:43 pm
Hace algo de tiempo que estoy haciendo pruebas e intentando hacer un trozo de codigo que vaya cambiando al programa de carpeta de manera aleatoria. Otros objetivos del codigo son contener la ruta de la carpeta en una clave del registro y que no necesite mas de una sola ventana para funcionar correctamente. Al principio el codigo funciona bien, si no existe la clave del registro la crea con su ruta y vuelve a empezar, y si existe y la ruta que contiene la clave es la misma en la que esta el programa, se copia a una carpeta aleatoria y ejecuta la copia. Si la ruta de la clave es diferente a la del programa, el programa elimina la carpeta de la anterior copia (Cuya ruta esta en la clave) y vuelve a empezar. El problema esta que al volver a empezar despues de haber borrado la anterior copia, el comando REG QUERY deniega el acceso y el programa no puede leer la clave del registro. Habia pensado en usar el comando runas en lugar de un GOTO en el momento de volver a empezar el programa, pero eso implicaria abrir otra ventana. Pongo el codigo abajo, probablemente tenga mas fallos que el que ya nombre. Espero que alguien pueda ayudarme, muchas gracias de antemano.

Código:
@ECHO OFF
SetLocal EnableDelayedExpansion
:SeteandoVariables
SET ClaveDelRegistro=HKLM\SOFTWARE
SET ValorDelRegistro=CD
SET MELT=1
SET NAME=

:ModificandoClaveDelRegistro
REG QUERY "%ClaveDelRegistro%" /v "%ValorDelRegistro%">temp
FOR /F "tokens=3*" %%A IN ('findstr REG_SZ "temp"') DO (IF "%%B" NEQ "" SET B= %%B
SET RutaAntigua=%%A!B!)
REG ADD "%ClaveDelRegistro%" /v "%ValorDelRegistro%" /f /d "%~dp0
IF "%RutaAntigua%"=="" (GOTO SeteandoVariables)
IF "%RutaAntigua%" NEQ "%~dp0" (SET MELT=0)
IF "%RutaAntigua%" NEQ "" IF %MELT%==0 ATTRIB -H -S "%RutaAntigua:~0,-1%" /S /D
IF "%RutaAntigua%" NEQ "" IF %MELT%==0 CD "%RutaAntigua%"
IF "%RutaAntigua%" NEQ "" IF %MELT%==0 FOR /R %%A IN (*.*) DO (DEL /P "%%A")
IF "%RutaAntigua%" NEQ "" IF %MELT%==0 cd ..
IF "%RutaAntigua%" NEQ "" IF %MELT%==0 rd /S "%RutaAntigua%"

:EligiendoCarpeta
CD /D %HOMEDRIVE%\
SET /A MAX=%RANDOM% %% 4000 + 1000
FOR /D /R %%A IN (*) DO (SET Carpeta=%%A
SET /A NUM=!RANDOM! %% %MAX% + 1
IF !NUM!==1 (GOTO ComprobandoErrorN1))

:ComprobandoErrorN1
echo %Carpeta%
IF %ERRORLEVEL% NEQ 0 (GOTO EligiendoCarpeta)
IF "%CARPETA%" NEQ "%CARPETA:)=%" (GOTO EligiendoCarpeta)

:GenerandoNombre
SET /A CHARNUM=%RANDOM% %% 25 + 1
SET CONT=0
FOR /L %%A IN (1,1,%CHARNUM%) DO (
SET /A CHAR=!RANDOM! %% 51
FOR %%B 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 1 2 3 4 5 6 7 8 9 0 ! @ # $ ~ ( = [ ] { } . , ; ' - _ +) DO (
SET /A CONT=!CONT!+1
IF !CHAR!==!CONT! SET CHAR=%%B
)
IF !CHAR!==0 (SET CHAR= )
SET NAME=!NAME!!CHAR!
SET CONT=0
)

:Informando
echo %NAME%
echo %MELT%

:ComprobandoMelt
IF %MELT%==0 (echo NO MELT THIS TIME)
IF %MELT%==0 (GOTO SeteandoVariables)

:CreandoCarpeta
cd "%Carpeta%"
md "%NAME%"
ATTRIB +H +S "%NAME%"
cd "%NAME%"

:Copiando
copy "%~f0" "CD.bat"
pause


:AbriendoCopia
"%Carpeta%\%NAME%\CD.bat"


Título: Re: [BATCH] Acceso denegado en REG QUERY
Publicado por: Segadorfelix en 4 Enero 2013, 23:54 pm
¿que mensaje te sale?  :huh:


Título: Re: [BATCH] Acceso denegado en REG QUERY
Publicado por: Meine programmen en 5 Enero 2013, 12:00 pm
Devuelve solamente
Código:
Acceso denegado.
A partir de ahi los demas comandos fallan.


Título: Re: [BATCH] Acceso denegado en REG QUERY
Publicado por: Eleкtro en 5 Enero 2013, 16:00 pm
No creo que el problema séa del REG QUERY,
Y no me extraña que salga Acceso denegado, si la carpeta la elijes aleatóriamente y puede ser cualquier carpeta protegida dle sistema, no le das permisos al usuario para copiar el archivo en esa carpeta, a mi por ejemplo se me ha intentado copiar en una carpeta del sistema que necesita privilegios de admin.

Aparte, hay un fallo grave en el script, el caracter del "espacio" deberías removerlo o mejorarlo,
El batch puede crear esta carpeta:
Código:
"C:\carpeta\E "
"C:\carpeta\ E"
Windows automáticamente elimina el espacio tanto a la izquiera como a la derecha del nombre, así que no podría acceder a esas carpetas porque el script no podría encontrarlas.

Prueba así:

Código
  1. :CreandoCarpeta
  2. (
  3. Takeown /F "%Carpeta%" /R /D S
  4. Icacls     "%Carpeta%" /Grant "%USERNAME%":F /T
  5. ATTRIB     "%Carpeta%" -A -R -S -H -I /D /S
  6. mkdir      "%Carpeta%\%NAME%"
  7. Takeown /F "%Carpeta%\%NAME%"
  8. Icacls     "%Carpeta%\%NAME%" /Grant "%USERNAME%":F
  9. ATTRIB     "%Carpeta%\%NAME%" -A -R -S -H -I
  10. ) >NUL
  11.  
  12. :Copiando
  13. Copy /Y "%~f0"   "CD.bat"                  1>NUL
  14. Move /Y "CD.bat" "%Carpeta%\%NAME%\CD.bat" 1>NUL || (GOTO:SeteandoVariables)
  15.  
  16. :AbriendoCopia
  17. Start /B "" "%Carpeta%\%NAME%\CD.bat"

Saludos.