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 - _Enko

#1
Hola, no se si le pasa a alguien, he notado que en los temas que he creado, me aparecen 4 botones en la esquina superior derecha del post:

CITAR-MODIFICAR-XXXXX-YYYYYY

el XXXXXX es
http://foro.elhacker.net/Themes/classic/images/spanish/accept.gif

el YYYYYY es
http://foro.elhacker.net/Themes/classic/images/spanish/reject.gif

Esas dos imagenes, no las puedo visualizar ni abrir. 404.

Es por el idioma que tengo puesto en opciones?

Saludos y gracias.




edit: Si sale modificar y usable ^^





#2
Programación C/C++ / Sobrecarga operador +
5 Febrero 2015, 15:43 PM
Hola, estoy practicando el tema de sobrecarga y me tope con 2 problemas. :silbar:

Código (cpp) [Seleccionar]

class Foo
{
public:
//Foo& operator+(const Foo& f); tampoco funciona
//Si funciona (Foo& f)
Foo& operator+(Foo const& f){
bar_ += f.getBar();
return *this;
}
int getBar(){
return bar_;
}
private:
int bar_;
};

Por alguna razon, cuando sobrecargo el operador +, Visual Studio 2010 me exigue que el parametro sea una referencia simple "Foo& f" y no const. Si coloco const, salta error que no puede convertir de const & a & desde el metodo Foo::getBar().
No tengo visual studio a mano como pasar el error exacto.
(passing `const Foo' as `this' argument of `int Foo::getBar()' discards qualifiers )

Otra cosa, en http://www.parashift.com/c++-faq/overview-op-ov.html
Coloca este ejemplo
  Fred operator+ (Fred const& x, Fred const& y);
Pero vc++ y blodshed dev c++ tambien se quejan de que solo se puede pasar un argumento a un operador unario.

Será que tiene solamente parcial soporte de c++11?

Saludos y Gracias
#3
Holas estimados ,
estaba jugando un poco con c++ para crear una clase que manejara menus de consola.
Hasta ahora tengo algo funcionando como esto:
Código (cpp) [Seleccionar]

void proc1(void){
    std::cout << "proc1" << std::endl;
}
void proc1a(void){
    std::cout << "proc1a" << std::endl;
}
void proc1b(void){
    std::cout << "proc1b" << std::endl;
}
void proc2(void){
    std::cout << "proc 2" << std::endl;
}

void proc3a(void){
    std::cout << "proc 3a" << std::endl;
}
void proc3b(void){
    std::cout << "proc 3b" << std::endl;
}
void proc3c(void){
    std::cout << "proc 3c" << std::endl;
}


   
int main(int argc, char* argv[]){
    CMenu menu;
    menu.AddMenu("OPCION 1", proc1);
    menu.AddSubMenu("OPCION1A", proc1a, 1); //submenu de la opcion 1
    menu.AddSubMenu("OPCION1B", proc1b, 1);
    menu.AddMenu("OPCION 2", proc2);
    menu.AddMenu("OPCION 3", NULL); //opcion 3 separador, no tendria funcion
    menu.AddSubMenu("OPCION3A",  proc3a, 3); //submenu de la opcion 3
    menu.AddSubMenu("OPCION3B", proc3b, 3);
    menu.AddSubMenu("OPCION3C", proc3c, 3);
    menu.PrintMenu();
    menu.DoMenu();
    return 0;
}


El resultado es algo asi:
Citar
1: OPCION 1
   11: OPCION1A
   12: OPCION1B
2: OPCION 2
3: OPCION 3
   31: OPCION3A
   32: OPCION3B
   33: OPCION3C
0: SALIR
Eliga una Opcion:

Por ejemplo si se elige la opcion 11, se llamará a proc1a(), y esto se repite hasta que se elija salir.

El problema es, el puntero a funcion como parametro lo tengo defenido asi:
Código (cpp) [Seleccionar]

