elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
21 Mayo 2012, 13:56  


Tema destacado: [Overclocking] Récords de overclock del foro

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderadores: Karcrack, [Zero])
| | |-+  [C/C++] Screenshot en Jpeg
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [C/C++] Screenshot en Jpeg  (Leído 3,167 veces)
tyldan

Desconectado Desconectado

Mensajes: 12


Ver Perfil
[C/C++] Screenshot en Jpeg
« en: 26 Mayo 2009, 14:43 »

Este creo que fue la cosa mas dificil de hacer, creo tambien por mi inexperiencia
Osea la captura de la pantalla.

Veo trojan que en 1 segundo hacen un screenshot y lo envian al servidor.

-Antes hize una funcion que captura pixel por pixel.
   ... 3 minutos para capurar una pantalla 1600x1200 -.-'


-Despues Busque algo de hecho en internet, y encontre un source
   ... Lo guardaba en BMP.... 3 MB para UNA Captura


-Despues empeze a utilizar Jpeglib
   ... Rebuena, Pero necesita instalar al PC de la victima tambien una DLL -.-'


-Finalmente utilize los GDI
   ... alcanze a hacer una captura en JPEG (100 kb o menos por un 1600x1200)
       pero cada vez que el trojan hace una sola captura, utiliza el 8% de CPU!!!!!
       una captura cada 5 segundos... creo que alguen se va a  dar cuenta xD
       el problema es esta funcion:

Código:
int risultato = (Captura->Save(filename, &imgCLSID, &encodeParameters) == Ok);   

Si la convierto en jpeg con los encoder parameters me roba el 9% de cpu.
Si la dejo en BMP solo el 2% pero los files son de 3MB o mas

Alguien paso en eso y me puede dar una solucion?  ;D
En línea
hjesush

Desconectado Desconectado

Mensajes: 111


Mi nick es sensual...


Ver Perfil WWW
Re: [C/C++] Screenshot en Jpeg
« Respuesta #1 en: 26 Mayo 2009, 15:52 »

wenas.
Nunca e tocado ese tema, podrías hacer la captura cuando el CPU este al 0% (inactivo),
así supongo que tendrías mas posivilidades de que no te detectaran...

Pero claro no sera muy interesante lo que captures :xD
« Última modificación: 26 Mayo 2009, 15:55 por hjesush » En línea

Novlucker
Ninja y
Ex-Staff
*
Desconectado Desconectado

Mensajes: 10.239


Yo que tu lo pienso dos veces


Ver Perfil
Re: [C/C++] Screenshot en Jpeg
« Respuesta #2 en: 26 Mayo 2009, 16:03 »

No has pensado en aumentar el intervalo entre imagen e imagen? o tomar la screen ante un determinado evento?  :-\

Partiendo de un teórico de:
  • Una imagen cada 5 segundos
  • Peso de la imagen 100 kb
  • Una pc activa 3 hrs

60/5 = 12 imagenes minuto = 1200 kb de transferencia
12*60 = 720 imagenes hora - - > 2160 imagenes en unas tres horas = 200 Mb de transferencia

No me parece necesaria semejante cantidad de datos  :rolleyes:
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
Re: [C/C++] Screenshot en Jpeg
« Respuesta #3 en: 26 Mayo 2009, 16:27 »

Hay ciertos métodos que pueden ayudarte a optimizar la transferencia de capturas de pantalla...

Lo más recomendado es capturar la pantalla por partes, por ejemplo, divides la pantalla en 8 cuadrados iguales y los capturas de uno en uno usando el Api de windows mismamente.
Luego miras si alguno de esos cuadrados ha variado respecto a la anterior captura. De ser así comprimes dicho cuadrado a jpg y lo envías, de esta manera te ahorras estar enviando capturas si la pantalla o algún trozo de la pantalla no cambia.

