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

#61
Ingeniería Inversa / Crackme fácil
25 Octubre 2009, 18:29 PM
Buenas a todos.
Aquí os dejo un crackme muy sencillo programado en vb6:
rapidshare -> http://rapidshare.com/files/297775061/Crackme.zip.html
megaupload -> http://www.megaupload.com/?d=F3YMKH72

No tiene trucos antidebugger de ningún tipo y también es muy simple. Es un poco más complicado que
http://foro.elhacker.net/ingenieria_inversa/crackme_muy_facil-t271924.0.html
el programado con el masm32 simplemente porque el vb6 "ensucia" mucho más los ejecutables.
Éste crackme consta de dos partes. La primera es una única clave, que en cuanto sea correcta habilita la segunda parte, que consta de nombre y serial, para la que deberéis programar un keygen. Ya os advierto que la relación nombre/serial de este crackme es aún más sencilla que la del otro aunque parezca más compleja por culpa del vb6.
Eso sí, no me vale que habilitéis la segunda parte con ningún programa externo ni que lo parcheéis. Sólo será válido el código. Esta parte, puede que sea más complicada que la segunda pero podéis preguntarme cualquier duda.
Saludos y suerte a todos.
#62
Ingeniería Inversa / Crackme muy fácil.
25 Octubre 2009, 18:21 PM
Buenas a todos,
aquí les dejo este sencillísimo "keygenme" programado con el MASM32:
rapidshare -> http://rapidshare.com/files/297771977/Crackme.zip.html
megaupload -> http://www.megaupload.com/?d=JSCXZRF7

Está pensado para los que quieran empezar en este mundo y nunca hayan creado un keygen. No vale como solución un parche del crackme, porque he dejado el ejecutable lleno de comentarios para ayudar un poco a los novatos; entre otras cosas indiqué dónde se debería parchear. Los comentarios los he puesto en inglés para asegurarme que se mostraban en los debuggers como cadenas de texto.

Saludos.
#63
ASM / Re: Diferencia entre estos dos codes (ASM)
24 Octubre 2009, 17:43 PM
La diferencia de tamaño viene dada porque en el primer ejemplo los datos del título y texto van en una sección nueva (.data) que no existe en el segundo ejemplo, que lo incluye directamente en el código.
Eso quiere decir que si los desensamblas verás:

Código del primer ejemplo:
00401000 <>/$  6A 00                    PUSH 0                                  ; /Style = MB_OK|MB_APPLMODAL
00401002   |.  68 0B304000              PUSH 0040300B                           ; |Title = "Titulo"
00401007   |.  68 00304000              PUSH 00403000                           ; |Text = "Hola mundo"
0040100C   |.  6A 00                    PUSH 0                                  ; |hOwner = NULL
0040100E   |.  E8 07000000              CALL <JMP.&user32.MessageBoxA>          ; \MessageBoxA
00401013   |.  6A 00                    PUSH 0                                  ; /ExitCode = 0
00401015   \.  E8 06000000              CALL <JMP.&kernel32.ExitProcess>        ; \ExitProcess
0040101A    $- FF25 08204000            JMP [<&user32.MessageBoxA>]             ;  user32.MessageBoxA
00401020    .- FF25 00204000            JMP [<&kernel32.ExitProcess>]           ;  kernel32.ExitProcess

y sus secciones:
Memory map
Address    Size       Owner                          Section      Contains                    Type              Access         Initial   Mapped as
00400000   00001000   Normal   00400000 (itself)                  PE header                   Imag 01001002     R              RWE
00401000   00001000   Normal   00400000              .text        code                        Imag 01001002     R              RWE
00402000   00001000   Normal   00400000              .rdata       imports                     Imag 01001002     R              RWE
00403000   00001000   Normal   00400000              .data        data                        Imag 01001002     R              RWE