typedef void(*callback_proc_)(void);
inline void CMenu::AddMenu(const char* cap, callback_proc_ proc){


Con esta estructura, estoy forzando que el procedimiento que esta asociado al item del menu es "void name(void)"

Como se podría hacer para poder pasar como parametro a AddMenu() una funcion con numero y tipo de parametros desconocido?

Saludos Y gracias
#4
Foro Libre / reCaptcha para que sirven realmente
29 Septiembre 2012, 06:43 AM
No se si alguno se acuerda de esta noticia:
http://foro.elhacker.net/noticias/captcha_iquestpara_que_sirven_realmente-t358126.0.html


Hay un comentario alli de una "bonita teoria de conspiracion" que me acordaba por vaya saber que razon :silbar:
pues la idea no me parecia tan loca.

Es cierto. Los reCaptcha ayudan para la digitalizacion de libros.
http://www.ted.com/talks/luis_von_ahn_massive_scale_online_collaboration.html


Se sacan palabras de  libros que estan siendo digitalizados,
Una que se sabe  la respuesta y otra que no.
Al indicar bien la palabra conocida, reCaptcha asume que eres humano y ademas  que has puesto la segunda palabra  medianamente bien.
Si 10 usuarios colocan esa palabra desconocida de la misma manera, reCaptcha asume que es la forma correcta de transcribir esa palabra y la marca como conocida.
#5
ASM / IDE EasyCode MASM
24 Diciembre 2011, 15:08 PM
Hola. navegando por ahí me tope de pura casualidad con esta IDE:

Tiene version en español e inglés.
http://www.easycode.cat/Spanish/index.htm

trae:
Editor de recursos
Code Snipets/Tooltips/Completition
Crea una lista de Variables y Funciones.
Y el entorno es mucho mas amistoso que radAsm.

No requiere ninguna configuracion extra, solamente tener el paquete de masm instalado en algun lugar.


Saludos.
#6
Ingeniería Inversa / crackme 06 by Enko
8 Diciembre 2011, 18:14 PM
Les dejo este keygenme que contiene una rutina de verificacion de licencias bastante particular. (cuando lo analicen, sabrán a lo que me refiero).
Generar llave valida les será particularmente "entretenido".

No contiene ningun tipo de proteccion anti-debug.

Mencion de honor: para el que logre hacer un parche
         mostrando el mensaje correcto.

Medalla de BRONCE: licencia valida.
Medalla de PLATA: licencia valida para  su NICK.
Medalla de ORO: al que genere un keygen valido.



http://www.mediafire.com/?ttc496dzbhf18ht
http://www.megaupload.com/?d=Y5GABYYW
http://dl.dropbox.com/u/51061541/crackme6.7z

Diviertanse y saludos.
#7
ASM / [Codigo] Pequeño Servidor HTTP
3 Diciembre 2011, 22:29 PM
Código (asm) [Seleccionar]

;modificar szRoot para indicar la ubicacion del servidor, default C:\Server
;msvcrt no viene en el paquete de fasm, la crean con la utilidad dll2inc
;o hacen los include a mano^^
format PE Console
entry start

include '%fasminc%/win32a.inc'
include '%fasminc%/macro/if.inc'

MAX_QUEUE   equ 100     ;max namber of pending connections
BUFFER_SIZE equ 2048    ;max size of the header sent by the client
MAX_URL_SIZE equ 1024   ;max size of url in the header send
SHOW_DETAILED_MSG equ TRUE ;set TRUE if want to see the full client message

section '.data' data readable writeable
    wsa     WSADATA
    port    dd 80
     
    szPause db "PAUSE",0
    h404    db "HTTP/1.1 404 Not Found",13,10,"Server: EnkoHttpServer 1.0.0.0 ",13,10,13,10,"<HTML><BODY>404 Not Found</BODY></HTML>",13,10
    .size = $ - h404
    h200    db "HTTP/1.1 200 OK",13,10,"Server: EnkoHttpServer 1.0.0.0 ",13,10,"Allow: GET",13,10,13,10
    .size = $ - h200
    szRoot      db "C:\Server",0
    szSlashes   db '/\',0
    szSlash     db '\',0
    szTockens   db " ",13,10,0
    szError     db "ERROR: %i",13,10,0
    szDot       db ".",0
    szFileNotExists db "File Not Exists",13,10,0
    szInt       db "%i",0
    szFile      db "FILE: %s",13,10,0
    szClient    db "Client IP: %s",13,10,0
    szRequest   db "REQUEST: %s",13,10,0
    szStatus    db "STATUS: %s",13,10,0
    szString    db "%s",0
    szEndLine   db 13,10,0
    .size = $ - szEndLine
    szBr        db "<br>",0
    szIndex     db "index.html",0
    szFileSent    db "File Sent ok",13,10,0
    .size = $ - szBr
    wSocketVersion dd 0x0101
    transmiteBuffer dd h200,h200.size,NULL,NULL
    thread  dd ?     
    peer    dd ?
    peerAddr sockaddr_in
    sizePeerAddr dd sizeof.sockaddr_in
    sock     dd ?
    sock_addr   sockaddr_in
    szBuffer db 32 dup ?
    szIp     db 16 dup ?
     
     
section '.code' code readable executable
start:
    ;inicializacion socket
    invoke  WSAStartup, [wSocketVersion], wsa     
    invoke  socket,AF_INET,SOCK_STREAM,NULL
    mov     [sock],eax     
    mov     [sock_addr.sin_family], AF_INET
    invoke  htons,[port]
    mov     [sock_addr.sin_port],ax     
    mov     [sock_addr.sin_addr],NULL
    invoke  bind, [sock], sock_addr,sizeof.sockaddr_in
    .if eax <> 0
        invoke  WSAGetLastError
        cinvoke printf, szError, eax         
    .endif     
    invoke listen, [sock],MAX_QUEUE
    ;activamos la escucha del socket
accepted:
    invoke accept, [sock],peerAddr,sizePeerAddr
    mov     [peer],eax 
    stdcall ipToString,[peerAddr.sin_addr],szIp
    cinvoke printf, szClient,szIp
    ;nuevo hilo para cada conexion
    invoke CreateThread, NULL,NULL, resolveConnection,[peer],NULL,NULL
    ;o mejor la funcion de abajo, ayudaria a la estabilidad y contra ataques DOS
    ;invoke QueueUserWorkItem, resolveConnection, [peer], NULL ;WT_EXECUTEDEFAUL
    jmp     accepted
    invoke  ExitProcess,0

;hilo que resuelve las peticiones
proc resolveConnection, lpParam
local lpeer: DWORD, lbuffer: DWORD, lurl: DWORD, lfile: DWORD 
    mov     eax, [lpParam] Dermatoesqueleto    mov     [lpeer],eax
    cinvoke malloc, BUFFER_SIZE
    mov     [lbuffer],eax
    invoke  recv, [lpeer],[lbuffer],BUFFER_SIZE,0 
    ;vemos si hay un mensaje en el buffer y continuamos
    .if eax <> 0   
        mov ebx,[lbuffer]
        mov byte [ebx+eax],0
        .if SHOW_DETAILED_MSG
            cinvoke printf,szRequest, [lbuffer]   
        .endif
        cinvoke strtok, [lbuffer], szTockens
        .if eax <> 0 
            ;solamente respondemos al mensaje GET
            .if dword[eax] = "GET"           
                ;url sring allocation
                ;buscamos la url en la peticion GET
                ;solamente las peticiones que terminan con alguna extensión
                cinvoke malloc, MAX_URL_SIZE
                mov    [lurl],eax
                cinvoke strcpy, [lurl],szRoot
                cinvoke strtok, NULL, szTockens
                cinvoke strcat,[lurl],eax   
                mov     ebx,eax     
                cinvoke strlen, eax
                mov edx,eax
                dec edx
                .repeat 
                    dec eax
                    cmp byte[ebx+eax],"/"
                    .if ZERO?
                        mov byte[ebx+eax],"\"
                    .endif                     
                .until eax = 0
                .if byte[ebx+edx] = "\"
                    cinvoke strcat,[lurl],szIndex
                .endif
                cinvoke printf, szFile, [lurl]
                ;ya tenemos el nombre del archivo, ahora lo abrimos desde el disco
                invoke  CreateFile,[lurl],GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,0
                ;si el archivo existe, lo enviamos
                .if eax <> INVALID_HANDLE_VALUE 
                    mov [lfile],eax             
                    invoke  GetFileSize, [lfile],NULL
                    invoke  TransmitFile, [lpeer],[lfile],eax,NULL,NULL,transmiteBuffer,NULL 
                    .if eax
                        ;escribimos en la consola el detalle
                        cinvoke printf, szStatus, szFileSent
                    .endif
                    invoke  CloseHandle, [lfile]
                .else
                    ;no existe el archivo, error 404
                    cinvoke printf, szStatus, szFileNotExists                     
                    invoke  send, [lpeer], h404, h404.size, 0               
                .endif
                cinvoke free, [lurl]
            .endif
        .endif
    .endif
    .exit:
    cinvoke free, [lbuffer]
    invoke  CloseHandle, [lpeer]
    invoke  ExitThread
    ret
endp

;convertimos DWORD ip  a una cadena
proc ipToString, ip, string
local buffer: DWORD
    mov ebx, [ip]
    mov esi,4
    mov eax,[string]
    mov byte [eax],0
    .repeat
        xor     eax,eax
        mov     al,bl
        cinvoke sprintf,[buffer],szInt,eax
        cinvoke strcat,[string],[buffer]
        cinvoke strcat,[string],szDot
        shr ebx,8
        dec esi
    .until esi=0
    cinvoke strlen, [string]
    mov ebx, [string]
    mov byte[ebx+eax-1],0
    mov byte[buffer],0
    ret
endp
section '.idata' import data readable writeable

library kernel32,'KERNEL32.DLL',\
        user32,'USER32.DLL',\
        msvcrt,'msvcrt.dll',\
        wsock32, 'WSOCK32.DLL'

include '%fasminc%\api\kernel32.inc'
include '%fasminc%\api\user32.inc'
include '%fasminc%\api\msvcrt.inc'
include '%fasminc%\api\wsock32.inc'


El codigo funciona bastante bien. Si la url es complicada es probable que no la pueda resolver. En canto a saturacion o DDOS, sumamente susceptible.

Screenshot
http://i41.tinypic.com/5lxyfk.png

hay una duda que tengo:
Si se usa  CreateThreade es necesario usar ExitThread... hasta ahi bien.

Ahora, si se  usa QueueUserWorkItem, ¿Hace falta?
en la msdn no especifica, hice la prueba y aparentemente no. Ya que si se usa, en una prueba rapida se nota que deja de funcionar la segunda vez que se llama.

Saludos.
#8
ASM / masm, msvcrt.
1 Diciembre 2011, 16:53 PM
Hola, pense que era mi compu que tenia algun conflicto con visual studio o algo, pero no. Instalacion nueva del paquete de http://www.masm32.com/

Código (asm) [Seleccionar]

.386
.model flat, stdcall
option casemap :none   ; case sensitive
      include C:\masm32\include\windows.inc
      include C:\masm32\include\kernel32.inc
      include C:\masm32\include\user32.inc
      include C:\masm32\include\msvcrt.inc
      includelib C:\masm32\lib\kernel32.lib
      includelib C:\masm32\lib\msvcrt.lib
      includelib C:\masm32\lib\user32.lib
     
.code
    szPause db 'pause',0
    szFmt db '%s',0
    charsWritten dd 0
start:
    invoke AllocConsole
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    invoke WriteConsole, eax, offset szPause, 5, offset charsWritten,NULL
    invoke crt_printf,offset szFmt, offset szPause
    invoke crt_system, offset szPause
    invoke ExitProcess, 0
    ret
end start

El resultado deberia de ser "pausepausePresione una tecla para continuar..."
Sin embargo, crt_printf no imprime la cadena, si devuelve 5 que son los caracteres que escribio. Es decir esta "imprimiendo el texto" pero no se imprime en la pantalla.

1)
Alguna idea de porque no imprime con printf?
Con o sin AllocConsole el resultado es el mismo. aunque printf se tendria que encargar solo de alojar una consola si  no esta  creada.