La compresión jpg es un tema complicado de implementar, lo mejor sería que consiguieses alguna librería o que usases otro método de compresión (como el algoritmo Huffman), aunque pasar la imagen a jpg es mejor por que el cliente no pierde tiempo descomprimiendo la imagen, si no que la muestra tal cual y puedes elegir la calidad.
En línea
tyldan

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: [C/C++] Screenshot en Jpeg
« Respuesta #4 en: 26 Mayo 2009, 17:53 »

No has pensado en aumentar el intervalo entre imagen e imagen? o tomar la screen ante un determinado evento?  :-\

Partiendo de un teórico de:
  • Una imagen cada 5 segundos
  • Peso de la imagen 100 kb
  • Una pc activa 3 hrs

60/5 = 12 imagenes minuto = 1200 kb de transferencia
12*60 = 720 imagenes hora - - > 2160 imagenes en unas tres horas = 200 Mb de transferencia

No me parece necesaria semejante cantidad de datos  :rolleyes:

Eso poniendo que el hacker esta mirando la pantalla por 3 HORAS...

Cuando veo una pantalla remota, la veo por poco tiempo, por alli' maximo 30 minutos.

Ademas si la veo por 30 minutos es porque esta' haciendo algo interesante.

Y ademas el tiempo de captura lo puede elegir el Servidor.


Hay ciertos métodos que pueden ayudarte a optimizar la transferencia de capturas de pantalla...

Lo más recomendado es capturar la pantalla por partes, por ejemplo, divides la pantalla en 8 cuadrados iguales y los capturas de uno en uno usando el Api de windows mismamente.
Luego miras si alguno de esos cuadrados ha variado respecto a la anterior captura. De ser así comprimes dicho cuadrado a jpg y lo envías, de esta manera te ahorras estar enviando capturas si la pantalla o algún trozo de la pantalla no cambia.

La compresión jpg es un tema complicado de implementar, lo mejor sería que consiguieses alguna librería o que usases otro método de compresión (como el algoritmo Huffman), aunque pasar la imagen a jpg es mejor por que el cliente no pierde tiempo descomprimiendo la imagen, si no que la muestra tal cual y puedes elegir la calidad.


El problema no es el envio de datos, porque la transferencia es muy rapida (una pantalla de 1024x768 pesa meno de 30kb).
El problema es la convercion o captura de la pantalla.
« Última modificación: 26 Mayo 2009, 17:55 por tyldan » En línea
Novlucker
Ninja y
Ex-Staff
*
Desconectado Desconectado

Mensajes: 10.239


Yo que tu lo pienso dos veces


Ver Perfil
Re: [C/C++] Screenshot en Jpeg
« Respuesta #5 en: 26 Mayo 2009, 18:02 »

Ah! entiendo entonces que la captura de pantalla la activas mientras estas "jugando", pensé que quizás la función se activaba y te olvidabas, te desconectabas, y simplemente te limitabas a recibir las imagenes en algún sitio, vease mail o ftp, así como dices si  :P

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

tyldan

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: [C/C++] Screenshot en Jpeg
« Respuesta #6 en: 26 Mayo 2009, 18:06 »

Ah! entiendo entonces que la captura de pantalla la activas mientras estas "jugando", pensé que quizás la función se activaba y te olvidabas, te desconectabas, y simplemente te limitabas a recibir las imagenes en algún sitio, vease mail o ftp, así como dices si  :P

Saludos

No, no :D

La captura es en tiempo real, como por ejemplo Poisonivy, Turkojan etc. etc.