Código del segundo ejemplo (mínimo):
00401000 <>/$ /EB 12                    JMP SHORT 00401014
00401002   |. |48 6F 6C 61 20 6D 75 6E >ASCII "Hola mundo",0
0040100D   |. |54 69 74 75 6C 6F 00     ASCII "Titulo",0
00401014   |> \6A 00                    PUSH 0                                  ; /Style = MB_OK|MB_APPLMODAL
00401016   |.  68 0D104000              PUSH 0040100D                           ; |Title = "Titulo"
0040101B   |.  68 02104000              PUSH 00401002                           ; |Text = "Hola mundo"
00401020   |.  6A 00                    PUSH 0                                  ; |hOwner = NULL
00401022   |.  E8 07000000              CALL <JMP.&user32.MessageBoxA>          ; \MessageBoxA
00401027   |.  6A 00                    PUSH 0                                  ; /ExitCode = 0
00401029   \.  E8 06000000              CALL <JMP.&kernel32.ExitProcess>        ; \ExitProcess
0040102E    $- FF25 08204000            JMP [<&user32.MessageBoxA>]             ;  user32.MessageBoxA
00401034    .- FF25 00204000            JMP [<&kernel32.ExitProcess>]           ;  kernel32.ExitProcess

y sus secciones:
Memory map
Address    Size       Owner                          Section      Contains                    Type              Access         Initial   Mapped as
00400000   00001000   Minimo   00400000 (itself)                  PE header                   Imag 01001002     R              RWE
00401000   00001000   Minimo   00400000              .text        code                        Imag 01001002     R              RWE
00402000   00001000   Minimo   00400000              .rdata       data,imports                Imag 01001002     R              RWE


El tamaño de las secciones se puede definir en la compilación, pero para el MASM por defecto es de 1 kb por sección, y ese es el tamaño que ganas entre ambos códigos.

Con respecto al "@F" es una de las palabras reservadas del MASM que hace referencia a la siguiente etiqueta (para los saltos) y existe otra "@B" para saltar a la etiqueta anterior.
#64
Ingeniería Inversa / Re: CrackME#1 by Thunder
23 Octubre 2009, 14:59 PM
ThUnDeR_07, ¿te vale rapidshare?
http://rapidshare.com/files/296817429/Keygen_for_Thunder_s_Crackme__1_by_PeterPunk.zip.html

Ahora mismo no me apetece mucho escribir un tuto (tengo pendientes varios desde hace meses para crackmes.de, aunque igual ya están resueltos), pero aquí va un mini resumen:
- Desempaqué el .exe con el upx (parámetro -d)
- Ejecuté el crackme con el Olly y tras probarlo, busqué todas las cadenas.
- Había referencias a mi nick en 0x47D1A2 y al mostrarlo en el dump, sorpresa, cadena "REGISTRADO . . ." en 0x47D1C3.
- Marcamos la primera "R" de la cadena en el dump y buscamos las referencias a esta cadena (CTRL+R):
Código (asm) [Seleccionar]
References in Crackme_:.text to 0047D1C3..0047D1C3, item 0
Address=00402FCE
Disassembly=CMP DL,[ECX+47D1C3]

- Estudiamos esa parte del código:
Código (asm) [Seleccionar]
00402F84   |> /8B55 E4                  /MOV EDX,[EBP-1C]
00402F87   |. |33C9                     |XOR ECX,ECX                            ;  (Initial CPU selection)
00402F89   |. |8A4C15 E8                |MOV CL,[EBP+EDX-18]
00402F8D   |. |81C1 79FFFFFF            |ADD ECX,-87
00402F93   |. |894D FC                  |MOV [EBP-4],ECX
00402F96   |. |330D 8CD14700            |XOR ECX,[47D18C]
00402F9C   |. |894D FC                  |MOV [EBP-4],ECX
00402F9F   |. |8A45 FC                  |MOV AL,[EBP-4]
00402FA2   |. |8B55 E4                  |MOV EDX,[EBP-1C]
00402FA5   |. |8882 B2D14700            |MOV [EDX+47D1B2],AL
00402FAB   |. |FF45 E4                  |INC DWORD PTR [EBP-1C]
00402FAE   |> |8D4D E8                   LEA ECX,[EBP-18]
00402FB1   |. |51                       |PUSH ECX
00402FB2   |. |E8 09B50500              |CALL 0045E4C0
00402FB7   |. |59                       |POP ECX
00402FB8   |. |3B45 E4                  |CMP EAX,[EBP-1C]
00402FBB   |.^\77 C7                    \JA SHORT 00402F84
00402FBD   |.  EB 03                    JMP SHORT 00402FC2
00402FBF   |>  FF45 F8                  /INC DWORD PTR [EBP-8]
00402FC2   |>  8B45 F8                   MOV EAX,[EBP-8]
00402FC5   |.  8A90 B2D14700            |MOV DL,[EAX+47D1B2]
00402FCB   |.  8B4D F8                  |MOV ECX,[EBP-8]
00402FCE   |.  3A91 C3D14700            |CMP DL,[ECX+47D1C3]
00402FD4   |.^ 74 E9                    \JE SHORT 00402FBF