Saludos.
#9
Para aquellos que les guste nopear saltos  :rolleyes:

A ver quien encuentra el salto correcto!!!


Objetivo: Hacer un parche para ver mensaje de "buen chico" o bien, encontrar clave valida. (no vale invertir cadenas de los mensajes)
Detalle:
*)El crackme no esta empaquetada
*)El crackme esta sumamente obfuscado
*)La validacion es sumamente sencilla
*)Esta en modo consola, al arrancar ingresen el serial, boton enter y rezar ^^

Dificultad: Ni idea, depende en lo que se tarde en resolver, ya me lo comentaran.

Vale tanto parche como encontrar el serial valido.



http://www.mediafire.com/?x0m3r29wv99xx5j
http://www.megaupload.com/?d=WPS6NGIN
#10
Ingeniería Inversa / keygenme4 console
20 Octubre 2011, 20:43 PM
Hola, como vi que se han quedado sin apps para resolver, hice uno mas.

Objetivo: realizar un keygen
  pueden postear aqui user y serial valido.
Bonus: la contraseña del codigo fuente es  la suma de serials de estos usuarios:
ABCD, EFGH, IJKL (sin las comas, simplemente los 3 serials juntos)

Parche: no vale patch, en realidad, si abren la ejecutable en olly, esta señalado donde hacer el patch, asi que no presenta gran desafio.

