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

#1
Ingeniería Inversa / Re:[KeygenMe] Matrix
Julio 23, 2015, 05:35:02 PM
user: peterpunk
pass: aaalmmppq

user undercode
pass: cddsstttt

No programo el keygen porque algunos users no podrían tener pass (ese es el motivo de que puse un pass para "underode" en lugar de "underc0de" o "UNDERC0DE"
Aunque el keygenme (yo lo llamaría bruteforceme) lo hace bastante lioso, en bucles multiplcando los caracteres del user con los caracteres del pass, al final se puede reducir a:
user y pass deben ser de 9 caracteres
suma de 1, 4 y 7 letras del user multiplicado por la suma de 3 primeras letras del pass
suma de 2, 5 y 8 letras del user multiplicado por la suma de las 3 letras del medio del pass
suma de 3, 6 y 9 letras del user multiplicado por la suma de las últimas 3 letras del pass
y la suma de los tres anteriores valores tiene que ser igual a 0x4CDFB (314875)

Ejemplo:
peterpunk ->
ascii(p) + ascii(e) + ascii(u) = 330
ascii(e) + ascii(r) + ascii(n) = 325
ascii(t) + ascii(p) + ascii(k) = 335
y ahora habría que buscar tres incógnitas tal que
330x + 325y + 335z = 314875
que sólo lograremos resolver por fuerza bruta
y obtendremos valores como estos (existen más posibilidades, éstos son los primeros que encuentro si empiezo a buscar a partir de la "a" minúscula):
x = 291, y = 326, z = 337
(330*291 + 325*326 + 335*337 = 314875)
Por último habría que trasladar esos resultados a caracteres.
Como ya he dicho, cada resultado es la suma de tres caracteres, así que por ejemplo, 326, podría ser "lmm" o "mlm" o "nnj" o lo que nos cuadre.

Por si a alguien le interesa, un pequeño bruteforce en masm32:
Código: php
include masm32rt.inc

.data
szTitulo db "Bruteforcer",0
szFormato db "User: %s",13,"Pass: %s",0

.data?
szUser db 10 dup (?)
szPass db 10 dup (?)
Buffer db 50 dup (?)
dwUser1 dd ?
dwUser2 dd ?
dwUser3 dd ?
dwPass1 dd ?
dwPass2 dd ?
dwPass3 dd ?

.code

start:
    mov esi, offset szUser
    mov dwUser1, 291 ;"aaa"
    .while dwUser1 <= 366 ;"zzz"
        mov dwUser2, 291
        .while dwUser2 <= 366
            mov dwUser3, 291
            .while dwUser3 <= 366
                mov dwPass1, 291
                .while dwPass1 <= 366
                    mov dwPass2, 291
                    .while dwPass2 <= 366
                        mov dwPass3, 291
                        .while dwPass3 <= 366
                            mov eax, dwPass3
                            imul eax, dwUser3
                            mov edx, eax
                            mov eax, dwPass2
                            imul eax, dwUser2
                            add edx, eax
                            mov eax, dwPass1
                            imul eax, dwUser1
                            add edx, eax
                            .if edx == 4cdfbh
                                mov ecx, 3
                                xor ebx, ebx
                                .repeat
                                    lea eax, [offset dwUser1 + ebx*4]
                                    mov eax, [eax]
                                    cdq
                                    div ecx
                                    mov [esi + ebx], al
                                    mov [esi + ebx + 3], al
                                    mov [esi + ebx + 6], al
                                    .if dl == 2
                                        inc byte ptr [esi + ebx + 3]
                                        inc byte ptr [esi + ebx + 6]
                                    .elseif dl == 1
                                        inc byte ptr [esi + ebx + 6]
                                    .endif
                                    inc ebx
                                .until ebx == 3
                                mov edi, offset szPass
                                xor ebx, ebx
                                .repeat
                                    lea eax, [offset dwPass1 + ebx*4]
                                    mov eax, [eax]
                                    cdq
                                    div ecx
                                    mov [edi], al
                                    mov [edi + 1], al
                                    mov [edi + 2], al
                                    .if dl == 2
                                        inc byte ptr [edi + 1]
                                        inc byte ptr [edi + 2]
                                    .elseif dl == 1
                                        inc byte ptr [edi + 2]
                                    .endif
                                    add edi, 3
                                    inc ebx
                                .until ebx == 3
                                invoke wsprintf, addr Buffer, addr szFormato, esi, addr szPass
                                invoke MessageBox, NULL, addr Buffer, addr szTitulo, MB_OKCANCEL
                                .if eax == IDCANCEL
                                    jmp @Sair
                                .endif
                            .endif
                            inc dwPass3
                        .endw
                        inc dwPass2
                    .endw
                    inc dwPass1
                .endw
                inc dwUser3
            .endw
            inc dwUser2
        .endw
        inc dwUser1
    .endw
@Sair:
    invoke ExitProcess, eax

end start


Saludos.