- Con una ojeada vemos que compara la cadena con otra que varía según un xor en la línea:
Código (asm) [Seleccionar]
00402F96   |.  330D 8CD14700            |XOR ECX,[47D18C]
- Para que las dos cadenas sean iguales necesitamos un "xor ecx, 7"
- Buscamos las referencias a 0x47D18C:
References in Crackme_:.text to 0047D18C
Address     Disassembly                                 Comment
00401AB9    MOV [47D18C],EDX
00401B0F    INC DWORD PTR [47D18C]                      DS:[0047D18C]=00000001
004020A5    INC DWORD PTR [47D18C]                      DS:[0047D18C]=00000001
0040252A    INC DWORD PTR [47D18C]                      DS:[0047D18C]=00000001
0040281E    INC DWORD PTR [47D18C]                      DS:[0047D18C]=00000001
004029C4    INC DWORD PTR [47D18C]                      DS:[0047D18C]=00000001
00402CC0    INC DWORD PTR [47D18C]                      DS:[0047D18C]=00000001
00402ED8    INC DWORD PTR [47D18C]                      DS:[0047D18C]=00000001
00402F96    XOR ECX,[47D18C]                            (Initial CPU selection)

- Estudiamos el código próximo a todas las referencias que hagan "INC DWORD PTR [47D18C]" y ahí encontraremos fácilmente las características del serial:
1 - El nombre introducido debe tener entre 5 y 15 caracteres
2 - La longitud del serial es de 21
3 - Los caracteres 3, 11y 19 del serial son guiones
4 - Hay más caracteres fijos: los dos primeros son "TH", los anteriores al segundo guion seon "UN", "D3" los anteriores al tercer guion y el último es una "R": TH-?????UN-?????D3-?R
5 - El penúltimo caracter es la longitud del nombre
6 - Los cinco primeros que faltan son suma_asciis_nombre + 0x1987 xor 0xBADD + 0xDEAD en hexadecimal
7 - Los restantes son suma_asciis_nombre + 0x2009 xor 0xDADD + 0xF00D en hexadecimal
#65
Ingeniería Inversa / Re: CrackME#1 by Thunder
22 Octubre 2009, 13:21 PM
LLevaba meses sin entrar por aquí (e incluso sin entretenerme con la ingeniería inversa) pero estaba aburrido.

El keygen:
http://www.megaupload.com/?d=IWLW7KD0

Está compilado con el Masm32 y sólo testado en Windows XP, así que si alguien lo prueba en Vista ¿me podría decir cómo le va?
En principio el nombre que aparece por defecto es con el que está registrado Windows.
El fondo del Keygen debe ser igual que la parte del fondo del escritorio sobre la que está.
Debería sonar un midi que está en el keygen como recurso sin ser extraído temporalmente.

