Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Littlehorse

#131
Seguridad / Re: Virus en fb?
23 Febrero 2011, 18:27 PM
No pasa nada, fueron solo 15 minutos. Es preferible eso antes que tratar de desinfectar todos los hosts comprometidos, eso si hubiese llevado tiempo  :P.

Saludos
#132
Seguridad / Re: Virus en fb?
23 Febrero 2011, 10:23 AM
Hice la vacuna ahora porque luego a la tarde no voy a poder.

El código no esta comentado y tiene muy poco manejo de errores, lo hice de esa manera para terminarlo mas rápido. Igualmente no debería ser muy difícil de entender pero si quieren que lo comente lo hago luego.

A grandes rasgos cierra el proceso del malware, elimina algunas entradas del registro, y renombra y mueve el ejecutable malicioso al mismo directorio donde se ejecute la vacuna (renombrado a txt, para el que no quiera perder la muestra).

No le he prestado demasiado tiempo al análisis porque esta a la vista que el malware es muy simple. Tal vez por esa razón me hayan quedado algunas entradas del registro en el tintero, pero en ese caso si alguien ve mas, agréguelas al código. Igualmente con esto el malware no seguirá funcionando.

Vaccine.h

Código (cpp) [Seleccionar]

#ifndef VACCINE_H
#define VACCINE_H

#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <Tlhelp32.h>

class Vaccine
{

public:
INT KillProcess(const char* ProcessName);
LONG DeleteReg (HKEY Hkey, const char* SubKey, const char* KeyValue);
INT FileDelete (const char* Path);
};

#endif // VACCINE_H


Vaccine.cpp
Código (cpp) [Seleccionar]

#include "Vaccine.h"

INT Vaccine::KillProcess(const char* ProcessName)
{

PROCESSENTRY32 P32 = {0};
P32.dwSize = sizeof( PROCESSENTRY32 );
HANDLE Handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
DWORD ExitCode = 0;

if(Process32First(Handle,&P32))
while(strcmp(P32.szExeFile,ProcessName)!= 0 && Process32Next(Handle,&P32));

HANDLE Hprocess = OpenProcess(PROCESS_ALL_ACCESS,0,P32.th32ProcessID);
if(Handle)
{
GetExitCodeProcess(Hprocess,&ExitCode);
TerminateProcess(Hprocess,ExitCode);
return EXIT_SUCCESS;
}

return EXIT_FAILURE;
}

LONG Vaccine::DeleteReg (HKEY Hkey, const char* SubKey, const char* KeyValue)
{
HKEY HkeyHandle;
long RegReturn = 0;
if(!RegOpenKeyEx(Hkey, SubKey, 0, KEY_ALL_ACCESS, &HkeyHandle))
{
RegReturn = RegDeleteValue(HkeyHandle, KeyValue);
RegCloseKey(HkeyHandle);
return RegReturn;
}

return RegReturn;
}


INT Vaccine::FileDelete(const char* Path)
{
SetFileAttributes(Path, FILE_ATTRIBUTE_NORMAL);
MoveFileEx(Path,"NewCopyMalware.txt",MOVEFILE_WRITE_THROUGH);
return EXIT_SUCCESS;
}


main.cpp
Código (cpp) [Seleccionar]
#include "Vaccine.h"

int main()
{
Vaccine Vac;
Vac.KillProcess("nvsvc32.exe");

Vac.DeleteReg(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\Install\\Software\\Microsoft\\Windows\\CurrentVersion\\Run",
"NVIDIA driver monitor");

Vac.DeleteReg(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
"NVIDIA driver monitor");

Vac.DeleteReg(HKEY_CURRENT_USER,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
"NVIDIA driver monitor");

Vac.FileDelete("C:\\WINDOWS\\nvsvc32.exe");

system("sc config wuauserv start= auto");
system("net start wuauserv");
system("net start MsMpSvc");

std::cin.get();
return EXIT_SUCCESS;
}




Posiblemente algún antivirus  detecte la vacuna como una aplicación riesgosa por las llamadas a system y demás, pero en fin, ahi esta el codigo para el que quiera compilarla.

Ejecutable de la vacuna:
http://www.megaupload.com/?d=X8D580N2

MD5   : 695830eace00c253e11aae440abbae24
SHA1  : 86eb76dd3f1776b50e8442f62879eba8b63d1bb8
SHA256: 0c092a4c2e9edf20f8e3fdc6d08937a8ae7c8a150902dcbc8b28005f4125d97d


Los que la ejecuten recuerden hacerlo como administrador.

Saludos.
#133
Usando los argumentos de la función principal lo puedes lograr muy fácilmente. Recuerdas haber leído alguna vez algo como:


int main(int argc, char **argv)


argc es la cantidad de argumentos recibidos y argv es un arreglo de cadenas que contiene esos argumentos, comenzando por el nombre del propio programa.


int main(int argc,char **argv){

printf("Cantidad de argumentos: %d\n", argc);
while(argc--)
    printf("%s\n",*argv++);

return 0;
}



