Intro
Hoy vamos a desmitificar un poco a Visual Basic. El Crackme reza que acabemos con la nag y hagamos un keygen.
La NAG

Lo primero que debemos establecer es a que tipo de Nag nos estamos enfrentando, si es una MessageBox, se localiza y se parchea, si es un formulario la cosa ya cambia un poco, ya que encontrar esa parte del código puede resultar tedioso.
Yo voy a utilizar el camino fácil. En VB contamos con una estupenda herramienta como es VBReformer, que nos muestra las entrañas del crackme y nos posibilita cambiar ciertos parametros.
Abrimos el crackme con VBReformer y vemos su contenido. Localizamos rápidamente el formulario que aparece inicialmente (CMSplash) y el temporizador que contiene (Timer1). Inicialmente el timer tiene un interval de 7000, es decir, la nag se muestra durante 7 segundos. Es tan sencillo como cambiarlo por 1 y guardar el ejecutable (File > Save binary as).

Si no disponemos de esta estupenda herramienta, siempre podemos localizar el timer con un editor hexadecimal. Localizamos en Olly el nombre del timer (en las string references lo veréis), y lo buscamos en el editor hexadecimal. La duración de la nag la debemos estimar nosotros y a continuación buscar ese valor hexadecimal. Imaginemos que estimamos que son 7 segundos, lo pasamos a milisegundos y a hexadecimal. 7000 = 0x1B58. Buscamos en el editor hexadecimal «Timer1» y a continuación localizamos el valor 1B58 invertido, es decir, 581B. En las imágenes inferiores se ve claro.