El unico problema es la Cpu. :(
En línea
Man-In-the-Middle
Colaborador
***
Desconectado Desconectado

Mensajes: 3.644



Ver Perfil
Re: [C/C++] Screenshot en Jpeg
« Respuesta #7 en: 26 Mayo 2009, 18:08 »

Lo que diece Eon es la mejor opcion, y ES LO QUE SE USA NORMALMENTE
http://foro.elhacker.net/programacion_cc/capturar_pantalla_en_jpg_devc_solucionado-t161812.0.html

Otra cosa que podrias hacer es bajar el Vnc,  renombar vnc.exe a zip, desempaquetar todo los files esta desarrollado en java y ver como funciona su captura, compresion y todo.

http://www.realvnc.com/products/download.html ---Mayor Info

O puedes ver un action Script que te hace eso, ahora se necesitas manejar php
Export JPEG with Flash/PHP  http://www.sephiroth.it/tutorials/flashPHP/print_screen/page002.php

Mi opinion es que ves como se hace en otros lenguajes y al final lo lleves a C++, como sabemos todos los lengujes son parecidos, ya es la caña de C/u darle la forma.



Código:
<?php

error_reporting(0);
/**
 * Get the width and height of the destination image
 * from the POST variables and convert them into
 * integer values
 */
$w = (int)$_POST['width'];
$h = (int)$_POST['height'];

// create the image with desired width and height

$img = imagecreatetruecolor($w, $h);

// now fill the image with blank color
// do you remember i wont pass the 0xFFFFFF pixels
// from flash?
imagefill($img, 0, 0, 0xFFFFFF);

$rows = 0;
$cols = 0;

// now process every POST variable which
// contains a pixel color
for($rows = 0; $rows < $h; $rows++){
    // convert the string into an array of n elements
    $c_row = explode(",", $_POST['px' . $rows]);
    for($cols = 0; $cols < $w; $cols++){
        // get the single pixel color value
        $value = $c_row[$cols];
        // if value is not empty (empty values are the blank pixels)
        if($value != ""){
            // get the hexadecimal string (must be 6 chars length)
            // so add the missing chars if needed
            $hex = $value;
            while(strlen($hex) < 6){
                $hex = "0" . $hex;
            }
            // convert value from HEX to RGB
            $r = hexdec(substr($hex, 0, 2));
            $g = hexdec(substr($hex, 2, 2));
            $b = hexdec(substr($hex, 4, 2));
            // allocate the new color
            // N.B. teorically if a color was already allocated
            // we dont need to allocate another time
            // but this is only an example
            $test = imagecolorallocate($img, $r, $g, $b);
            // and paste that color into the image
            // at the correct position
            imagesetpixel($img, $cols, $rows, $test);
        }
    }
}

// print out the correct header to the browser
header("Content-type:image/jpeg");
// display the image
imagejpeg($img, "", 90);
?>

Saludos
MITM
« Última modificación: 26 Mayo 2009, 18:19 por Man-In-the-Middle » En línea
invisible_hack


Desconectado Desconectado

Mensajes: 981


Invisible_Hack™ Nick Registrado ^^


Ver Perfil WWW
Re: [C/C++] Screenshot en Jpeg
« Respuesta #8 en: 26 Mayo 2009, 18:24 »

¿Y tiene que ser forzosamente en C o C++? Porque en AutoIt eso se consigue muy facil usando ScreenCapture... :D

Pero si es en C o C++.....no te puedo ayudar para nada...
En línea

"Si no visitas mi blog, Chuck te dará una patada giratoria"
tyldan

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: [C/C++] Screenshot en Jpeg
« Respuesta #9 en: 26 Mayo 2009, 18:27 »

Lo que diece Eon es la mejor opcion, y ES LO QUE SE USA NORMALMENTE
http://foro.elhacker.net/programacion_cc/capturar_pantalla_en_jpg_devc_solucionado-t161812.0.html

Otra cosa que podrias hacer es bajar el Vnc,  renombar vnc.exe a zip, desempaquetar todo los files esta desarrollado en java y ver como funciona su captura, compresion y todo.

http://www.realvnc.com/products/download.html ---Mayor Info


..CUT..

Saludos
MITM

Acabo de ver una solucion que no alcanze a implementar, osea:
Capturar en bmp y despues convertir en jpeg.
En ese post que me linkeaste la convercion es heca con un source.
Asi puedo poner unos sleep si me gasta demasiada CPU en la convercion.

Gracias MITM, vamso a ver si el tiempo de captura y el gasto de CPU hacen un buon compromiso  ;)