Saludos
#134
Seguridad / Re: Virus en fb?
23 Febrero 2011, 00:37 AM
Bueno lo he visto un poco por encima y a grandes rasgos crea un archivo llamado nvsvc32.exe en la carpeta de Windows y luego agrega excepciones al Firewall. Es decir, se trata de esconder simulando estar relacionado con Nvidia. Luego deshabilita actualizaciones automáticas y demás sistemas de seguridad inherentes a Windows.
Se agrega al inicio con el mismo nombre mediante la modificación de las típicas entradas de registro.

CitarHKLM\​SOFTWARE\​Microsoft\​Windows\​CurrentVersion\​Run

HKLM\​SOFTWARE\​Microsoft\ ​Windows NT\​CurrentVersion\​Terminal Server\​Install\​Software\​Microsoft\​Windows\​CurrentVersion\​Run


Realiza algunas dns queries a varios dominios, pero no tiene mucha mas actividad de red por el momento. Luego mirare esa parte con mas atención ya que al parecer este bot tiene ciertos problemas con mi VM.

Mañana a la tarde si puedo hago la vacuna y de paso posteo todo mas en detalle. Va a ser mas efectivo que intentar desinfectar los hosts que utiliza, ya que esa seria una tarea interminable.

Saludos
#135
Seguridad / Re: Virus en fb?
22 Febrero 2011, 21:19 PM
La anterior web la defacearon porque tenia demasiados agujeros de seguridad. No creo que haya sido el mismo que la utilizo como medio de propagación.

En cuanto a este nuevo link, la metodología es exactamente la misma. Crear una aplicación en Facebook y cargar el contenido de otro sitio infectado.

El sitio en cuestión es este:

http://burstjam.com/images/

Luego con mas tiempo analizo el ejecutable para ver de que se trata.

Saludos
#136
Ahora tienes una cadena de 2 posiciones y a fgets le pasas 3 como tamaño por lo tanto lee 2 caracteres, por ende es posible que la cadena te quede sin el carácter nulo.

Si el problema es solo el contenido restante en el buffer de entrada, en Windows se puede tirar de la API para solucionarlo fácilmente, pero para no salir del estándar puedes hacer algo como esto:

void CleanStdin()
{
while(getchar() != '\n');
}


Aunque no debería hacer falta puesto que el salto de linea debería quedar perfectamente en la cadena pasada a fgets siempre que le dejes espacio. Luego puedes reemplazarlo fácilmente por un carácter nulo.

Con el tema de las lecturas, hay miles de formas de leer una opción. Usualmente cuando son opciones simples con fgets + sscanf basta y sobra:



if(fgets(Buff, sizeof Buff, stdin))
sscanf(Buff, "%d", &Opt);






El problema del buffer de entrada en Windows esta muy tratado en el foro. Hoy ya vi 3 posts con la misma duda asi que mi recomendación es que utilicen el buscador del foro, ya que hay hilos enteros solo sobre este tema. Tambien con Google pueden buscar algo como:

Citarfflush(stdin) site:foro.elhacker.net

o

Citarfgets problema site:foro.elhacker.net

Saludos
#137
fflush(stdin);

Esa linea es lo que te provoca el comportamiento indefinido. Utiliza el buscador del foro y lee las chinchetas.

Saludos
#138
Es que de la forma que haces la lectura, fgets nunca llega a leer el salto de linea por lo tanto nada puede hacer con el.

Si tenes una cadena de 3 posiciones, y a fgets le pasas como parámetro que lea solo 2, en realidad lee 2-1. Es decir, lee 1 solo carácter, luego agrega el carácter nulo a la cadena, y el salto de linea queda deambulando por el buffer de entrada.


Citar
Reads characters from stream and stores them as a C string into str until (num-1) characters have been read or either a newline or a the End-of-File is reached, whichever comes first.
A newline character makes fgets stop reading, but it is considered a valid character and therefore it is included in the string copied to str.
A null character is automatically appended in str after the characters read to signal the end of the C string.
Cuando dije leer como texto me referia a leer y analizar una expresion para verificar si el usuario ha ingresado la opción correctamente. Lo que estas haciendo ahora es utilizar una cadena como si fuese un solo carácter y aunque es legal no es del todo correcto.

Saludos!
#139
Las variables globales son perjudiciales para la salud, trata de evitarlas siempre que sea posible.


Cita de: pablomi en 20 Febrero 2011, 20:44 PM
En ese caso tengo que reemplazar el scanf() por fgets() y poner la variable opcion como un arreglo de caracteres :-X

Efectivamente. La forma mas segura de realizar un ingreso de datos por parte del usuario es leyendo como texto y luego parseando y validando lo necesario.

Saludos
#140
El mensaje 'programa en C   que calcule un salario neto de un trabajador' fue bloqueado
Bienvenido al foro oert. No se hacen tareas!
Leer reglas:
http://foro.elhacker.net/reglas