Cambiando el valor ya lo tendriámos.
El algoritmo
El algoritmo de este crackme es muy sencillo pero he elegido este en concreto para que veáis las vueltas que da VB para hacer 6 operaciones matemáticas. A continuación tenéis el código íntegro comentado y debajo el resumen.
004081F5 . FF15 F8B04000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaLenBstr>] ; MSVBVM50.__vbaLenBstr
004081FB . 8BF8 MOV EDI,EAX
004081FD . 8B4D E8 MOV ECX,DWORD PTR SS:[EBP-18]
00408200 . 69FF 385B0100 IMUL EDI,EDI,15B38 ; TEMP = Len(nombre) *15B38
00408206 . 51 PUSH ECX
00408207 . 0F80 B7050000 JO CrackmeV.004087C4
0040820D . FF15 0CB14000 CALL DWORD PTR DS:[<&MSVBVM50.#516>] ; MSVBVM50.rtcAnsiValueBstr
00408213 . 0FBFD0 MOVSX EDX,AX ; digito a ax
00408216 . 03FA ADD EDI,EDX ; TEMP +=1digito
00408218 . 0F80 A6050000 JO CrackmeV.004087C4
0040821E . 57 PUSH EDI ; MSVBVM50.__vbaObjSet
0040821F . FF15 F4B04000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrI4>] ; MSVBVM50.__vbaStrI4
00408225 . 8BD0 MOV EDX,EAX
00408227 . 8D4D E0 LEA ECX,DWORD PTR SS:[EBP-20]
0040822A . FF15 94B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrMove>] ; MSVBVM50.__vbaStrMove
00408230 . 8BBD 50FFFFFF MOV EDI,DWORD PTR SS:[EBP-B0]
00408236 . 50 PUSH EAX
00408237 . 57 PUSH EDI ; MSVBVM50.__vbaObjSet
00408238 . FF93 A4000000 CALL DWORD PTR DS:[EBX+A4] ; MSVBVM50.0F050D32
0040823E . 85C0 TEST EAX,EAX
00408240 . 7D 12 JGE SHORT CrackmeV.00408254
00408242 . 68 A4000000 PUSH 0A4
00408247 . 68 AC6F4000 PUSH CrackmeV.00406FAC
0040824C . 57 PUSH EDI ; MSVBVM50.__vbaObjSet
0040824D . 50 PUSH EAX
0040824E . FF15 18B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaHresultCheck>; MSVBVM50.__vbaHresultCheckObj
00408254 > 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
00408257 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
0040825A . 50 PUSH EAX
0040825B . 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
0040825E . 51 PUSH ECX
0040825F . 52 PUSH EDX
00408260 . 6A 03 PUSH 3
00408262 . FF15 80B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaFreeStrList>>; MSVBVM50.__vbaFreeStrList
00408268 . 83C4 10 ADD ESP,10
0040826B . 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
0040826E . 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
00408271 . 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
00408274 . 50 PUSH EAX
00408275 . 51 PUSH ECX
00408276 . 52 PUSH EDX
00408277 . 6A 03 PUSH 3
00408279 . FF15 08B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaFreeObjList>>; MSVBVM50.__vbaFreeObjList
0040827F . 8B9D 40FFFFFF MOV EBX,DWORD PTR SS:[EBP-C0] ; CrackmeV.00409A68
00408285 . 83C4 10 ADD ESP,10
00408288 . 8B83 FC020000 MOV EAX,DWORD PTR DS:[EBX+2FC]
0040828E . 56 PUSH ESI
0040828F . 8985 38FFFFFF MOV DWORD PTR SS:[EBP-C8],EAX
00408295 . FFD0 CALL EAX
00408297 . 8B3D 20B14000 MOV EDI,DWORD PTR DS:[<&MSVBVM50.__vbaObjSet>] ; MSVBVM50.__vbaObjSet
0040829D . 50 PUSH EAX
0040829E . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
004082A1 . 50 PUSH EAX
004082A2 . FFD7 CALL EDI ; MSVBVM50.__vbaObjSet; <&MSVBVM50.__vbaObjSet>
004082A4 . 56 PUSH ESI
004082A5 . 8985 58FFFFFF MOV DWORD PTR SS:[EBP-A8],EAX
004082AB . FF93 08030000 CALL DWORD PTR DS:[EBX+308]
004082B1 . 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
004082B4 . 50 PUSH EAX
004082B5 . 51 PUSH ECX
004082B6 . FFD7 CALL EDI ; MSVBVM50.__vbaObjSet
004082B8 . 8BD8 MOV EBX,EAX
004082BA . 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
004082BD . 50 PUSH EAX
004082BE . 53 PUSH EBX
004082BF . 8B13 MOV EDX,DWORD PTR DS:[EBX] ; MSVBVM50.0F025A95
004082C1 . FF92 A0000000 CALL DWORD PTR DS:[EDX+A0]
004082C7 . 85C0 TEST EAX,EAX
004082C9 . 7D 12 JGE SHORT CrackmeV.004082DD
004082CB . 68 A0000000 PUSH 0A0
004082D0 . 68 AC6F4000 PUSH CrackmeV.00406FAC
004082D5 . 53 PUSH EBX
004082D6 . 50 PUSH EAX
004082D7 . FF15 18B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaHresultCheck>; MSVBVM50.__vbaHresultCheckObj
004082DD > 8B8D 58FFFFFF MOV ECX,DWORD PTR SS:[EBP-A8]
004082E3 . 8B55 E8 MOV EDX,DWORD PTR SS:[EBP-18]
004082E6 . 52 PUSH EDX
004082E7 . 8B19 MOV EBX,DWORD PTR DS:[ECX]
004082E9 . FF15 74B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaR8Str>] ; MSVBVM50.__vbaR8Str
004082EF . D905 08104000 FLD DWORD PTR DS:[401008]
004082F5 . 833D 00904000 00 CMP DWORD PTR DS:[409000],0
004082FC . 75 08 JNZ SHORT CrackmeV.00408306
004082FE . D835 0C104000 FDIV DWORD PTR DS:[40100C] ; 10 / 5 = 2
00408304 . EB 0B JMP SHORT CrackmeV.00408311
00408306 > FF35 0C104000 PUSH DWORD PTR DS:[40100C]
0040830C . E8 578DFFFF CALL <JMP.&MSVBVM50._adj_fdiv_m32>
00408311 > 83EC 08 SUB ESP,8
00408314 . DFE0 FSTSW AX
00408316 . A8 0D TEST AL,0D
00408318 . 0F85 A1040000 JNZ CrackmeV.004087BF
0040831E . DEC1 FADDP ST(1),ST ; TEMP +=2
00408320 . DFE0 FSTSW AX
00408322 . A8 0D TEST AL,0D
00408324 . 0F85 95040000 JNZ CrackmeV.004087BF
0040832A . DD1C24 FSTP QWORD PTR SS:[ESP]
0040832D . FF15 48B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrR8>] ; MSVBVM50.__vbaStrR8
00408333 . 8BD0 MOV EDX,EAX
00408335 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
00408338 . FF15 94B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrMove>] ; MSVBVM50.__vbaStrMove
0040833E . 899D 34FFFFFF MOV DWORD PTR SS:[EBP-CC],EBX
00408344 . 8B9D 58FFFFFF MOV EBX,DWORD PTR SS:[EBP-A8]
0040834A . 50 PUSH EAX
0040834B . 8B85 34FFFFFF MOV EAX,DWORD PTR SS:[EBP-CC]
00408351 . 53 PUSH EBX
00408352 . FF90 A4000000 CALL DWORD PTR DS:[EAX+A4]
00408358 . 85C0 TEST EAX,EAX
0040835A . 7D 12 JGE SHORT CrackmeV.0040836E
0040835C . 68 A4000000 PUSH 0A4
00408361 . 68 AC6F4000 PUSH CrackmeV.00406FAC
00408366 . 53 PUSH EBX
00408367 . 50 PUSH EAX
00408368 . FF15 18B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaHresultCheck>; MSVBVM50.__vbaHresultCheckObj
0040836E > 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
00408371 . 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
00408374 . 51 PUSH ECX
00408375 . 52 PUSH EDX
00408376 . 6A 02 PUSH 2
00408378 . FF15 80B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaFreeStrList>>; MSVBVM50.__vbaFreeStrList
0040837E . 83C4 0C ADD ESP,0C
00408381 . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
00408384 . 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00408387 . 50 PUSH EAX
00408388 . 51 PUSH ECX
00408389 . 6A 02 PUSH 2
0040838B . FF15 08B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaFreeObjList>>; MSVBVM50.__vbaFreeObjList
00408391 . 8B95 40FFFFFF MOV EDX,DWORD PTR SS:[EBP-C0] ; CrackmeV.00409A68
00408397 . 83C4 0C ADD ESP,0C
0040839A . 8B82 00030000 MOV EAX,DWORD PTR DS:[EDX+300]
004083A0 . 56 PUSH ESI
004083A1 . 8985 30FFFFFF MOV DWORD PTR SS:[EBP-D0],EAX
004083A7 . FFD0 CALL EAX
004083A9 . 50 PUSH EAX
004083AA . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
004083AD . 50 PUSH EAX
004083AE . FFD7 CALL EDI ; MSVBVM50.__vbaObjSet
004083B0 . 56 PUSH ESI
004083B1 . 8985 58FFFFFF MOV DWORD PTR SS:[EBP-A8],EAX
004083B7 . FF95 38FFFFFF CALL DWORD PTR SS:[EBP-C8] ; MSVBVM50.0F10C340
004083BD . 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
004083C0 . 50 PUSH EAX
004083C1 . 51 PUSH ECX
004083C2 . FFD7 CALL EDI ; MSVBVM50.__vbaObjSet
004083C4 . 8BD8 MOV EBX,EAX
004083C6 . 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
004083C9 . 50 PUSH EAX
004083CA . 53 PUSH EBX
004083CB . 8B13 MOV EDX,DWORD PTR DS:[EBX] ; MSVBVM50.0F025A95
004083CD . FF92 A0000000 CALL DWORD PTR DS:[EDX+A0]
004083D3 . 85C0 TEST EAX,EAX
004083D5 . 7D 12 JGE SHORT CrackmeV.004083E9
004083D7 . 68 A0000000 PUSH 0A0
004083DC . 68 AC6F4000 PUSH CrackmeV.00406FAC
004083E1 . 53 PUSH EBX
004083E2 . 50 PUSH EAX
004083E3 . FF15 18B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaHresultCheck>; MSVBVM50.__vbaHresultCheckObj
004083E9 > 8B8D 58FFFFFF MOV ECX,DWORD PTR SS:[EBP-A8]
004083EF . 8B55 E8 MOV EDX,DWORD PTR SS:[EBP-18]
004083F2 . 52 PUSH EDX
004083F3 . 8B19 MOV EBX,DWORD PTR DS:[ECX]
004083F5 . FF15 74B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaR8Str>] ; MSVBVM50.__vbaR8Str
004083FB . DC0D 10104000 FMUL QWORD PTR DS:[401010] ; *3
00408401 . 83EC 08 SUB ESP,8 ; -2
00408404 . DC25 18104000 FSUB QWORD PTR DS:[401018]
0040840A . DFE0 FSTSW AX
0040840C . A8 0D TEST AL,0D
0040840E . 0F85 AB030000 JNZ CrackmeV.004087BF
00408414 . DD1C24 FSTP QWORD PTR SS:[ESP]
00408417 . FF15 48B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrR8>] ; MSVBVM50.__vbaStrR8
0040841D . 8BD0 MOV EDX,EAX
0040841F . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
00408422 . FF15 94B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrMove>] ; MSVBVM50.__vbaStrMove
00408428 . 899D 2CFFFFFF MOV DWORD PTR SS:[EBP-D4],EBX
0040842E . 8B9D 58FFFFFF MOV EBX,DWORD PTR SS:[EBP-A8]
00408434 . 50 PUSH EAX
00408435 . 8B85 2CFFFFFF MOV EAX,DWORD PTR SS:[EBP-D4]
0040843B . 53 PUSH EBX
0040843C . FF90 A4000000 CALL DWORD PTR DS:[EAX+A4]
00408442 . 85C0 TEST EAX,EAX
00408444 . 7D 12 JGE SHORT CrackmeV.00408458
00408446 . 68 A4000000 PUSH 0A4
0040844B . 68 AC6F4000 PUSH CrackmeV.00406FAC
00408450 . 53 PUSH EBX
00408451 . 50 PUSH EAX
00408452 . FF15 18B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaHresultCheck>; MSVBVM50.__vbaHresultCheckObj
00408458 > 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
0040845B . 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
0040845E . 51 PUSH ECX
0040845F . 52 PUSH EDX
00408460 . 6A 02 PUSH 2
00408462 . FF15 80B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaFreeStrList>>; MSVBVM50.__vbaFreeStrList
00408468 . 83C4 0C ADD ESP,0C
0040846B . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
0040846E . 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00408471 . 50 PUSH EAX
00408472 . 51 PUSH ECX
00408473 . 6A 02 PUSH 2
00408475 . FF15 08B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaFreeObjList>>; MSVBVM50.__vbaFreeObjList
0040847B . 8B95 40FFFFFF MOV EDX,DWORD PTR SS:[EBP-C0] ; CrackmeV.00409A68
00408481 . 83C4 0C ADD ESP,0C
00408484 . 8B82 04030000 MOV EAX,DWORD PTR DS:[EDX+304]
0040848A . 56 PUSH ESI
0040848B . 8985 28FFFFFF MOV DWORD PTR SS:[EBP-D8],EAX
00408491 . FFD0 CALL EAX
00408493 . 50 PUSH EAX
00408494 . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
00408497 . 50 PUSH EAX
00408498 . FFD7 CALL EDI ; MSVBVM50.__vbaObjSet
0040849A . 56 PUSH ESI
0040849B . 8985 58FFFFFF MOV DWORD PTR SS:[EBP-A8],EAX
004084A1 . FF95 30FFFFFF CALL DWORD PTR SS:[EBP-D0] ; MSVBVM50.0F10C348
004084A7 . 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
004084AA . 50 PUSH EAX
004084AB . 51 PUSH ECX
004084AC . FFD7 CALL EDI ; MSVBVM50.__vbaObjSet
004084AE . 8BD8 MOV EBX,EAX
004084B0 . 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
004084B3 . 50 PUSH EAX
004084B4 . 53 PUSH EBX
004084B5 . 8B13 MOV EDX,DWORD PTR DS:[EBX] ; MSVBVM50.0F025A95
004084B7 . FF92 A0000000 CALL DWORD PTR DS:[EDX+A0]
004084BD . 85C0 TEST EAX,EAX
004084BF . 7D 12 JGE SHORT CrackmeV.004084D3
004084C1 . 68 A0000000 PUSH 0A0
004084C6 . 68 AC6F4000 PUSH CrackmeV.00406FAC
004084CB . 53 PUSH EBX
004084CC . 50 PUSH EAX
004084CD . FF15 18B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaHresultCheck>; MSVBVM50.__vbaHresultCheckObj
004084D3 > 8B8D 58FFFFFF MOV ECX,DWORD PTR SS:[EBP-A8]
004084D9 . 8B55 E8 MOV EDX,DWORD PTR SS:[EBP-18]
004084DC . 52 PUSH EDX
004084DD . 8B19 MOV EBX,DWORD PTR DS:[ECX]
004084DF . FF15 74B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaR8Str>] ; MSVBVM50.__vbaR8Str
004084E5 . DC25 20104000 FSUB QWORD PTR DS:[401020] ; TEMP -= -15
004084EB . 83EC 08 SUB ESP,8
004084EE . DFE0 FSTSW AX
004084F0 . A8 0D TEST AL,0D
004084F2 . 0F85 C7020000 JNZ CrackmeV.004087BF
........
00408677 . /74 62 JE SHORT CrackmeV.004086DB
00408679 . |8B35 14B14000 MOV ESI,DWORD PTR DS:[<&MSVBVM50.__vbaStrCat>] ; MSVBVM50.__vbaStrCat
0040867F . |68 C06F4000 PUSH CrackmeV.00406FC0 ; UNICODE "You Get It"
00408684 . |68 DC6F4000 PUSH CrackmeV.00406FDC ; UNICODE "\r\n"
00408689 . |FFD6 CALL ESI ; <&MSVBVM50.__vbaStrCat>
0040868B . |8BD0 MOV EDX,EAX
0040868D . |8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00408690 . |FF15 94B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrMove>] ; MSVBVM50.__vbaStrMove
00408696 . |50 PUSH EAX
00408697 . |68 E86F4000 PUSH CrackmeV.00406FE8 ; UNICODE "KeyGen It Now"
Que se puede resumir en esto.
004081F5 . FF15 F8B04000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaLenBstr>] ; MSVBVM50.__vbaLenBstr
004081FB . 8BF8 MOV EDI,EAX
004081FD . 8B4D E8 MOV ECX,DWORD PTR SS:[EBP-18]
00408200 . 69FF 385B0100 IMUL EDI,EDI,15B38 ; TEMP = Len(nombre) *15B38
00408206 . 51 PUSH ECX
00408207 . 0F80 B7050000 JO CrackmeV.004087C4
0040820D . FF15 0CB14000 CALL DWORD PTR DS:[<&MSVBVM50.#516>] ; MSVBVM50.rtcAnsiValueBstr
00408213 . 0FBFD0 MOVSX EDX,AX ; digito a ax
00408216 . 03FA ADD EDI,EDX ; TEMP +=1digito
00408218 . 0F80 A6050000 JO CrackmeV.004087C4
........
004082E9 . FF15 74B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaR8Str>] ; MSVBVM50.__vbaR8Str
004082EF . D905 08104000 FLD DWORD PTR DS:[401008]
004082F5 . 833D 00904000 00 CMP DWORD PTR DS:[409000],0
004082FC . 75 08 JNZ SHORT CrackmeV.00408306
004082FE . D835 0C104000 FDIV DWORD PTR DS:[40100C] ; 10 / 5 = 2
00408304 . EB 0B JMP SHORT CrackmeV.00408311
00408306 > FF35 0C104000 PUSH DWORD PTR DS:[40100C]
0040830C . E8 578DFFFF CALL <JMP.&MSVBVM50._adj_fdiv_m32>
00408311 > 83EC 08 SUB ESP,8
00408314 . DFE0 FSTSW AX
00408316 . A8 0D TEST AL,0D
00408318 . 0F85 A1040000 JNZ CrackmeV.004087BF
0040831E . DEC1 FADDP ST(1),ST ; TEMP +=2
00408320 . DFE0 FSTSW AX
00408322 . A8 0D TEST AL,0D
........
004083F5 . FF15 74B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaR8Str>] ; MSVBVM50.__vbaR8Str
004083FB . DC0D 10104000 FMUL QWORD PTR DS:[401010] ; TEMP *=3
00408401 . 83EC 08 SUB ESP,8 ; TEMP -=2
00408404 . DC25 18104000 FSUB QWORD PTR DS:[401018]
0040840A . DFE0 FSTSW AX
0040840C . A8 0D TEST AL,0D
........
004084DF . FF15 74B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaR8Str>] ; MSVBVM50.__vbaR8Str
004084E5 . DC25 20104000 FSUB QWORD PTR DS:[401020] ; TEMP -= -15
004084EB . 83EC 08 SUB ESP,8
004084EE . DFE0 FSTSW AX
004084F0 . A8 0D TEST AL,0D
004084F2 . 0F85 C7020000 JNZ CrackmeV.004087BF
........
00408677 . /74 62 JE SHORT CrackmeV.004086DB
00408679 . |8B35 14B14000 MOV ESI,DWORD PTR DS:[<&MSVBVM50.__vbaStrCat>] ; MSVBVM50.__vbaStrCat
0040867F . |68 C06F4000 PUSH CrackmeV.00406FC0 ; UNICODE "You Get It"
00408684 . |68 DC6F4000 PUSH CrackmeV.00406FDC ; UNICODE "\r\n"
00408689 . |FFD6 CALL ESI ; <&MSVBVM50.__vbaStrCat>
0040868B . |8BD0 MOV EDX,EAX
0040868D . |8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00408690 . |FF15 94B14000 CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrMove>] ; MSVBVM50.__vbaStrMove
00408696 . |50 PUSH EAX
00408697 . |68 E86F4000 PUSH CrackmeV.00406FE8 ; UNICODE "KeyGen It Now"
Y en esto:
TEMP = Len(nombre) *15B38
TEMP += 1ºdigitoascii
TEMP +=2
TEMP *=3
TEMP -=2
TEMP +=15
Y el KeyGen nos ocupa una sola línea
txtserial.Text = (((((Len(txtnombre.Text) * 88888) + Asc(Mid(txtn.Text, 1, 1))) + 2) * 3) - 2) + 15
Huevo de pascua (Easter egg)
Si nos fijamos en el VBReformer, en el formulario principal vemos muchas cajas de texto.

Las hacemos visibles, guardamos y ejecutamos haber que pasa.


Lo que pasa es que va guardando el resultado de las operaciones en ellas y en la de arriba concretamente está nuestro serial bueno, lo que nos hace poseedores de un KeyGen encubierto.
Links
Se nos entrega el siguiente ELF: Extracción de la Flag Si nos fijamos en las líneas 41 a la 45
Continuamos con los BTM awards. Esta vez analizaremos brevemente una escena de la película del casi siempre excelente James Cameron,
Primeras impresiones El crackme es el típico de usuario y número de serie. Si no introduces un nombre te salta
Introducción Hoy tenemos aquí un crackme hecho en Visual Basic 6 (pcode), pero lo vamos a abordar de una manera