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.