Tema destacado: [Overclocking] Récords de overclock del foro
Autor
|
Tema: [C/C++] Screenshot en Jpeg (Leído 3,167 veces)
|
tyldan
Desconectado
Mensajes: 12
|
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: 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? 
|
|
|
|
|
En línea
|
|
|
|
hjesush
Desconectado
Mensajes: 111
Mi nick es sensual...
|
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 
|
|
|
|
« Última modificación: 26 Mayo 2009, 15:55 por hjesush »
|
En línea
|
|
|
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
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 
|
|
|
|
|
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
|
|
|
|
~~
|
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
Mensajes: 12
|
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  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
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
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  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
Mensajes: 12
|
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  Saludos No, no  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
|
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.htmlOtra 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.phpMi 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. <?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
Mensajes: 981
Invisible_Hack™ Nick Registrado ^^
|
¿Y tiene que ser forzosamente en C o C++? Porque en AutoIt eso se consigue muy facil usando ScreenCapture...  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
Mensajes: 12
|
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...  Pero si es en C o C++.....no te puedo ayudar para nada... Si en C o C++ 
|
|
|
|
|
En línea
|
|
|
|
|
Man-In-the-Middle
|
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
Mensajes: 12
|
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
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
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
Mensajes: 111
Mi nick es sensual...
|
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=EnsambladorPienso 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 
|
|
|
|
|
En línea
|
|
|
|
tyldan
Desconectado
Mensajes: 12
|
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=EnsambladorPienso 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  Esta la puedo anadir tambien al codigo C (creo) puede ir tambien, despues la veo 
|
|
|
|
|
En línea
|
|
|
|
|
|