Dificultad: no tan facil,l no tan dificil. Yo he tardado una hora en generar la rutina que me diera serials validos. (y eso que yo hice la rutina para comprobar la validez)

Formato:
user son 4 caracteres ascii cualquiera.
serial son 8 caracteres hexadecimales, un numero de 32bit rempresentado en ascii.

La generacion tiene dos trucos, analicen el codigo bien ^^
Cualquier duda es bienvenida



le dejo los links y mirrors
http://www.mediafire.com/?2cl5c7vplrkvwvz
http://www.megaupload.com/?d=1CIXGZCR




#11
 Aqui un par de tips que pude recompilar  y  tambien de mi propia experiencia.:

1>Evita los mensajes como "Te tengo lamer... jajaja, estas re mal"

2>Intenta usar encriptacion asimetrica

3>Nunca uses archivos con significado como licencia.dat

4>No alertes que la clave es erronea al momento de chequear la clave, si es erronea, espera, haz algunas cosas mas y luego alerta.

5>Añade delays cortos, como pausas, antes, en el medio y despues de la comprobacion....

6>Usa checksums en todo, dlls, exe, etc...

7>Parchea tu propio software, haz distintas rutinas de validacion para el mismo programa.

8>Guarda serials en lugares poco comunes

9>Guarda nros de series en varios lugares, luego comprueba si son iguales, pero no lo hagas todo junto, sino de a partes... al final, si alguno es difierente... alerta, pero tampoco en el momento.

