Título: Reto crack Keylogger Publicado por: .:UND3R:. en 5 Febrero 2014, 16:38 pm Hola a todos, bueno exactamente este no es un reto de crackmes y o cosas por el estilo. Me explico, siempre me interesó este Keylogger (local) que se puede descargar en el siguiente link:
http://www.familykeylogger.com/ Me gustaba mucho su simple uso y simplicidad de instalación. Al momento en que lo intenté crackear hice los pasos típicos: - OllyDbg - Referencias de texto No encontré absolutamente nada (buscaba "Key Invalid!") Tras al arrancarlo si aparecía la string y un simple salto encargado de la validación del Keylogger. Tras reiniciar me llevé una sorpresa muy divertida, lo encontré tan divertido que debo invitarlos a crackearlo. Logré crackearlo gracias a un tutorial de Karmany que leí tiempo atrás. Si alguien quiere la solución por favor me envían un MP, saludos. PD: Lo que no logro entender es como este programa me crashea en dos circunstancia OllyDbg si alguien me dice como lo hace, se lo agradecería. Título: Re: Reto crack Keylogger Publicado por: Stakewinner00 en 5 Febrero 2014, 16:51 pm Muy interesante, me lo guardo para cuando tenga tiempo.
Saludos PD: Puedes enviarme la solución por MP? Solo por si no logro hacerlo en un tiempo razonable. Título: Re: Reto crack Keylogger Publicado por: x64core en 5 Febrero 2014, 19:32 pm XD
Interesante "reto"... base: 400000 wndproc del dialogo: 00406240 . 55 PUSH EBP 00406241 . 8BEC MOV EBP,ESP 00406243 . 81EC 98050000 SUB ESP,0x598 00406249 . A1 30404200 MOV EAX,DWORD PTR DS:[0x424030] 0040624E . 33C5 XOR EAX,EBP 00406250 . 8945 F4 MOV DWORD PTR SS:[EBP-0xC],EAX 00406253 > EB 06 JMP SHORT mfc7sys.0040625B 00406255 >^EB FC JMP SHORT mfc7sys.00406253 00406257 .^EB FC JMP SHORT mfc7sys.00406255 00406259 . 0132 ADD DWORD PTR DS:[EDX],ESI 0040625B > 8B45 0C MOV EAX,DWORD PTR SS:[EBP+0xC] 0040625E . 8985 6CFAFFFF MOV DWORD PTR SS:[EBP-0x594],EAX 00406264 . 83BD 6CFAFFFF >CMP DWORD PTR SS:[EBP-0x594],0x10 0040626B . 74 16 JE SHORT mfc7sys.00406283 0040626D . 81BD 6CFAFFFF >CMP DWORD PTR SS:[EBP-0x594],0x111 00406277 . 74 1B JE SHORT mfc7sys.00406294 00406279 . E9 B4020000 JMP mfc7sys.00406532 0040627E . E9 AF020000 JMP mfc7sys.00406532 00406283 > 6A 00 PUSH 0x0 ; /Result = 0x0 00406285 . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+0x8] ; | 00406288 . 51 PUSH ECX ; |hWnd 00406289 . FF15 CCF24100 CALL DWORD PTR DS:[<&USER32.EndDialog>] ; \EndDialog 0040628F . E9 9E020000 JMP mfc7sys.00406532 00406294 > 8B55 10 MOV EDX,DWORD PTR SS:[EBP+0x10] 00406297 . 81E2 FFFF0000 AND EDX,0xFFFF 0040629D . 0FB7C2 MOVZX EAX,DX 004062A0 . 8985 68FAFFFF MOV DWORD PTR SS:[EBP-0x598],EAX 004062A6 . 83BD 68FAFFFF >CMP DWORD PTR SS:[EBP-0x598],0x1 004062AD . 74 46 JE SHORT mfc7sys.004062F5 004062AF . 83BD 68FAFFFF >CMP DWORD PTR SS:[EBP-0x598],0x2 004062B6 . 0F84 6A020000 JE mfc7sys.00406526 004062BC . 81BD 68FAFFFF >CMP DWORD PTR SS:[EBP-0x598],0x3FB 004062C6 . 74 05 JE SHORT mfc7sys.004062CD 004062C8 . E9 65020000 JMP mfc7sys.00406532 004062CD > 6A 03 PUSH 0x3 004062CF . 6A 00 PUSH 0x0 004062D1 . 6A 00 PUSH 0x0 004062D3 . 8B0D E4544200 MOV ECX,DWORD PTR DS:[0x4254E4] ; mfc7sys.00427420 004062D9 . 51 PUSH ECX 004062DA . 68 44F34100 PUSH mfc7sys.0041F344 ; ASCII "open" 004062DF . B9 C8504200 MOV ECX,mfc7sys.004250C8 004062E4 . E8 97B0FFFF CALL mfc7sys.00401380 004062E9 . 50 PUSH EAX ; |hWnd 004062EA . FF15 30F24100 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA 004062F0 . E9 3D020000 JMP mfc7sys.00406532 004062F5 > 6A 32 PUSH 0x32 ; /Count = 32 (50.) 004062F7 . 8D55 8C LEA EDX,DWORD PTR SS:[EBP-0x74] ; | 004062FA . 52 PUSH EDX ; |Buffer 004062FB . 68 FD030000 PUSH 0x3FD ; |ControlID = 3FD (1021.) 00406300 . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+0x8] ; | 00406303 . 50 PUSH EAX ; |hWnd 00406304 . FF15 98F24100 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA 0040630A . 6A 32 PUSH 0x32 ; /Count = 32 (50.) 0040630C . 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-0x40] ; | 0040630F . 51 PUSH ECX ; |Buffer 00406310 . 68 FE030000 PUSH 0x3FE ; |ControlID = 3FE (1022.) 00406315 . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+0x8] ; | 00406318 . 52 PUSH EDX ; |hWnd 00406319 . FF15 98F24100 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA 0040631F . 8D45 8C LEA EAX,DWORD PTR SS:[EBP-0x74] 00406322 . 50 PUSH EAX ; /String 00406323 . FF15 D4F14100 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; \lstrlenA 00406329 . 83F8 18 CMP EAX,0x18 0040632C . 74 39 JE SHORT mfc7sys.00406367 0040632E . 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-0x40] 00406331 . 51 PUSH ECX ; /String 00406332 . FF15 D4F14100 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; \lstrlenA 00406338 . 83F8 18 CMP EAX,0x18 0040633B . 75 2A JNZ SHORT mfc7sys.00406367 0040633D . 6A 32 PUSH 0x32 ; /Count = 32 (50.) 0040633F . 8D55 8C LEA EDX,DWORD PTR SS:[EBP-0x74] ; | 00406342 . 52 PUSH EDX ; |Buffer 00406343 . 68 FE030000 PUSH 0x3FE ; |ControlID = 3FE (1022.) 00406348 . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+0x8] ; | 0040634B . 50 PUSH EAX ; |hWnd 0040634C . FF15 98F24100 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA 00406352 . 6A 32 PUSH 0x32 ; /Count = 32 (50.) 00406354 . 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-0x40] ; | 00406357 . 51 PUSH ECX ; |Buffer 00406358 . 68 FD030000 PUSH 0x3FD ; |ControlID = 3FD (1021.) 0040635D . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+0x8] ; | 00406360 . 52 PUSH EDX ; |hWnd 00406361 . FF15 98F24100 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA 00406367 > 6A 00 PUSH 0x0 ; /hTemplateFile = NULL 00406369 . 68 80000000 PUSH 0x80 ; |Attributes = NORMAL 0040636E . 6A 02 PUSH 0x2 ; |Mode = CREATE_ALWAYS 00406370 . 6A 00 PUSH 0x0 ; |pSecurity = NULL 00406372 . 6A 03 PUSH 0x3 ; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE 00406374 . 68 000000C0 PUSH 0xC0000000 ; |Access = GENERIC_READ|GENERIC_WRITE 00406379 . 68 684D4200 PUSH mfc7sys.00424D68 ; |FileName = "C:\Documents and Settings\All Users\Application Data\mfc7sys.dat" 0040637E . FF15 C4F14100 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA 00406384 . 8945 FC MOV DWORD PTR SS:[EBP-0x4],EAX 00406387 . 837D FC FF CMP DWORD PTR SS:[EBP-0x4],-0x1 0040638B . 74 6E JE SHORT mfc7sys.004063FB 0040638D . 6A 00 PUSH 0x0 ; /pOverlapped = NULL 0040638F . 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-0x8] ; | 00406392 . 50 PUSH EAX ; |pBytesWritten 00406393 . 8D4D 8C LEA ECX,DWORD PTR SS:[EBP-0x74] ; | 00406396 . 51 PUSH ECX ; |/String 00406397 . FF15 D4F14100 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; |\lstrlenA 0040639D . 50 PUSH EAX ; |nBytesToWrite 0040639E . 8D55 8C LEA EDX,DWORD PTR SS:[EBP-0x74] ; | 004063A1 . 52 PUSH EDX ; |Buffer 004063A2 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-0x4] ; | 004063A5 . 50 PUSH EAX ; |hFile 004063A6 . FF15 A8F14100 CALL DWORD PTR DS:[<&KERNEL32.WriteFile>>; \WriteFile 004063AC . 8B4D FC MOV ECX,DWORD PTR SS:[EBP-0x4] 004063AF . 51 PUSH ECX ; /hObject 004063B0 . FF15 B4F14100 CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; \CloseHandle 004063B6 . 6A 01 PUSH 0x1 ; /Revision = 0x1 004063B8 . 8D95 78FFFFFF LEA EDX,DWORD PTR SS:[EBP-0x88] ; | 004063BE . 52 PUSH EDX ; |pSecDescr 004063BF . FF15 0CF04100 CALL DWORD PTR DS:[<&ADVAPI32.Initialize>; \InitializeSecurityDescriptor 004063C5 . 6A 00 PUSH 0x0 004063C7 . 6A 00 PUSH 0x0 004063C9 . 6A 01 PUSH 0x1 004063CB . 8D85 78FFFFFF LEA EAX,DWORD PTR SS:[EBP-0x88] 004063D1 . 50 PUSH EAX 004063D2 . FF15 10F04100 CALL DWORD PTR DS:[<&ADVAPI32.SetSecurit>; advapi32.SetSecurityDescriptorDacl 004063D8 . 8985 74FFFFFF MOV DWORD PTR SS:[EBP-0x8C],EAX 004063DE . 83BD 74FFFFFF >CMP DWORD PTR SS:[EBP-0x8C],0x0 004063E5 . 74 14 JE SHORT mfc7sys.004063FB 004063E7 . 8D8D 78FFFFFF LEA ECX,DWORD PTR SS:[EBP-0x88] 004063ED . 51 PUSH ECX 004063EE . 6A 04 PUSH 0x4 004063F0 . 68 684D4200 PUSH mfc7sys.00424D68 ; ASCII "C:\Documents and Settings\All Users\Application Data\mfc7sys.dat" 004063F5 . FF15 14F04100 CALL DWORD PTR DS:[<&ADVAPI32.SetFileSec>; advapi32.SetFileSecurityA 004063FB > 68 E8030000 PUSH 0x3E8 ; /Timeout = 1000. ms 00406400 . FF15 98F04100 CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep 00406406 . E8 05E6FFFF CALL mfc7sys.00404A10 0040640B . 0FBED0 MOVSX EDX,AL 0040640E . 85D2 TEST EDX,EDX 00406410 . 74 1C JE SHORT mfc7sys.0040642E 00406412 . 6A 00 PUSH 0x0 ; /Style = MB_OK|MB_APPLMODAL 00406414 . 68 54724200 PUSH mfc7sys.00427254 ; |Title = "FKL" 00406419 . A1 C0504200 MOV EAX,DWORD PTR DS:[0x4250C0] ; | 0040641E . 50 PUSH EAX ; |Text => "Invalid key!" 0040641F . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+0x8] ; | 00406422 . 51 PUSH ECX ; |hOwner 00406423 . FF15 E4F24100 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA 00406429 . E9 F6000000 JMP mfc7sys.00406524 0040642E > 8D55 C0 LEA EDX,DWORD PTR SS:[EBP-0x40] 00406431 . 52 PUSH EDX ; /<%s> 00406432 . 68 4C724200 PUSH mfc7sys.0042724C ; |<%s> = "5.56" 00406437 . 8D45 8C LEA EAX,DWORD PTR SS:[EBP-0x74] ; | 0040643A . 50 PUSH EAX ; |<%s> 0040643B . 68 007A4200 PUSH mfc7sys.00427A00 ; |Format = "-new http://spyarsenal.com/cgi-bin/reg.pl?p=fkl&key=%s&v=%s&email=%s" 00406440 . 8D8D 70FAFFFF LEA ECX,DWORD PTR SS:[EBP-0x590] ; | 00406446 . 51 PUSH ECX ; |s 00406447 . FF15 9CF24100 CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; \wsprintfA 0040644D . 83C4 14 ADD ESP,0x14 00406450 . 6A 00 PUSH 0x0 ; /IsShown = 0x0 00406452 . 6A 00 PUSH 0x0 ; |DefDir = NULL 00406454 . 8D95 70FAFFFF LEA EDX,DWORD PTR SS:[EBP-0x590] ; | 0040645A . 52 PUSH EDX ; |Parameters 0040645B . 68 AC714200 PUSH mfc7sys.004271AC ; |FileName = "iexplore.exe" 00406460 . 68 44F34100 PUSH mfc7sys.0041F344 ; |Operation = "open" 00406465 . 6A 00 PUSH 0x0 ; |hWnd = NULL 00406467 . FF15 30F24100 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA 0040646D . 68 88130000 PUSH 0x1388 ; /Timeout = 5000. ms 00406472 . FF15 98F04100 CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep 00406478 . 6A 00 PUSH 0x0 ; /Style = MB_OK|MB_APPLMODAL 0040647A . 68 54724200 PUSH mfc7sys.00427254 ; |Title = "FKL" 0040647F . A1 E0544200 MOV EAX,DWORD PTR DS:[0x4254E0] ; | 00406484 . 50 PUSH EAX ; |Text => "Thank you for registration!" 00406485 . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+0x8] ; | 00406488 . 51 PUSH ECX ; |hOwner 00406489 . FF15 E4F24100 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA 0040648F . 68 E8030000 PUSH 0x3E8 ; /Timeout = 1000. ms 00406494 . FF15 98F04100 CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep 0040649A . 6A 00 PUSH 0x0 ; /Result = 0x0 0040649C . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+0x8] ; | 0040649F . 52 PUSH EDX ; |hWnd 004064A0 . FF15 CCF24100 CALL DWORD PTR DS:[<&USER32.EndDialog>] ; \EndDialog 004064A6 . 68 B80B0000 PUSH 0xBB8 ; /Timeout = 3000. ms 004064AB . FF15 98F04100 CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep 004064B1 . 8D45 8C LEA EAX,DWORD PTR SS:[EBP-0x74] 004064B4 . 50 PUSH EAX ; /Arg3 004064B5 . 68 FA000000 PUSH 0xFA ; |Arg2 = 000000FA 004064BA . 8D8D 70FEFFFF LEA ECX,DWORD PTR SS:[EBP-0x190] ; | 004064C0 . 51 PUSH ECX ; |Arg1 004064C1 . E8 25220000 CALL mfc7sys.004086EB ; \mfc7sys.004086EB 004064C6 . 83C4 0C ADD ESP,0xC 004064C9 . 68 BC714200 PUSH mfc7sys.004271BC ; /Arg3 = 004271BC ASCII " - Windows Internet Explorer" 004064CE . 68 FA000000 PUSH 0xFA ; |Arg2 = 000000FA 004064D3 . 8D95 70FEFFFF LEA EDX,DWORD PTR SS:[EBP-0x190] ; | 004064D9 . 52 PUSH EDX ; |Arg1 004064DA . E8 74220000 CALL mfc7sys.00408753 ; \mfc7sys.00408753 004064DF . 83C4 0C ADD ESP,0xC 004064E2 . 8D85 70FEFFFF LEA EAX,DWORD PTR SS:[EBP-0x190] 004064E8 . 50 PUSH EAX ; /Title 004064E9 . 6A 00 PUSH 0x0 ; |Class = 0x0 004064EB . FF15 A0F24100 CALL DWORD PTR DS:[<&USER32.FindWindowA>>; \FindWindowA 004064F1 . 8985 70FFFFFF MOV DWORD PTR SS:[EBP-0x90],EAX 004064F7 . 83BD 70FFFFFF >CMP DWORD PTR SS:[EBP-0x90],0x0 004064FE . 74 24 JE SHORT mfc7sys.00406524 00406500 . 6A 00 PUSH 0x0 ; /lParam = 0x0 00406502 . 68 60F00000 PUSH 0xF060 ; |wParam = 0xF060 00406507 . 68 12010000 PUSH 0x112 ; |Message = WM_SYSCOMMAND 0040650C . 8B8D 70FFFFFF MOV ECX,DWORD PTR SS:[EBP-0x90] ; | 00406512 . 51 PUSH ECX ; |hWnd 00406513 . FF15 ACF24100 CALL DWORD PTR DS:[<&USER32.SendMessageA>; \SendMessageA 00406519 . 68 684D4200 PUSH mfc7sys.00424D68 ; /FileName = "C:\Documents and Settings\All Users\Application Data\mfc7sys.dat" 0040651E . FF15 70F14100 CALL DWORD PTR DS:[<&KERNEL32.DeleteFile>; \DeleteFileA 00406524 > EB 0C JMP SHORT mfc7sys.00406532 00406526 > 6A 00 PUSH 0x0 ; /Result = 0x0 00406528 . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+0x8] ; | 0040652B . 52 PUSH EDX ; |hWnd 0040652C . FF15 CCF24100 CALL DWORD PTR DS:[<&USER32.EndDialog>] ; \EndDialog 00406532 > EB 06 JMP SHORT mfc7sys.0040653A 00406534 >^EB FC JMP SHORT mfc7sys.00406532 00406536 .^EB FC JMP SHORT mfc7sys.00406534 00406538 03 DB 03 00406539 34 DB 34 ; CHAR '4' 0040653A > 33C0 XOR EAX,EAX 0040653C . 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-0xC] 0040653F . 33CD XOR ECX,EBP 00406541 . E8 A41C0000 CALL mfc7sys.004081EA 00406546 . 8BE5 MOV ESP,EBP 00406548 . 5D POP EBP 00406549 . C2 1000 RETN 0x10 Check (00404A10): Código: 00404A10 $ 55 PUSH EBP .:UND3R:. si necesitas un "Local Keylogger" mandame un MP, puedo programarte uno mejor que esta basura Título: Re: Reto crack Keylogger Publicado por: MCKSys Argentina en 5 Febrero 2014, 20:50 pm Como todo exe automodificable, primero hay que "liberarlo" de dicha automodificación.
Para tener un exe "libre" hay que poner un BP luego de que se ejecuta la rutina de desencriptación del código, corregir la sección .data (porque ya tiene cosas inicializadas), NOPear el call a la rutina de desencriptación (no olvidar el PUSH!) y dumpear (arreglando el EP. Se puede agregar la IAT en una nueva sección.). Luego, sólo es cuestión de parchear la rutina 404A10 para que devuelva siempre 0. Y eso es todo. Saludos! PD: No doy más detalles sobre lo primero, para evitar posibles problemas... PD2: @.:UND3R:.: El dump es el que te hace crashear Olly? Si es así, es porque la sección .data tiene variables inicializadas (crashea cuando llama una API de threads). Por eso puse de corregir la sección .data... :P Título: Re: Reto crack Keylogger Publicado por: .:UND3R:. en 6 Febrero 2014, 01:26 am Muy interesante, me lo guardo para cuando tenga tiempo. Saludos PD: Puedes enviarme la solución por MP? Solo por si no logro hacerlo en un tiempo razonable. Pues de verdad te lo recomiendo te agradará ;D XD Interesante "reto"... base: 400000 wndproc del dialogo: 00406240 . 55 PUSH EBP 00406241 . 8BEC MOV EBP,ESP 00406243 . 81EC 98050000 SUB ESP,0x598 00406249 . A1 30404200 MOV EAX,DWORD PTR DS:[0x424030] 0040624E . 33C5 XOR EAX,EBP 00406250 . 8945 F4 MOV DWORD PTR SS:[EBP-0xC],EAX 00406253 > EB 06 JMP SHORT mfc7sys.0040625B 00406255 >^EB FC JMP SHORT mfc7sys.00406253 00406257 .^EB FC JMP SHORT mfc7sys.00406255 00406259 . 0132 ADD DWORD PTR DS:[EDX],ESI 0040625B > 8B45 0C MOV EAX,DWORD PTR SS:[EBP+0xC] 0040625E . 8985 6CFAFFFF MOV DWORD PTR SS:[EBP-0x594],EAX 00406264 . 83BD 6CFAFFFF >CMP DWORD PTR SS:[EBP-0x594],0x10 0040626B . 74 16 JE SHORT mfc7sys.00406283 0040626D . 81BD 6CFAFFFF >CMP DWORD PTR SS:[EBP-0x594],0x111 00406277 . 74 1B JE SHORT mfc7sys.00406294 00406279 . E9 B4020000 JMP mfc7sys.00406532 0040627E . E9 AF020000 JMP mfc7sys.00406532 00406283 > 6A 00 PUSH 0x0 ; /Result = 0x0 00406285 . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+0x8] ; | 00406288 . 51 PUSH ECX ; |hWnd 00406289 . FF15 CCF24100 CALL DWORD PTR DS:[<&USER32.EndDialog>] ; \EndDialog 0040628F . E9 9E020000 JMP mfc7sys.00406532 00406294 > 8B55 10 MOV EDX,DWORD PTR SS:[EBP+0x10] 00406297 . 81E2 FFFF0000 AND EDX,0xFFFF 0040629D . 0FB7C2 MOVZX EAX,DX 004062A0 . 8985 68FAFFFF MOV DWORD PTR SS:[EBP-0x598],EAX 004062A6 . 83BD 68FAFFFF >CMP DWORD PTR SS:[EBP-0x598],0x1 004062AD . 74 46 JE SHORT mfc7sys.004062F5 004062AF . 83BD 68FAFFFF >CMP DWORD PTR SS:[EBP-0x598],0x2 004062B6 . 0F84 6A020000 JE mfc7sys.00406526 004062BC . 81BD 68FAFFFF >CMP DWORD PTR SS:[EBP-0x598],0x3FB 004062C6 . 74 05 JE SHORT mfc7sys.004062CD 004062C8 . E9 65020000 JMP mfc7sys.00406532 004062CD > 6A 03 PUSH 0x3 004062CF . 6A 00 PUSH 0x0 004062D1 . 6A 00 PUSH 0x0 004062D3 . 8B0D E4544200 MOV ECX,DWORD PTR DS:[0x4254E4] ; mfc7sys.00427420 004062D9 . 51 PUSH ECX 004062DA . 68 44F34100 PUSH mfc7sys.0041F344 ; ASCII "open" 004062DF . B9 C8504200 MOV ECX,mfc7sys.004250C8 004062E4 . E8 97B0FFFF CALL mfc7sys.00401380 004062E9 . 50 PUSH EAX ; |hWnd 004062EA . FF15 30F24100 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA 004062F0 . E9 3D020000 JMP mfc7sys.00406532 004062F5 > 6A 32 PUSH 0x32 ; /Count = 32 (50.) 004062F7 . 8D55 8C LEA EDX,DWORD PTR SS:[EBP-0x74] ; | 004062FA . 52 PUSH EDX ; |Buffer 004062FB . 68 FD030000 PUSH 0x3FD ; |ControlID = 3FD (1021.) 00406300 . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+0x8] ; | 00406303 . 50 PUSH EAX ; |hWnd 00406304 . FF15 98F24100 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA 0040630A . 6A 32 PUSH 0x32 ; /Count = 32 (50.) 0040630C . 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-0x40] ; | 0040630F . 51 PUSH ECX ; |Buffer 00406310 . 68 FE030000 PUSH 0x3FE ; |ControlID = 3FE (1022.) 00406315 . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+0x8] ; | 00406318 . 52 PUSH EDX ; |hWnd 00406319 . FF15 98F24100 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA 0040631F . 8D45 8C LEA EAX,DWORD PTR SS:[EBP-0x74] 00406322 . 50 PUSH EAX ; /String 00406323 . FF15 D4F14100 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; \lstrlenA 00406329 . 83F8 18 CMP EAX,0x18 0040632C . 74 39 JE SHORT mfc7sys.00406367 0040632E . 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-0x40] 00406331 . 51 PUSH ECX ; /String 00406332 . FF15 D4F14100 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; \lstrlenA 00406338 . 83F8 18 CMP EAX,0x18 0040633B . 75 2A JNZ SHORT mfc7sys.00406367 0040633D . 6A 32 PUSH 0x32 ; /Count = 32 (50.) 0040633F . 8D55 8C LEA EDX,DWORD PTR SS:[EBP-0x74] ; | 00406342 . 52 PUSH EDX ; |Buffer 00406343 . 68 FE030000 PUSH 0x3FE ; |ControlID = 3FE (1022.) 00406348 . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+0x8] ; | 0040634B . 50 PUSH EAX ; |hWnd 0040634C . FF15 98F24100 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA 00406352 . 6A 32 PUSH 0x32 ; /Count = 32 (50.) 00406354 . 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-0x40] ; | 00406357 . 51 PUSH ECX ; |Buffer 00406358 . 68 FD030000 PUSH 0x3FD ; |ControlID = 3FD (1021.) 0040635D . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+0x8] ; | 00406360 . 52 PUSH EDX ; |hWnd 00406361 . FF15 98F24100 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA 00406367 > 6A 00 PUSH 0x0 ; /hTemplateFile = NULL 00406369 . 68 80000000 PUSH 0x80 ; |Attributes = NORMAL 0040636E . 6A 02 PUSH 0x2 ; |Mode = CREATE_ALWAYS 00406370 . 6A 00 PUSH 0x0 ; |pSecurity = NULL 00406372 . 6A 03 PUSH 0x3 ; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE 00406374 . 68 000000C0 PUSH 0xC0000000 ; |Access = GENERIC_READ|GENERIC_WRITE 00406379 . 68 684D4200 PUSH mfc7sys.00424D68 ; |FileName = "C:\Documents and Settings\All Users\Application Data\mfc7sys.dat" 0040637E . FF15 C4F14100 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA 00406384 . 8945 FC MOV DWORD PTR SS:[EBP-0x4],EAX 00406387 . 837D FC FF CMP DWORD PTR SS:[EBP-0x4],-0x1 0040638B . 74 6E JE SHORT mfc7sys.004063FB 0040638D . 6A 00 PUSH 0x0 ; /pOverlapped = NULL 0040638F . 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-0x8] ; | 00406392 . 50 PUSH EAX ; |pBytesWritten 00406393 . 8D4D 8C LEA ECX,DWORD PTR SS:[EBP-0x74] ; | 00406396 . 51 PUSH ECX ; |/String 00406397 . FF15 D4F14100 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ; |\lstrlenA 0040639D . 50 PUSH EAX ; |nBytesToWrite 0040639E . 8D55 8C LEA EDX,DWORD PTR SS:[EBP-0x74] ; | 004063A1 . 52 PUSH EDX ; |Buffer 004063A2 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-0x4] ; | 004063A5 . 50 PUSH EAX ; |hFile 004063A6 . FF15 A8F14100 CALL DWORD PTR DS:[<&KERNEL32.WriteFile>>; \WriteFile 004063AC . 8B4D FC MOV ECX,DWORD PTR SS:[EBP-0x4] 004063AF . 51 PUSH ECX ; /hObject 004063B0 . FF15 B4F14100 CALL DWORD PTR DS:[<&KERNEL32.CloseHandl>; \CloseHandle 004063B6 . 6A 01 PUSH 0x1 ; /Revision = 0x1 004063B8 . 8D95 78FFFFFF LEA EDX,DWORD PTR SS:[EBP-0x88] ; | 004063BE . 52 PUSH EDX ; |pSecDescr 004063BF . FF15 0CF04100 CALL DWORD PTR DS:[<&ADVAPI32.Initialize>; \InitializeSecurityDescriptor 004063C5 . 6A 00 PUSH 0x0 004063C7 . 6A 00 PUSH 0x0 004063C9 . 6A 01 PUSH 0x1 004063CB . 8D85 78FFFFFF LEA EAX,DWORD PTR SS:[EBP-0x88] 004063D1 . 50 PUSH EAX 004063D2 . FF15 10F04100 CALL DWORD PTR DS:[<&ADVAPI32.SetSecurit>; advapi32.SetSecurityDescriptorDacl 004063D8 . 8985 74FFFFFF MOV DWORD PTR SS:[EBP-0x8C],EAX 004063DE . 83BD 74FFFFFF >CMP DWORD PTR SS:[EBP-0x8C],0x0 004063E5 . 74 14 JE SHORT mfc7sys.004063FB 004063E7 . 8D8D 78FFFFFF LEA ECX,DWORD PTR SS:[EBP-0x88] 004063ED . 51 PUSH ECX 004063EE . 6A 04 PUSH 0x4 004063F0 . 68 684D4200 PUSH mfc7sys.00424D68 ; ASCII "C:\Documents and Settings\All Users\Application Data\mfc7sys.dat" 004063F5 . FF15 14F04100 CALL DWORD PTR DS:[<&ADVAPI32.SetFileSec>; advapi32.SetFileSecurityA 004063FB > 68 E8030000 PUSH 0x3E8 ; /Timeout = 1000. ms 00406400 . FF15 98F04100 CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep 00406406 . E8 05E6FFFF CALL mfc7sys.00404A10 0040640B . 0FBED0 MOVSX EDX,AL 0040640E . 85D2 TEST EDX,EDX 00406410 . 74 1C JE SHORT mfc7sys.0040642E 00406412 . 6A 00 PUSH 0x0 ; /Style = MB_OK|MB_APPLMODAL 00406414 . 68 54724200 PUSH mfc7sys.00427254 ; |Title = "FKL" 00406419 . A1 C0504200 MOV EAX,DWORD PTR DS:[0x4250C0] ; | 0040641E . 50 PUSH EAX ; |Text => "Invalid key!" 0040641F . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+0x8] ; | 00406422 . 51 PUSH ECX ; |hOwner 00406423 . FF15 E4F24100 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA 00406429 . E9 F6000000 JMP mfc7sys.00406524 0040642E > 8D55 C0 LEA EDX,DWORD PTR SS:[EBP-0x40] 00406431 . 52 PUSH EDX ; /<%s> 00406432 . 68 4C724200 PUSH mfc7sys.0042724C ; |<%s> = "5.56" 00406437 . 8D45 8C LEA EAX,DWORD PTR SS:[EBP-0x74] ; | 0040643A . 50 PUSH EAX ; |<%s> 0040643B . 68 007A4200 PUSH mfc7sys.00427A00 ; |Format = "-new http://spyarsenal.com/cgi-bin/reg.pl?p=fkl&key=%s&v=%s&email=%s" 00406440 . 8D8D 70FAFFFF LEA ECX,DWORD PTR SS:[EBP-0x590] ; | 00406446 . 51 PUSH ECX ; |s 00406447 . FF15 9CF24100 CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; \wsprintfA 0040644D . 83C4 14 ADD ESP,0x14 00406450 . 6A 00 PUSH 0x0 ; /IsShown = 0x0 00406452 . 6A 00 PUSH 0x0 ; |DefDir = NULL 00406454 . 8D95 70FAFFFF LEA EDX,DWORD PTR SS:[EBP-0x590] ; | 0040645A . 52 PUSH EDX ; |Parameters 0040645B . 68 AC714200 PUSH mfc7sys.004271AC ; |FileName = "iexplore.exe" 00406460 . 68 44F34100 PUSH mfc7sys.0041F344 ; |Operation = "open" 00406465 . 6A 00 PUSH 0x0 ; |hWnd = NULL 00406467 . FF15 30F24100 CALL DWORD PTR DS:[<&SHELL32.ShellExecut>; \ShellExecuteA 0040646D . 68 88130000 PUSH 0x1388 ; /Timeout = 5000. ms 00406472 . FF15 98F04100 CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep 00406478 . 6A 00 PUSH 0x0 ; /Style = MB_OK|MB_APPLMODAL 0040647A . 68 54724200 PUSH mfc7sys.00427254 ; |Title = "FKL" 0040647F . A1 E0544200 MOV EAX,DWORD PTR DS:[0x4254E0] ; | 00406484 . 50 PUSH EAX ; |Text => "Thank you for registration!" 00406485 . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+0x8] ; | 00406488 . 51 PUSH ECX ; |hOwner 00406489 . FF15 E4F24100 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA 0040648F . 68 E8030000 PUSH 0x3E8 ; /Timeout = 1000. ms 00406494 . FF15 98F04100 CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep 0040649A . 6A 00 PUSH 0x0 ; /Result = 0x0 0040649C . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+0x8] ; | 0040649F . 52 PUSH EDX ; |hWnd 004064A0 . FF15 CCF24100 CALL DWORD PTR DS:[<&USER32.EndDialog>] ; \EndDialog 004064A6 . 68 B80B0000 PUSH 0xBB8 ; /Timeout = 3000. ms 004064AB . FF15 98F04100 CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep 004064B1 . 8D45 8C LEA EAX,DWORD PTR SS:[EBP-0x74] 004064B4 . 50 PUSH EAX ; /Arg3 004064B5 . 68 FA000000 PUSH 0xFA ; |Arg2 = 000000FA 004064BA . 8D8D 70FEFFFF LEA ECX,DWORD PTR SS:[EBP-0x190] ; | 004064C0 . 51 PUSH ECX ; |Arg1 004064C1 . E8 25220000 CALL mfc7sys.004086EB ; \mfc7sys.004086EB 004064C6 . 83C4 0C ADD ESP,0xC 004064C9 . 68 BC714200 PUSH mfc7sys.004271BC ; /Arg3 = 004271BC ASCII " - Windows Internet Explorer" 004064CE . 68 FA000000 PUSH 0xFA ; |Arg2 = 000000FA 004064D3 . 8D95 70FEFFFF LEA EDX,DWORD PTR SS:[EBP-0x190] ; | 004064D9 . 52 PUSH EDX ; |Arg1 004064DA . E8 74220000 CALL mfc7sys.00408753 ; \mfc7sys.00408753 004064DF . 83C4 0C ADD ESP,0xC 004064E2 . 8D85 70FEFFFF LEA EAX,DWORD PTR SS:[EBP-0x190] 004064E8 . 50 PUSH EAX ; /Title 004064E9 . 6A 00 PUSH 0x0 ; |Class = 0x0 004064EB . FF15 A0F24100 CALL DWORD PTR DS:[<&USER32.FindWindowA>>; \FindWindowA 004064F1 . 8985 70FFFFFF MOV DWORD PTR SS:[EBP-0x90],EAX 004064F7 . 83BD 70FFFFFF >CMP DWORD PTR SS:[EBP-0x90],0x0 004064FE . 74 24 JE SHORT mfc7sys.00406524 00406500 . 6A 00 PUSH 0x0 ; /lParam = 0x0 00406502 . 68 60F00000 PUSH 0xF060 ; |wParam = 0xF060 00406507 . 68 12010000 PUSH 0x112 ; |Message = WM_SYSCOMMAND 0040650C . 8B8D 70FFFFFF MOV ECX,DWORD PTR SS:[EBP-0x90] ; | 00406512 . 51 PUSH ECX ; |hWnd 00406513 . FF15 ACF24100 CALL DWORD PTR DS:[<&USER32.SendMessageA>; \SendMessageA 00406519 . 68 684D4200 PUSH mfc7sys.00424D68 ; /FileName = "C:\Documents and Settings\All Users\Application Data\mfc7sys.dat" 0040651E . FF15 70F14100 CALL DWORD PTR DS:[<&KERNEL32.DeleteFile>; \DeleteFileA 00406524 > EB 0C JMP SHORT mfc7sys.00406532 00406526 > 6A 00 PUSH 0x0 ; /Result = 0x0 00406528 . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+0x8] ; | 0040652B . 52 PUSH EDX ; |hWnd 0040652C . FF15 CCF24100 CALL DWORD PTR DS:[<&USER32.EndDialog>] ; \EndDialog 00406532 > EB 06 JMP SHORT mfc7sys.0040653A 00406534 >^EB FC JMP SHORT mfc7sys.00406532 00406536 .^EB FC JMP SHORT mfc7sys.00406534 00406538 03 DB 03 00406539 34 DB 34 ; CHAR '4' 0040653A > 33C0 XOR EAX,EAX 0040653C . 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-0xC] 0040653F . 33CD XOR ECX,EBP 00406541 . E8 A41C0000 CALL mfc7sys.004081EA 00406546 . 8BE5 MOV ESP,EBP 00406548 . 5D POP EBP 00406549 . C2 1000 RETN 0x10 Check (00404A10): Código: 00404A10 $ 55 PUSH EBP .:UND3R:. si necesitas un "Local Keylogger" mandame un MP, puedo programarte uno mejor que esta basura Esas son efectivamente posibles strings interesantes pero si reinicias el ejecutable verás que no están y si es no está ¿Cómo puedes parchear ese salto?. Como todo exe automodificable, primero hay que "liberarlo" de dicha automodificación. Para tener un exe "libre" hay que poner un BP luego de que se ejecuta la rutina de desencriptación del código, corregir la sección .data (porque ya tiene cosas inicializadas), NOPear el call a la rutina de desencriptación (no olvidar el PUSH!) y dumpear (arreglando el EP. Se puede agregar la IAT en una nueva sección.). Luego, sólo es cuestión de parchear la rutina 404A10 para que devuelva siempre 0. Y eso es todo. Saludos! PD: No doy más detalles sobre lo primero, para evitar posibles problemas... PD2: @.:UND3R:.: El dump es el que te hace crashear Olly? Si es así, es porque la sección .data tiene variables inicializadas (crashea cuando llama una API de threads). Por eso puse de corregir la sección .data... :P El crash parece que es por la detección del OllyDbg Título: Re: Reto crack Keylogger Publicado por: MCKSys Argentina en 6 Febrero 2014, 01:46 am El crash parece que es por la detección del OllyDbg Pero es el dumpeado o el original? Aparte, te refieres a Olly sin plugines, no? Título: Re: Reto crack Keylogger Publicado por: .:UND3R:. en 6 Febrero 2014, 02:02 am Pero es el dumpeado o el original? Aparte, te refieres a Olly sin plugines, no? Estoy realizando mi solución en minutos la publico para que veas mi duda, no te vayas. Saludos Título: Re: Reto crack Keylogger Publicado por: .:UND3R:. en 6 Febrero 2014, 02:51 am Solución propuesta
En el proceso de instalación podemos ver la ruta en donde el Keylogger es instalado (la carpeta junto con sus respectivos archivos se encuentran ocultos): (http://i.imgur.com/Fs8PLTh.png) Una vez instalado el Keylogger procedemos a registrarlo, para ello hacemos clic derecho en el icono al costado a la derecha y seleccionamos la opción Register: (http://i.imgur.com/hNPfqfw.png) Hacemos un File Attach. Aquí la duda MCKSys Argentina tuve que hacer el attach a causa de que no puedo correr el Keylogger desde el inicio (protección anti-debugger creo), inclusive luego de atachar el ejecutable si le doy run y presiono el botón para registrar no me muestra el mensaje de Key Invalid! queda corriendo pero no hace nada (a ver si logras encontrar cómo el ejecutable afecta a OllyDbg): (http://i.imgur.com/keAG8N9.png) Como comenté anteriormente no es posible a causa de la protección anti-debugger presionar el botón mientras se está ejecutando el Keylogger desde Olly por lo cual una vez atachado ponemos un BP condicional en TranslateMessage con la condición de que se detenga al momento de recibir un mensaje con valor 202: (http://i.imgur.com/PNqHvXl.png) Una vez presionado el botón para registrar ponemos un BP on Execution en la sección .CODE y veremos lo siguiente: (http://i.imgur.com/JeaeHyG.png) Luego utilicé Analize This! (Plugins de Olly recomendado hace años por Apuromafo) el cual permite una mejor visualización del código y si bajamos podremos ver el algo muy interesante :) ): (http://i.imgur.com/0EfYajR.png) Podemos ver que la comprobación se realiza en CALL 00404A10 en donde siempre debe retornar 0 para que la validación sea válida. Si ingresamos dentro de la CALL podremos visualizar las referencias que posee: (http://i.imgur.com/8aBKYbw.png) Ya sabiendo que función es la encargada de realizar la comprobación, cuantas veces es llamada y que valor debe retornar, solo queda parchear. Como solución propuesta decidí cambiar la siguiente instrucción de la CALL 00404A10 (en todas las llamadas): (http://i.imgur.com/EpWTQMC.png) Citar 0040618D . 0FBED0 MOVSX EDX,AL 0040640B . 0FBED0 MOVSX EDX,AL (XOR EDX, EDX) 00406920 . 0FBED0 MOVSX EDX,AL (XOR EDX, EDX) 004069CD . 0FBEC0 MOVSX EAX,AL (XOR EAX,EAX) Ya sabiendo que modificar, reiniciamos y procedemos a realizar los cambios pero nos llevaremos una sorpresa una que nunca me había tocado solucionar :rolleyes: : (http://i.imgur.com/8hAxzLT.png) Vemos un ejecutable automodificable (estilo packer) por lo cual la única manera de poder parchear el ejectuable es alterar los bytes que serán escritos en las instrucciones siguientes de los llamados a las CALL 00404A10 o dumpear el ejecutable una vez que esté en ejecución el Keylogger, reparar IAT y posteriormente nopear las funciones encargadas de escribir los bytes, vamos por la 1era opción. Ponemos un Hardware Breakpoint on Write en 0040640B para ver que función es la encargada de escribir esa sección del código: (http://i.imgur.com/b22MGXm.png) Como vemos el resultado de la operación XOR EAX,ECX es lo que se almacena en la sección CODE por lo cual si reiniciamos y ponemos un BP en en 0040233B y damos RUN veremos que el valor de ECX es 73h (http://i.imgur.com/0k73cOU.png) Si logeamos el valor de ECX en el address 0040233B registrará siempre 73h por lo que el proceso de descifrado se realiza siempre bajo un XOR con la constante 73h. Teniendo todos estos datos, sabemos que los bytes que son insertados en la sección CODE deben estar almacenados en la sección DATA y cifrados bajo un XOR ?,73h por lo tanto la solución sería encontrar estos datos y reemplazarlos por los bytes (tras realizar un XOR 73h) del mnemónico de instrucción XOR EDX,EDX y XOR EAX,EAX respectivamente. quedando como solución: Citar MOVSX EDX,AL XOR 73h 0F BE D0 7C CD A3 XOR EDX,EDX XOR 73h 33 D2 90 40 A1 E3 XOR EAX,EAX XOR 73h 33 C0 90 40 B3 E3 Instrucción XOR EDX,EDX Original Byte Origi. MNEMONICO Byte Ori XOR 73h con XOR 73h 0040618D . 0FBED0 MOVSX EDX,AL 7C CD A3 40 A1 E3 0040640B . 0FBED0 MOVSX EDX,AL 7C CD C6 40 A1 86 00406920 . 0FBED0 MOVSX EDX,AL 7C A8 A3 40 C4 E3 004069CD . 0FBEC0 MOVSX EAX,AL 7C CD B3 40 B3 E3 En palabras simples modificamos estos 12 Bytes: Citar 0040618D . 7C CD A3 0040640B . 7C CD C6 00406920 . 7C A8 A3 004069CD . 7C CD B3 Por: Citar 0040618D . 40 A1 E3 0040640B . 40 A1 86 00406920 . 40 C4 E3 004069CD . 40 B3 E3 Nos quedará: (http://i.imgur.com/l6ZQtC0.png) Título: Re: Reto crack Keylogger Publicado por: tincopasan en 6 Febrero 2014, 18:20 pm Und3r:
usa estas funciones antidebuger IsDebuggerPresent RaiseException TerminateProcess UnhandledExceptionFilter usando solo strongod como plugin y marcando hidepeb kernelmode skip some exceptions lo carga desde el ep después podés ver como correrlo anulando IsdebuggerPresent de forma manual o con un plugin |