Date post: | 17-Feb-2016 |
Category: |
Documents |
Upload: | daniel-cruz |
View: | 242 times |
Download: | 0 times |
Instituto Tecnológico Superior de Guanajuato
.
"USB Switch: Modificar permisos de escritura en discos removibles"
Elaborado por:
Cruz Gómez Daniel Salomón
https://github.com/Dreamylation
Sistemas Operativos
"3ºA"
09 de octubre del 2015
INTRODUCCIÖN
Hoy en día, es muy común el ir a un ciber-café y conectar nuestro dispositivo USB
para después recibir la sorpresa de que ya se infectó de un virus, incluso cuando
menos lo esperamos de las máquinas que menos esperamos suele pasar, vivir con
esta incertidumbre es motivo de preocupación y más aún si nuestro USB posee
información o datos valiosos.
Sólo basta con conocer que parte del registro de windows modificar para bloquear el
acceso de escritura a nuestra USB y de esta manera evitar que un virus modifique
nuestros archivos.
Es posible desactivar de forma manual los permisos de escritura en unidades
extraíbles, lo que el software de esta práctica hace, es de manera automática y con
el consentimiento del usuario, agrega al registro la llave necesaria para bloquear la
escritura en cualquier disco extraíble, sin embargo, se recomienda únicamente
insertar el USB con el software al PC infecta para primero bloquear el permiso y
después insertar la USB que será utilizada.
II. OBJETIVO
A través de un software creado, cambiar los permisos de escritura en unidades
extraíbles tales como USB, HDD externos, etc. El software modificará y de ser
necesario creará una llave en el registro del sistema para lograr tal fin.
III. MARCO TEÓRICO
El registro de WindowsEl registro es una base de datos en Windows que contiene información
importante acerca del hardware del sistema, programas instalados y
configuraciones, perfiles de cada cuenta de usuario, etc.
Normalmente no es necesario hacer cambios manuales al registro ya que los
programas y aplicaciones lo hacen de forma automática. Un incorrecto
cambio de valores en el registro puede llevar a la inutilización del sistema.
El registro posee una política para el uso de dispositivos extraíbles llamada
“StorageDevicePolicies”, en la cual se pueden cambiar los permisos de
escritura, lectura y control total de los dispositivos extraíbles; la llave que se
encarga de dichos permisos se llama WriteProtect la cual es de tipo DWORD
(32 bits).
Qt 5.5 (IDE)Qt es un entorno de desarrollo multi-plataforma para PC de escritorio,
sistemas embebidos y móviles. La plataforma está escrita en C++ y se utiliza
un preprocesador llamado MOC (Meta-Object Compiler) para introducir
características como las señales y los slots. Qt posee la capacidad de
generar widgets o formas a través de su librería QtQuick, lo cual lo convierte
en una excelente plataforma para desarrollar software.
IV. METODOLOGÍA
1. Abrir Qt 5.5 y crear un nuevo projecto (Qt Widget 2) y darle un nombre al
proyecto.
2. Ir a MainWindows.UI para crear la interface.
a. Extender el widget base hasta obtener el tamaño deseado.
b. Buscar en la caja de widgets a la izquierda el widget de Graphics View,
arrastrarlo y extenderlo de tal manera que el widget principal y el
Graphics View tengan el mismo tamaño.
c. Busca el widget de Push Button, arrastrar dos de ellos encima de los
demás widgets. Asignarle un nombre a ambos botones.
3. Agregar libresrías al archivo mainwindow.cpp.
4. Crear las señales para ambos botones.
a. Clic derecho al primer botón y seleccionar go to slot; agregar la
instrucción para deshabilitar escritura.
b. Hacer lo mismo para el segundo botón.
5. Crear la función startup para mostrar datos de las unidades removibles en el
sistema.
6. Agregar función dentro de un Timer en el constructor de la clase para que la
función se ejecute cada 5 segundos.
V. MATERIAL Y COMPONENTES EMPLEADOS
Hardware
Custom PC (AMD FX 4150, W 10).
Software
Qt 5.5 (IDE)
CMD Windows 10
Librerías usadas
QProcess
Clase para ejecutar programas externos y conmunicarse con elllos (usado
para ejcutar REG ADD).
QFile
Clase que provee una interface para leer desde y escribir a archivos.
QTextStream
Clase que provee una conveniente interface para leer y escribir texto.
QMessageBox
Clase que porvee una caja de diálogo para informar o preguntar al usuario y
recibir una respuesta.
QTimer
Clase que provee temporizadores repetitivos.
cstdlib
Clase de la librería standard de C (usada para acceder a System)
VI. DESARROLLO
Abrir Qt Creator -> new Project -> Applications -> Qt Widget Application.
De esta forma crearemos un nuevo projecto basado en Widgets, le damos un
nombre al proyecto y le damos todas las opciones por defecto.
1.- “Crear nuevo projecto de widgets”.
Una vez creado el pryecto, ir a la carpeta Forms y abrir el archivo mainwindows.ui,
este es el editor de formas para crear ventanas y botones.
2.-“Abrir mainwindows.ui”.
En el editor de formas, expandimos el widget principal hasta que la ventana tenga el
tamaño deseado, buscamos el widget Graphics view en la caja de widgets de la
izquierda y lo arrastramos sobre el widget principal, Graphics View nos permite
insertar una imagen que cubra todo el widget; expandimos el Graphics View hasta
que abarque todo el widget principal. Para agregar una imagen de fondo, bastan con
ir a la propiedad de style sheet en la caja de propiedades del Graphics View
ubicado en la parte inferior derecha.
Agregamos 2 botones con el widget de Push Button.
3.- “Editor de formas”.
Editamos el texto mostrada por los botones accediendo a su propiedad Text en la
caja de propiedades.
4.- “Editar texto mostrado”.
Accedemos al archivo mainwindows.cpp y agregamos las librerías necesarias:
#include "QProcess"#include "QFile"#include "QTextStream"#include <cstdlib>#include "QMessageBox"
#include <QTimer>
5.- “Agregamos librerías a utilizar”.
Volvemos al editor de formas y damos clic derecho en uno de los botones que
creamos, seleccionamos go to slot..
6.- “go to slot”.
El go to slot nos permite crear un slot nuevo que funcionará como un evento que se
ejecutará cuando dicho botón sea oprimido. Dentro de esta función colocamos el
código para deshabilitar la escritura en unidades extraíbles.
void MainWindow::on_habilitar_clicked(){
QProcess::execute ("REG ADD HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies /v WriteProtect /t REG_DWORD /d 1 /f"); QMessageBox::information(0, "Escritura Deshabilitada", QString("Escritura Deshabilitada"));}
Nuestra función llama al método execute de la clase QProcess la cual permite
executar comandos de consola, el comando que ejecutamos es
REG ADD
Este comando nos permite agregar una llave nueva al registro.
El parámetro:
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\StorageDevicePolicies
Agregará la llave en esa localización.
/v WriteProtect /t REG_DWORD /d 1
Esta parte creará una llave de nombre WriteProtect con tipo de dato REG_DWORD
y valor 1.
Finalmente, el parámetro ‘/f’, nos permite ejecutar la orden sin necesitar permisos
del usuario.
El siguiente comando es:
QMessageBox::information
El cual es una librería de Qt para presentar cuadros de mensajes al usuario. Recibe
tres parámetros: puntero a evento, nombre de la ventana de mensaje, mensaje a
presentar. Este último debe estar en formato Qstring, por ello realizamos una
conversión explícita.
7.- “Agregamos los eventos al primer botón”.
Hacemos lo mismo para el otro botón con la única diferencia que la llave será
creado con valor 0.
8.- “Se hace lo mismo para el otro botón”.
Creamos una función Startup que nos servirá para mostrar la información de los
dispositivos extraíbles.
void MainWindow::startup(){ system("wmic logicaldisk where drivetype=2 get deviceid, volumename, description > %SystemDrive%\\data.txt"); QFile file("C:\\data.txt");
if (!file.open(QIODevice::ReadOnly)) { QMessageBox::information(0, "error", file.errorString()); }
QTextStream in(&file);
QString line = in.readAll();
ui->textEdit->clear(); ui->textEdit->setText(line);}
La función System nos permite llamar la consola de Windows y ejecutar un
comando, en este caso el comando es wmic logicaldisk. El cual presenta
información de todos los dispositivos de almacenamiento conectados, sin embargo
nosotros sólo queremos mostrar unidades extraíbles, por lo cual agregamos los
siguientes parámetros:
where drivetype=2 get deviceid, volumname, description
Esto filtra los dispositivos a unidades extraíbles.
La última parte de los parámetros nos permite almacenar los datos arrojados por el
comando y guardarlos en una ubicación y archivo específico.
QFile file Crea un archivo propio de Qt con el nombre de “data.txt”.
La siguiente instrucción nos permite abrir el archivo, en caso que el archivo no
exista o esté corrupto nos arrojará un mensaje diciendo que el archivo no existe.
if (!file.open(QIODevice::ReadOnly)) {
QMessageBox::information(0, "error", file.errorString()); }
Finalmente las últimas instrucciones:
QTextStream in(&file);QString line = in.readAll();
ui->textEdit->clear();ui->textEdit->setText(line);
Hacen un parse de tipo de datos, primero creamos una corriente de texto con
QTextStream usando como base el archivo que creamos con QFile. Después
leemos cada línea del archivo y la convertimos a un string de Qt con la línea:
QString line = in.readAll();
Las última líneas nos ayudan a mostrar el texto en un cuadro de texto.
9.- “Agregamos función Startup”.
Finalmente, llamamos a la función desde el constructor de la clase principal y
hacemos el llamado dentro de un temporizador para que la información se actualize
cada 5 segundos.
startup();QTimer *timer = new QTimer(this);connect (timer, SIGNAL(timeout()), this, SLOT(startup()) ); timer->start(5000);
Se hace un primer llamado a la función startup y despues se crea un temporizador el cual se conecta a la función; se inicializa el temporizador en 5000ms.
10.- “Temporizador”.
VIII. CONCLUSIONES
Usando el editor de registro de Windows ya sea de forma manual o a través de la
consola, podemos modificar diversos permisos que puedan incrementar nuestro
nivel de seguridad, sin embargo, existen diversos virus que trabajan desde el
registro haciendo la tarea de restaurar nuestra PC aun más ardua. Por ello se
recomienda deshabilitar el acceso al registro a cualquier programa que el usuario no
haya dado permisos.
Cuando se trabaja con software, a lo largo de la historia de Windows se ha
empezado a ver cierto problema o inconveniente, y eso es el nivel de permisos que
el sistema le da a aplicaciones de terceros. En este caso, es completamente
necesario que el usuario ejecute el programa en modo administrador, ya que de otra
manera los comandos de consola no se ejecutarán con el nivel de permisos
necesario como para editar el registro o crear archivos en la raíz del sistema.
IX. BIBLIOGRAFÍA
Microsoft(2015), What is a registry?, windows.microsoft.com, Recuperado el 08/10/2015,URL: http://windows.microsoft.com/en-us/windows/what-is-registry-editor#1TC=windows-7
Microsoft Support(2015), How to add, modify, or delete registry subkeys and values by using a .reg file, support.microsoft.com, Recuperado el 08/10/2015, URL: https://support.microsoft.com/en-us/kb/310516
Qt Documentation (2015), Qt Documentation, doc.qt.io, Recuperado el 08/10/2015, URL: http://doc.qt.io/