Saltar al contenido

Bloquear un libro para que sólo se ejcute desde un determinado dispositivo (drive)


shadowjuan

Recommended Posts

publicado

Hola a todos,

Primero que nada, en apartado personal, debo disculpas al foro por haber descuidado algunas entradas que yo mismo abrí pidiendo ayuda para algunas cosas con las que no podía. Realmente si no contesto es porque no puedo, aunque alguna vez también se me olvida por completo, y con eso ya no puedo hacer mucho. Por lo tanto, mis disculpas a todos por las molestias ocasionadas, como a Gerson, que le dejé esperando unos cuantos días sin respuesta a su aportación (Para Gerson: gracias, pero al final lo solucioné bloqueando el acceso al código por Herramientas/Propiedades/Proteger código, aunque igual me salta el cuadro de diálogo. Di el tema por zanjado y me olvidé, literalmente, de entrar aquí y decirlo. Y si me dejo a alguien más sin contestar, lo siento...). Vuestra ayuda es inestimable, y os aseguro que sólo recurro a vosotros cuando voy desesperado y la cabeza rota ya, ni mucho menos espero las cosas masticadas :(

Para redimirme un poco, quiero aportar algo al foro. Es algo muy buscado, y llevo ya un tiempo peleándome con esto. Explico. La idea es "enlazar" un libro a un dispositivo USB, para que sólo funcione desde él.

El funcionamiento es el siguiente. Cuando se abre el archivo, comprueba el ID de la unidad desde la que funciona (la ruta, por ejemplo: G:\Excel\Libro1.xlsm, proporciona la unidad G), y pueden darse dos casos:

a) que el libro no se haya abierto nunca: el código de inicio guarda el número de ID del drive ("dispositivo": pendrive, HDD, etc) en una celda del libro, y deja proceder (editar el libro). Por supuesto, esto DEBE ser invisible al usuario; se debería hacer en alguna celda de una hoja oculta e "inaccesible". La ID se QUEDA GUARDADA, por el código, aunque el usuario cierre el libro inmediatamente tras su apertura (ya que hay un thisworkbook.save).

B) que el libro ya se haya abierto alguna vez: el código de inicio comprueba la ID del drive de la unidad de la ruta, y si coincide con la almacenada, deja cargar el libro como si nada (proceso transparente al usuario), pero si NO coincide la ID almacenada y la ID actual, salta un mensaje de error (un msgbox) y el libro se cierra, sin poder editarse.

La idea es la siguiente: yo creo un libro, que el receptor debe colocar en un pendrive (o lo pongo yo mismo), se ejecuta, y ese libro se "enlaza permanentemente" al dispositivo (a su ID) desde el que se abrió la primera vez.

Imaginad esta situación: tengo un disco duro ©, otro disco duro (D) y un pendrive (E). Si abro el archivo desde el pendrive (E), no podrá abrirse desde C: ni D: si lo copio allí, por lo que ese archivo ÚNICAMENTE podrá abrirse desde el pendrive. Y viceversa: si yo tengo un archivo en mi disco duro y alguien "me lo roba", NUNCA podrá abrirlo desde otro dispositivo que no sea mi disco duro.

La "pega" lógica de esto es que al quedar un archivo atado a un dispositivo, no podríamos (sin trastear código) editarlo desde el disco duro, aunque el archivo ES funcional en CUALQUIER ordenador (con Office :P) SIEMPRE QUE SE EJECUTE DIRECTAMENTE DESDE EL PENDRIVE (ya que su ID no cambia), por lo que nadie puede utilizar el archivo fuera de su lugar de origen. Así, nadie podría "compartir" el libro que hemos creado. Lo que sí se podría, naturalmente (y sin poner más protección), es tener varias copias del mismo archivo en el pendrive (Ejemplo: E:\Cuentas1.xlsm, E:\Cuentas2.xlsm, etc), por lo que podríamos tener copias de seguridad (en el mismo USB, da igual la carpeta, mientras que la ID corresponda). También es perfectamente posible copiar el archivo en otro lugar fuera del pendrive, pero para ejecutarlo deberíamos "devolverlo" al pendrive. Es decir, yo puedo guardar mi libro en otro sitio y tener ese backup, pero no podría editarlo. Para ello, debería volverlo a colocar en el pendrive y abrirlo desde ahí.

Todos sabemos que hay formas de saltarse esta 'protección', pero para cualquier persona que no sepa mucho de esto, es un bloqueo en toda regla.

Subo un archivo de muestra con todas las opciones bien visibles para vosotros, y el código listo para ejecutarse. Recordad que se guarda la ID del drive desde donde se abra la primera vez, por lo que si queréis resetearla, re-abridlo desde el drive correcto, borrad la ID ecrita en la casilla B2, y GUARDAD Y CERRAD. O descargad de nuevo el archivo...

Para probar su funcionamiento, podéis hacer esto: descargad el libro, copiadlo a un pendrive cualquiera, ejecutadlo, cerradlo, copiad el archivo a vuestro disco duro, y probad a abrirlo de nuevo. También puede abrirse en otro PC desde el mismo pendrive, como ya he dicho antes.

El trozo de código para obtener la ID lo conseguí en esta página:

VBA Express Forum - View Single Post - Solved: Generate a computer's hardware code

Por lo que no dejo de reconocerle su parte de crédito al autor original del código, "xld". El resto de código y montaje es cosa mía ya :)

Un saludo a todos, y perdonad el tocho, pero había que explicar las cosas bien :)

PD Lo he puesto como un archivo de Office 2007-2010 habilitado para macros.

Libro1.zip

  • 2 years later...
publicado

Excelente aporte Juan, sin palabras. Se me ocurre para evitar copias del archivo, encriptar el espacio en el pendrive dejando libre (espacio sin encriptar) solo el tamaño del archivo mas algun KB, por lo que al querer duplicarlo el espacio seria insuficiente.

Saludos!

publicado

Exelente... a probarlo,. y gracias por el maravillosos aporte,. con este codigo mas un codigo de licencia.. uffff.. quedaria como el fuerte noxx.. impenetrable.. jajaj

gracias nuevamente.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.