PD: Si a alguien que se le de bien el fotochop o cualquier otro programa de diseño, me quiere hacer otra imagen para el keygen (250x70) con temática Ingeniería inversa y punk (incluyendo mi nombre claro) le estaría eternamente agradecido  ;D (también admoto icono nuevo  :silbar:)
#66
Ingeniería Inversa / Re: Reto Panda
2 Abril 2009, 18:37 PM
Sí, lo cierto es que era muy fácil y Anon, no hace falta que revises tus apuntes sobre el FPU.
#67
Ingeniería Inversa / Re: OllyDBG
17 Marzo 2009, 20:17 PM
Creo que no puedes, por que el Olly necesita usar una fuente en la que todos los caracteres tegan el mismo ancho (no recuerdo como se llaman este tipo de fuentes), para que no se descuadre nada.

Demostración:

0044F185   . 8B0D 9C0C4500  MOV ECX,DWORD PTR DS:[450C9C]            ;  KeyFileM.00451C1C
0044F18B   . A1 0C0E4500    MOV EAX,DWORD PTR DS:[450E0C]
0044F190   . 8B00           MOV EAX,DWORD PTR DS:[EAX]
0044F192   . 8B15 18E64400  MOV EDX,DWORD PTR DS:[44E618]            ;  KeyFileM.0044E664
0044F198   . E8 A7DFFFFF    CALL KeyFileM.0044D144


0044F185   . 8B0D 9C0C4500  MOV ECX,DWORD PTR DS:[450C9C]            ;  KeyFileM.00451C1C
0044F18B   . A1 0C0E4500    MOV EAX,DWORD PTR DS:[450E0C]
0044F190   . 8B00           MOV EAX,DWORD PTR DS:[EAX]
0044F192   . 8B15 18E64400  MOV EDX,DWORD PTR DS:[44E618]            ;  KeyFileM.0044E664
0044F198   . E8 A7DFFFFF    CALL KeyFileM.0044D144
#68
PeterPunk 1 - 0 DPSClick  ;-)
#69
Buenas CICOLO_111234, si lo que quieres es invertir la imagen vertical u horizontalmente lo más fácil es usar la API StretchBlt.
Aquí un pequeño ejemplo. Pon tres picture boxes y un botón en un formulario y copia este código:
Código (vb) [Seleccionar]
Option Explicit

Const ScrCopy = &HCC0020

Private Declare Function StretchBlt Lib "gdi32" ( _
    ByVal hdc As Long, _
    ByVal X As Long, _
    ByVal Y As Long, _
    ByVal nWidth As Long, _
    ByVal nHeight As Long, _
    ByVal hSrcDC As Long, _
    ByVal xSrc As Long, _
    ByVal ySrc As Long, _
    ByVal nSrcWidth As Long, _
    ByVal nSrcHeight As Long, _
    ByVal dwRop As Long) As Long
   
Private Declare Function PaintDesktop Lib "user32" (ByVal hdc As Long) As Long


Private Sub Command1_Click()
    'Ponemos en el Picture1 un trozo del fondo de escritorio:
    PaintDesktop Picture1.hdc
    'Espejo vertical:
    StretchBlt Picture2.hdc, 100, 0, -100, 100, Picture1.hdc, 0, 0, 100, 100, ScrCopy
    'Espejo horizontal:
    StretchBlt Picture3.hdc, 0, 100, 100, -100, Picture1.hdc, 0, 0, 100, 100, ScrCopy
End Sub

Private Sub Form_Load()
    Me.Height = 4000
    Me.Width = 4000
    Me.AutoRedraw = True
    Me.ScaleMode = vbPixels
   
    Picture1.Top = 20
    Picture1.Left = 20
    Picture1.Width = 100
    Picture1.Height = 100
    Picture1.BorderStyle = 0
   
    Picture2.Top = 20
    Picture2.Left = 120
    Picture2.Width = 100
    Picture2.Height = 100
    Picture2.BorderStyle = 0
   
    Picture3.Top = 120
    Picture3.Left = 20
    Picture3.Width = 100
    Picture3.Height = 100
    Picture3.BorderStyle = 0

    Command1.Top = 120
    Command1.Left = 120
    Command1.Width = 100
    Command1.Height = 100

End Sub


Saludos.
#70
QUE BIEN LO HAZ descifrado LA RESPUESTA ES NIRVANA