¿Y tiene que ser forzosamente en C o C++? Porque en AutoIt eso se consigue muy facil usando ScreenCapture... :D

Pero si es en C o C++.....no te puedo ayudar para nada...

Si en C o C++  ;D
En línea
Man-In-the-Middle
Colaborador
***
Desconectado Desconectado

Mensajes: 3.644



Ver Perfil
Re: [C/C++] Screenshot en Jpeg
« Respuesta #10 en: 26 Mayo 2009, 18:30 »

No hay problema tio, para eso estamos  ;)

Edit.
Por ahi estab viendo que tu cliente es java, tonces manejas java, creeme que tu respuesta esta al 100% en lo del vnc, source al  100%.

Saludos
MITM
« Última modificación: 26 Mayo 2009, 18:32 por Man-In-the-Middle » En línea
tyldan

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: [C/C++] Screenshot en Jpeg
« Respuesta #11 en: 26 Mayo 2009, 19:25 »

Cliente = Trojan
Servidor = Administrador

Osea el codigo del trojan es en C/C++, es el que tiene que hacer un screenshot y enviarlo al Servidor (java).

Alcanze a poner las librerias sin errores, ahora mismo intendo y te digo.
En línea
Novlucker
Ninja y
Ex-Staff
*
Desconectado Desconectado

Mensajes: 10.239


Yo que tu lo pienso dos veces


Ver Perfil
Re: [C/C++] Screenshot en Jpeg
« Respuesta #12 en: 26 Mayo 2009, 19:29 »

El problema es que tienes los conceptos invertidos

Cliente = programa que administra el troyano
Servidor = "troyano", recibe las funciones del cliente y las realiza
:http://es.wikipedia.org/wiki/Troyano_(inform%C3%A1tica)

Saludos
« Última modificación: 26 Mayo 2009, 19:34 por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

hjesush

Desconectado Desconectado

Mensajes: 111


Mi nick es sensual...


Ver Perfil WWW
Re: [C/C++] Screenshot en Jpeg
« Respuesta #13 en: 26 Mayo 2009, 20:01 »

Buscando un poco he encontrado por hay un programa en ASM que hace una captura y la vuelca a un archivo: http://www.lawebdelprogramador.com/codigo/enlace.php?idp=1023&id=29&texto=Ensamblador

Pienso que podrías usar ese sistema es decir, hacer el volcado de las capturas en el servidor y pasarles los archivos al cliente y ya hay tu las conviertes consumiendo tu propia cpu..

Aunque no se realmente que fase es la que consume mas recursos :P
En línea

tyldan

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: [C/C++] Screenshot en Jpeg
« Respuesta #14 en: 26 Mayo 2009, 20:09 »

Entonces,

Acabo de probar el metodo BMP2JPEG.c

Me gasta el 12% de cpu, y ademas hay una falla en el codigo, osea no desocupa la memoria que usa para hacer lo screenshot.

Despues solo 5 screens la memoria de lo Heap llega hasta a 30 MB xD

Voy a arreglar esa memory leak y despues intento de pausar un poquito la convercion.

Buscando un poco he encontrado por hay un programa en ASM que hace una captura y la vuelca a un archivo: http://www.lawebdelprogramador.com/codigo/enlace.php?idp=1023&id=29&texto=Ensamblador

Pienso que podrías usar ese sistema es decir, hacer el volcado de las capturas en el servidor y pasarles los archivos al cliente y ya hay tu las conviertes consumiendo tu propia cpu..

Aunque no se realmente que fase es la que consume mas recursos :P

Esta la puedo anadir tambien al codigo C (creo) puede ir tambien, despues la veo :D
En línea
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda C++ JPEG
Programación C/C++
W0lFy 5 1,045 Último mensaje 28 Enero 2011, 03:05
por W0lFy
Consulta ScreenShot de una ventana web
Java
DonVidela 1 659 Último mensaje 9 Noviembre 2011, 22:27
por DonVidela
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines