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ú

Mensajes - _Enko

#411
Extraer el swf  me ha costado 30 min tomando en cuenta que es la primera vez que lo hago.

No lo habia intentado ya que no se desempacar, pero como vi que dijiste que el keygen es flash, y peterpunk saco el serial sin desempacar  decidi intentarlo.

mcksys crack 4 swf
http://www.mediafire.com/?ydgfk6wjelajimy
(el swf extraido)

no desempaque la ejecutable tampoco, el metodo usado:

Ejecutar el crack
OllyDBG
AttachProcess (va avisar que los breackpoints no funcionaran)
Binary Search: "Ingresa tu nombre"
Copiar bloque de memoria
Search: "FWS" (FWS version 08,  size 91FE0000 65kb,)
(va aparecer 3 veces, nos interesa el ultimo. O mejor dicho el primero arriba del texto "ingresa tu nombre")
Sabiendo el tamaño (2do dword) binary copy el bloque que corresponde
Editor hexadecimal: Binary PAST
Guardar como swf.


No tengo decompilador de flash  >:D
A ver si me bajo alguno...
Saludos.


editado:
Esto de decompilador de flash resutla bastante sencillo, te muestra directamente la rutina ^^

#412
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.
#413
Ingeniería Inversa / Re: [Reto] Diofanto's Crackme
2 Diciembre 2011, 15:53 PM
Cita de: Иōҳ en  2 Diciembre 2011, 15:42 PM
Y porqué borras tu VM?, tan solo hasle un snapshot y listo.

O copiar y pegar el archivo del disco rigido ^^
#414
Se me ocurre una  analogia chocante:
si alguien distribuye una lista en papel con los lugares en donde venden droga.  ¿Es ilegal?
No, porque esta tipificado el delito de venta de droga, no el de distribucion de una lista en donde se vende. Se facilita el delito de venta? Publicidad de un producto ilegal? (he escuchado el termino publicidad ilegal, pero no de un producto ilegal)
Si es probable que la policia lo vaya a buscar para saber como se obtuvo tal lista... si es probable que el que la venda lo visiten para romper piernas...
Pero no es probable que uno termine en la carcel. Vivo o muerto, pero en la carcel uno no quedaria.
#415
Ingeniería Inversa / Re: [Reto] Diofanto's Crackme
2 Diciembre 2011, 07:14 AM
Keygen:
http://www.mediafire.com/?3myalaqt3iy5eg3

(genera 10 llaves aleatorias por intento)
Saludos.

#416
Ingeniería Inversa / Re: Crear crackme inteligente
1 Diciembre 2011, 22:55 PM
Mira que el objetivo de una ejecutable automodificable es este:

la primera vez que se abre ves:

mov eax, 10
ret

la segudna vez que la abres por ejemplo:

xor ebx, ebx
mov eax, eax
nop
ret

No vale hacer una comparacion y ejecutar distintos pedazos de codigo, no es lo que se llama "automodificable"

Saludos.
#417
La mayoria de las respuestas a tus preguntas estan aqui:

Intel Architecture Software Developer System Programmin Manual.

http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-software-developer-system-programming-manual-325384.pdf

Hay uno de AMD tambien del mismo estilo, bastante parecido.
#418
ASM / Re: masm, msvcrt.
1 Diciembre 2011, 19:20 PM
Jeje, cosas que pasan cuando la herramienta no es SISO. (Same Input = Same Output) :laugh:

desde ayer me habia encaprichado de que no funcionara y no encontraba explicacion... bastante molesto, dormi mal  :P


gracias por tomarte el  tiempo de ayudar :)

#419
acabo de probar el codigo del primer post y funciona ok si:

en QEDIT de masm32, pones:
Project>>Console BuildAll

y ahi ya funciona bien.

casualmetne era el mismo error que estaba teniendo al querer usar la msvcrt con masm.
#420
ASM / Re: masm, msvcrt.
1 Diciembre 2011, 18:48 PM
Cita de: Eternal Idol en  1 Diciembre 2011, 17:42 PM
¿Cambia en algo no llamar a WriteConsole? Mezclar la CRT con la API tal vez de problemas ...

Originalmente el codigo era sin llamar a la api.
Código (asm) [Seleccionar]

.386
.model flat, stdcall
option casemap :none   ; case sensitive

include \masm32\include\msvcrt.inc
includelib \masm32\lib\msvcrt.lib

.code
szMsg         db "hola mundo",0
szPause       db "Pause",0
szFrm         db "%s",0

start:

invoke crt_printf, offset szFrm,  offset szMsg    
;push offset szMsg
;push offset szFrm
;call crt_printf
;add esp, 8

push offset szPause
call crt_system
add esp, 4

ret
end start


pd: si uso qedit, Antes guardo el archivo y luego  es BuildAll o AssembleLink?

Saludos.


edited:
milagrosamente cai en el problema...
SOLUCION:
en QEdit para aplicacion consola hay que hacer click en
CONSOLE BUILD ALL.

ya me parecia muy raro.