10>No uses cadenas literales, en lo posible, las cadenas como "chico malo" o "chico bueno" tenelas encryptadas antes de enviar el mensaje, las desincriptas al momento, las usas, y las vuelves a cifrar.

11>Codigo basura, mete mucho codigo de
basura en el medio de la rutina de comprobacion, codigo parecido al que viene antes y despues de comprobacion, camuflalo.

12>Juega con codigo con muchas condiciones inutiles, je, jne, jz por todos lados antes, en el medio y despues de la rutina de comprobacion

13>Usa buena encryptacion, simple XOR no basta.

14>Usa serials largos, no 32 caracteres, sino varios Kb.

15>Evita usar la common runtime library de tu compilador (msvcrt, msvbcrt, etc...) para cosas que puedes programar tu mismo, como strlen, strcpy, strncat, etc...

16>No confies solamente en enpaquetadores

17>Usa ventanas de carga (es imagen que aparece mientras el programa carga), en esa dll, mete codigo de comprobacion tambien, muchas veces se saltaran esa pantalla porque molesta.

18>En la generacion de llaves, usa  RCR y RCL, y si logras, trata que el Carry Flag este puesto con una rutina matematica pseudo aleatoria, de esa manera es dificil saber si rotar_si_acareo va rotar los bits o no.

