|
Mostrar Temas
|
Páginas: 1 [2]
|
11
|
Programación / Scripting / Truco: Debugear binarios usando el mismo bat invisible
|
en: 14 Julio 2008, 23:42 pm
|
Hola acabo de leer código, y aprendido lo que muestro a continuación: Cómo debugear binarios usando el mismo archivo y sin salida gráfica. Ejemplo: ::CarlitoS @echo off
if exist "reply.com" (goto Code) else (goto Crea)
::INICIO CODE REPLY A 100 MOV AH,08 INT 21 CMP AL,0 JNZ 010A INT 21 MOV AH,4C INT 21
RCX E N REPLY.COM W Q
:FIN CODE REPLY
:Crea for /f "skip=6 tokens=*" %%a in ('debug ^< "%~f0" ^>NUL') do rem
:Code reply.com if %errorlevel%==32 (goto :texto) goto Code
:texto echo Presionaste espacio pause
Lo que hace este código es usando el for con el salto de líneas apropiado (skip) entregarle al debug el código necesario para crear el binario redireccionando a NUL. Prefiero que analicen el code y saquen sus propias conclusiones. Este code que escribí crea un ejecutable antiguo de Microsoft llamado reply.com que es como el pause>NUL pero en %errorlevel% nos devuelve el número de tecla presionada. La gracia de todo esto es que se crea el binario sin salida gráfica y usando el mismo archivo. Nota: el debug lee hasta la q y el salto de línea.
|
|
|
12
|
Programación / Scripting / Aumentar 2 horas el tiempo
|
en: 12 Julio 2008, 00:26 am
|
No sé dónde quedó un post de alguien que pedía ayuda para quitar dos horas al tiempo. Bueno, a lo mejor esto le sirve: ::CarlitoS.dll
@echo off
set /a n=-2 ::n es la cantidad de horas que quieres aumentar-quitar. Para aumentar antepones el signo +, y para restar antepones el signo -
for /f "delims=:" %%a in ('echo %time%') do call :newtime %%a goto :eof
:newtime set /a hra=%1+%n% if %hra% LSS 0 (set /a hra=%hra%+24) else if %hra% GEQ 24 (set /a hra=%hra%-24) time %hra%:%time:~3% goto :eof
|
|
|
13
|
Programación / Scripting / Detector Unidades Removibles 5.0c
|
en: 10 Julio 2008, 06:45 am
|
::DETECTOR OF REMOVABLE DEVICES [V5.0c Final] author CarlitoS.dll ::carlitosdll.blogspot.com ::Tested in Windows 2000 and XP. Not works in Windows 98 and Me.
@echo off if "%errorlevel%"=="" goto other
echo Mounted removable devices detected echo ----------------------------------
ver | findstr "2000 NT" >NUL && goto NT2000
:XPVISTASEVEN for /f "tokens=3 delims=\:" %%a in ('reg query HKLM\SYSTEM\MountedDevices ^| find "530054004F00520041"') do ( dir /a %%a:\ >NUL 2>&1 && echo.%%a:) pause goto :eof
:NT2000 regedit /e "%temp%\devices.dat" "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices" for /f "tokens=3 delims=\:" %%a in ('find /i "DosDevices" ^< "%temp%\devices.dat" ^| find /i "53,00,54,00,4f,00,52,00,41"') do ( dir /a %%a:\ >NUL 2>&1 && echo.%%a:) del /f /q "%temp%\devices.dat" >NUL pause goto :eof
:other echo Current batch is not supported in this Operating System version. exit
|
|
|
14
|
Programación / Scripting / Otro uso de call
|
en: 10 Julio 2008, 02:23 am
|
Publico otro uso de call, que estoy aprendiendo Esto es lo que llevo: @echo off
:: Lo que sería: :: set word=%word:%letra1%=%letra3%% :: :: Ejemplo: :: :: set word=%word:%letra1%=%letra3%% :: :: %word:%letra1%=%letra3%% ::call set word = [%] %word:%letra1%=%letra3%% [%] :: se añade un % al principio y otro al final % :: :: Finalmente queda: :: ::call set word=%%word:%letra1%=%letra3%%%
set letra1=ra set letra2=ma set letra3=ca set letra4=sa
set word=rama
echo %word% ::muestra rama
call set word=%%word:%letra1%=%letra3%%% call set word=%%word:%letra2%=%letra4%%%
echo %word% ::muestra casa
pause
set inicio=1 set fin=1
echo %word%
call echo %%word:~%inicio%,%fin%%% ::muestra a
echo %word% ::muestra casa
set inicio=2 set fin=3
call set word=%%word:~%inicio%,%fin%%% echo %word% ::muestra sa
pause
|
|
|
15
|
Programación / Scripting / Crackme in batch
|
en: 6 Julio 2008, 13:23 pm
|
Dejo un crackme en batch. para que se entretengan. http://wikisend.com/download/490408/crackme.exe ¿haber si alguien se anima y publica más?
|
|
|
16
|
Programación / Scripting / Detector unidades Pendrive 5.0c
|
en: 30 Junio 2008, 03:49 am
|
En la siguiente página está la versión 3.4 que es mucho mejor.
Hola, quisiera solicitar un favor, escribí un code para detectar las unidades pendrive. Y quisiera pedirles por favor, que lo probaran y me dijeran cómo funciona, si es posible, colocar dos pendrives (porque yo tengo sólo 1), para saber si funciona en varias eventos.
|
|
|
17
|
Programación / Scripting / BINARIO a BATCH
|
en: 28 Junio 2008, 04:42 am
|
Fanático de la portabilidad, y muy contento con el método de Shadow para convertir de binario a batch, me puse a buscar algún código que hicera lo mismo que el programa de Shadow, y descubrí uno hecho en pascal (nunca había leído pascal ), y lo compilé y no trabajaba bien, así es que lo arreglé con lo nada que sé de pascal, y mirando los resultados del programa de Shadow. El único problema que tiene es que con archivos grandes, no informa que son grandes, sino que se cae al ejecutarlo. Me comprometo a hacer lo mismo en C en un tiempo más. Bueno, este es el código (modificado). Lo compilé con Free Pascal. debugbat.pas (************************************************************************* =============================================== Hex-encode binary files in debug-script batches =============================================== Copyright (c) 1993,1994 by Jos‚ Campione Ottawa-Orleans Personal Systems Group Fidonet: 1:163/513.3 This program reads a binary file and creates a hex-encoded text file. Will use debug.exe or debug.com to reconstruct the binary file. **************************************************************************) {$M 2048,0,0} program debugbat; uses crt,dos; const maxsize = $FFFF; type string2 = string[2]; var ifile : file of byte; ofile : text; n : word; s : word; b : byte; fsize : word; dir : dirstr; nam : namestr; ext : extstr; filename : string[48]; i : integer; function b2x(b: byte): string2; const hexdigit: array[0..15] of char = '0123456789ABCDEF'; begin b2x:= hexdigit[b shr 4] + hexdigit[b and $0F]; end; procedure myhalt(e: byte); begin gotoxy(1,wherey); case e of 0 : writeln('done.'); 1 : writeln('error in command line.'); 2 : writeln('file exceeds the 65K limit.'); else begin e:= 255; writeln('Unknown error.'); end; end; halt(e); end; begin writeln; writeln('DEBUGBAT v.1.0 Copyright (c) Feb/93 by J. Campione.'); writeln('Modify by ...'); write('Wait... '); n := 0; s := $00; {$I-} assign(ifile,paramstr(1)); reset(ifile); {$I+} if (paramcount <> 1) or (ioresult <> 0) or (paramstr(1) = '') then myhalt(1); fsplit(paramstr(1),dir,nam,ext); for i:= 1 to length(ext) do ext[i]:= upcase(ext[i]); if ext = '.EXE' then filename:= nam + '.ext' else filename:= nam + ext; fsize:= filesize(ifile); if fsize > maxsize then myhalt(2); assign(ofile, nam + '.src'); rewrite(ofile); writeln(ofile,'N ',filename); while not eof(ifile) do begin n:= n + 1; read(ifile,b); if n mod 16 = 1 then begin writeln(ofile); write(ofile,'e ',b2x(hi(s)),b2x(lo(s))); s := s + 16; end; write(ofile,' ',b2x(b)); end; writeln(ofile); writeln(ofile,'rcx'); writeln(ofile,b2x(hi(n)),b2x(lo(n))); writeln(ofile,'w0'); writeln(ofile,'q'); close(ifile); close(ofile); myhalt(0); end.
Se ejecuta así: debugbat archivo Luego, solo se toma el archivo resultante .src, y se hace en consola o desde un bat: debug.exe < archivo.src o type archivo.src | debug.exe Los archivos .exe se crearán como .ext (ya que sino debug arroja error) Sugerencia obvia: Comprimir antes el ejecutable con upx. Revisar resultados, por ejemplo con fc.exe o comp.exe
|
|
|
18
|
Programación / Scripting / Cómo mezclar BATCH + REG
|
en: 27 Junio 2008, 04:00 am
|
Cómo mezclar código REG y código batch: un archivo .reg (archivo de registro) es identificado por regedit.exe con una cabezera, que puede ser en windows 9x: REGEDIT4 o en Windows más actuales: Windows Registry Editor Version 5.00 Si utilizamos un archivo batch, y le ponemos como primera linea esta cabezera, y luego añadimos un @cls, para limpiar el error de "cómando no identificado", y luego añadimos más código batch, y al final añadimos código de registro, podemos llamar desde el mismo bat al mismo archivo, cómo si fuese un .reg Ejemplo: archivo.bat o archivo.cmd REGEDIT4
@cls ::CarlitoS.dll @echo off echo Tenemos codigo batch y REG en este mismo archivo. regedit /s "%~f0" pause exit
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer] "ClearRecentDocsOnExit"=dword:00000001
|
|
|
19
|
Programación / Scripting / Cómo mezclar BATCH + INF
|
en: 27 Junio 2008, 03:39 am
|
Cómo mezclar código inf y código batch: en un archivo inf, los comentarios comienzan con un punto y coma, y en un archivo batch si comenzamos líneas con punto y coma, las toma de todas formas, la idea es escribir cada código batch comenzando cada línea con un punto y coma, y luego de añadir un exit, escribir el código inf. Desde el bat hacemos la llamada a rundll32, llamando como archivo inf al mismo archivo .bat o .cmd (extensión de los archivos programados en batch), que podemos simplificar llamandolo así "%~f0" (el parámetro 0 del archivo o file, vale decir, el nombre) con comillas, por si está dentro de una carpeta que contiene espacios. Ejemplo: archivo.bat o archivo.cmd (contiene código batch y código inf). ;::CarlitoS.dll ;@echo off ;echo Tenemos codigo batch e INF en este mismo archivo. ; ;rundll32.exe advpack.dll,LaunchINFSection "%~f0",CarlitoS ; ;pause ; ;::rundll32.exe advpack.dll,LaunchINFSection archivoINF,sección ;::si no se especifica sección se ejecuta DefaultInstall ;exit ; ;
[Version] Signature=$CHICAGO$
[DefaultInstall] AddReg = Registro1
[CarlitoS] AddReg = Registro2
[Registro1] HKCU,"%POLICIES%\Explorer","ClearRecentDocsOnExit",0x00010001,0x00000000
[Registro2] HKCU,"%POLICIES%\Explorer","ClearRecentDocsOnExit",0x00010001,0x00000001
[Strings] POLICIES = "SOFTWARE\Microsoft\Windows\CurrentVersion\Policies"
|
|
|
20
|
Programación / Scripting / Validar variables de entorno
|
en: 13 Mayo 2008, 06:17 am
|
Tengo la siguiente pregunta: En batch para windows ¿cómo puedo validar las variables de entorno? Ejemplo: @echo off :box set /p nombre="Ingrese un nombre:" echo Usted ingresó: echo %nombre% :verify set resp= set /p resp="¿Está bien?[s/n]": if "resp"="s" (echo Muy bien & exit) if "resp"="n" (goto box) goto verify
Si cuando pide que ingrese un nombre, ingreso lo siguiente: juan &echo loquesea >>C:\hola.txt y al imprimir mediante echo la variable de entorno: muestra por pantalla juan y luego escribe loquesea en el archivo C:\hola.txt Por ello, mi pregunta es: ¿como podriamos validar las variables de entorno?
|
|
|
|
|
|
|