19>Usa parte del codigo, (bytes de la ejecutable) como parte de la tabla de numeros magicos, asi si parchean el codigo, los numeros magicos ya no son los mismos.

20>Juega con la mente del cracker, si detectas un debugger, no termines el programa, que continue, pero haz la rutina de comprobacion distinta, en otro lugar... cosa que si el cracker logra detectar tu rutina y hace un keygen, no le servira al menos que ejecute el programa dentro del depurador.

21>No te gastes en escribir codigo para matar depuradores

22>cifra serials y nombres y comprueba si coinciden con tu manera.
encrypt the name/serial and check if it matches YOUR way of registering the program.

23>NUNCA, NUNCA pongras la rutina de generacion de llaves dentro de tu programa. Debes crear la rutina inversa, tomate el tiempo.
(NO HACER ESTO: if(generarllave(usuario)==serial_ingresado){ registro ok }
cifra todo el texto en el programa, o la mayoria de el.



Se les ocurre algun otro? o tambien si alguno esta mal?
Saludos
Enko
#12
Crackme 3 by _Enko

Objetivo: Habilitar los menus desactivados registrando el programa. Pueden usar el metodo que desean, patch/crack/keygen

Dificultad:Media
He tardado un par de horas depurando el codigo para que este super-b

Descripcion: Es una aplicacion que al entrar en sus menus, nos dice que la aplicacion no esta registrada y que para que se puedan utilizar esas funciones, primero debemos registrar el programa.

ScreenShot


Links descarga
Mediafire
http://www.mediafire.com/?94pn1yw33x9wa9r
MegaUpload
http://www.megaupload.com/?d=TSHEX5NK

ATENCION
Si no les abre los menus, usen esta version winxsp3 compatible
http://www.mediafire.com/?x0o8xzexy50tga2


Sobretodo:Diviertanse y no se desesperen.

Saludos.
#13
Ingeniería Inversa / KeyGenMe SimpleNotepad
17 Julio 2011, 19:59 PM
Hola, como veo que se pasan depurando programas comerciales, decidí hacer un pequeño keygenme para que se entretengan libres de culpa.


DIFICULTAD: 4 DE 5  (regular)
OBJETIVOs:
Registrar el programa (obtener mensaje de felicitaciones)
El mensaje de felicitacion contiene el password para el 7z que contiene el codigo fuente.

BASTA CON:
Obtener un serial y user valido.
Pueden intentar parchear, pero no va a ser facil.

MODULOS:
Es una ejecutable sola.
el archivo 7z contiene el codigo fuente

CARACTERISTICAS:
La ejecutable NO esta empaquetada
NO hay tecnicas anti depuracion (isdebuggerpresent y demas)
  (pueden usar ollydbg sin problemas)
NO hay saltos innecesarios, el codigo fuente es limpio
NO hay rutinas de mas, el codigo fuente es limpio, ya lo dije no? ^^
El binario tal vez tenga un toque de obfuscacion para molestar el analizador de olly
El PROGRAMA NO ESTA COMPLETO. Imita el NOTEPAD, pero el 80% de las funciones no estan implementadas.


LO MAS IMPORTANTE:
Diviertanse, no se desesperen, cualqueir duda, el codigo fuetne esta NotePad.7z. (a.. pero hace falta el pass)

VERSION FACIL:
http://www.megaupload.com/?d=3TONZPX2
http://www.4shared.com/file/n8tUcKE2/NotePad.html
http://www.filehosting.org/file/details/248075/NotePad.zip

AGREGADO
VERSION DIFICIL
Esta es una version 2.0 con codigo obfuscado.
http://www.mediafire.com/?6lj8ki7sd67xj0h


Saludos a todos.