Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Deep_Purple en 23 Junio 2005, 18:13 pm



Título: PROTEGER APLICACION
Publicado por: Deep_Purple en 23 Junio 2005, 18:13 pm
Hola a todo el mundo y gracias por emplear vuestro tiempo.
Ante todo he de decir que soy Ingeniero Químico (cuando entre el proyecto) y que estoy realizando una aplicación en VBA con fines docentes (me ha costado 3 años).
Hasta ahora todo iba bien pero mis directores de proyecto me han amenazado con suspenderme si no les entrego la aplicación funcionando correctamente. ("es que en Agosto nos vamos de vacaciones y no la podemos probar, te matriculas otra vez y no pasa nada...")
El objetivo del proyecto no es la aplicación en si, sino diseñar una alternativa a otro tipo de aplicaciones comerciales muy caras y que se apartan de la docencia.

Mi pregunta es la siguiente:
¿Como puedo limitar el uso de la aplicación?
He pensado en limitar la fecha. Pero la pueden cambiar
También he pensado en cuantas veces arranca la aplicación. Pero basta con hacer una copia del CD y volverlo a instalar.
¿Se puede averiguar el número de la máquina?
¿Puede conectarse a internet y averiguar la fecha?

No se estoy un poco perdido y agradecería cualquier ayuda.
Nota: La aplicación la voy a distribuir por otros canales de forma gratuita cuando la tenga terminada.

Un saludo


Título: Re: PROTEGER APLICACION
Publicado por: programatrix en 23 Junio 2005, 21:01 pm
Se me ocurre que crees alguna entrada en el registro y le vas sumando uno por cada inicio y que cuando llege a 15 el programa deje de funcionar. Así solo vale para usarle 15 veces el programa.
Si lo que quieres es que sea de tiempo, días etc.. con cambiar la fecha vale por decir mas con formatear el disco duro vale.


Título: Re: PROTEGER APLICACION
Publicado por: goodbye en 26 Junio 2005, 09:45 am
Primero mira este pos:
http://foro.elhacker.net/index.php/topic,74232.0.html

Luego basandote en este numero que recogera tu programa desde la primera vez que se ejecute, crearas un algoritmo que genere la clave para que se pueda usar. De esta forma cada vez que lo instalen en una pc tendran que contactarte para que les proporciones la clave.
Mi propuesta es que hagas una aplicacion para ti, aparte de tu programa, pero logicamente que funcione con el mismo algoritmo, el generador de claves validas para registrarlo.
Esto conjuntamente con el uso del registro de Windows seria una buena proteccion.




Título: Re: PROTEGER APLICACION
Publicado por: Deep_Purple en 27 Junio 2005, 11:17 am
Hola. Gracias a "reydelmundo11" y a "CrakelDestripador" por contestar a mi pregunta.
1. La primera opción es bastante buena para controlar a los de la universidad. Porque combinando las veces que se ejecuta la aplicación con la fecha podría bastar (no creo que les haga gracia tener que formatear el ordenador asiduamente)
2. Con respecto a la segunda opción, después de haber enviado este post, leí el post donde se detalla el procedimiento para crear la clave GUID. Lo probé pero no entiendo como poder aplicarlo. Cada vez que se ejecuta genera un código de forma aleatoria. Si cuando el usuario ejecuta el programa y genera por primera vez este código. ¿como puedo saber yo que clave va a generar?
3. He mirado alguanas de las propiedades del control Winsock y parece interesante. Si a cada copia le asigno un código generado por ejemplo con (2) y la aplicación para funcionar debe conectarse con el servidor para confirmar su funcionamiento, podría controlar si esta gentuza se está aprovechando de la aplicación. Es decir solo utilizarían la aplicación los usuarios que esten autorizados.
¿La duda es como hacerlo? Tengo conexión ADSL de Timofonica con una IP variable, por lo que no se donde ubicar el programa cliente, que por lo que he visto en el "msdn" no sería muy complicado de hacer.

Gracias de antemano


Título: Re: PROTEGER APLICACION
Publicado por: programatrix en 27 Junio 2005, 14:45 pm
Te recomiendo que no uses nada que tenga que ver con el control winsock y de conexión a servidor.
1 Un simple firewall puede parar la conexión para comprobar lo que quieras en tu servidor.
2 Pueden pensar mal, pueden pensar que se trata de spyware y no de un programa legal.
3 Se necesita tener el control mswinsock.ocx para hacer esto.
4 Para tener un servidor por un puerto, necesitas tener un ordenador encencido las 24h del dias 365 días al año y tener no-ip.
Lo que te recomiendo es lo del registro o lo del tiempo. O también puedes crear un fichero oculto o una entrada en el registro y cada día que pasa va sumando un 1 hasta que llege a 30.



Título: Re: PROTEGER APLICACION
Publicado por: Deep_Purple en 27 Junio 2005, 15:29 pm
Ok, reydelmundo11

De lo que no tengo ni idea es de como generar un fichero con el atributo oculto.

Saludos :D


Título: Re: PROTEGER APLICACION
Publicado por: Nosferatu en 27 Junio 2005, 15:38 pm
Hola, Deep_Purple, quizas no es lo que estes buscando, pero tenia hace tiempo un codigo para proteger una aplicacion de 15 dias, segun un .txt, su autor es Eduardo Garcia Valsi - Analista de Sistemas


Primero, en un modulo, las siguientes declaraciones:
Código:
Dim Ban As Integer    'para la bandera
Public valoracion As String    'para el PWD que tu le des al
usuario

y en el form, "KeyPress" el siguiente codigo:
Código:
Private Sub laclavetext_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        FechaForm.valoracion = laclavetext.Text
        Unload Me
    End If

No soy un experto del lenguaje basic, pero podrias añadir un form con el codigo que describo, con la propiedad "Visible = False" y tambien podrias añadirle App.Taskvisible = False para ocultarlo un poco del Ctrl+Alt+Supr

Bueno, espero que te sirva o que se te ocurra otra idea ;D

un saludo

PD: se me olvidaba, para regular eso del tiempo, podrias añadir otra miniaplicacion para que desde que se ejecuta, mantenga el tiempo independientemente del tiempo del sistema. Asi, la aplicacion de 15 dias tendria que recurrir a la miniaplicacion y no a la fecha del sistema. haber si encuentro algo y te lo pongo ;)  Para pillar la fecha, propiad Visible = False
Código:
Label1.Caption = Date


Título: Re: PROTEGER APLICACION
Publicado por: programatrix en 27 Junio 2005, 18:43 pm
Un archivo se oculta asi:
Código:
Call SetAttr("ruta del archivo y nombre", vbHidden)
Y para añadir una entrada:
Código:
Set sh = CreateObject("WScript.Shell")
sh.RegWrite "HKEY_CURRENT_USER\Software\dirección", "valor"
Creo que con esto ya puedes ir tirando


Título: Re: PROTEGER APLICACION
Publicado por: Deep_Purple en 27 Junio 2005, 19:04 pm
Muchas gracias a todos
Con lo de reydelmundo11 creo que será suficiente pero si Nospheratu encuentra el método para que la aplicación funcione con una fecha independiente de la del sistema ya sería total.

Gracias a todos.


Título: Re: PROTEGER APLICACION
Publicado por: Nosferatu en 27 Junio 2005, 20:09 pm
Hola de nuevo! bueno quisiera aclarar que lo mio es mas la imaginacion, y no la puesta en practica de la misma (tristemente) ;D No creo que de la solucion definitiba para el problema, simplemente porque no soy un programador avanzado pero espero ayudar a acercarte a la solucion. Se me ocurren las siguientes ideas:

1-Podrias implementar un relog en tu aplicacion, para que empezara a contar desde su ejecucion, y con la aportacion de reydelmundo11, se añada al registro. E visto el siguiente codigo que puede valer. Autor:  J.I. Moratiel

Modulo:
Código:
Option Explicit
Dim segun As Byte
Dim minu As Byte
Dim hor As Byte
Dim resumen As String
Dim pitido As Variant
Dim Pitido1 As Variant

Form:
Código:
Private Sub Reloj_Timer()
    Etiqueta.Caption = Format(Now, "hh:mm:s")
   
   'sonido
    pitido = Minute(Now)
    Pitido1 = Second(Now)
    If pitido = 0 And Pitido1 = 0 Then
        Beep
    End If
   
   
    'Reloj desde arranque
    segun = segun + 1
    If segun = 60 Then
        minu = minu + 1
        segun = 0
    End If
    If minu = 60 Then
        hor = hor + 1
        minu = 0
    End If
    resumen = Format(hor, "00") & ":" & Format(minu, "00") & ":" & Format(segun, "00")
    Etiqueta1.Caption = resumen
End Sub
Pero, eso, enlazarlo con la aplicacion, pues no lo se. La idea del reydelmundo11 me parece genial al respecto

Por otro lado, podrias incrustar una cuenta atras. Despues de 15 dias, para que mostrara un MsgBox, o lo que quieras. El siguiente codigo es un programa que cuenta hacia atras segundo por segundo. Seria cuestion de coger la calculadora  ;) Autor; el mismo de antes J.I. Moratiel
Modulo:
Código:
Option Explicit

Form:
Código:
Private Sub Form_Load()
    Text1.Text = 500
End Sub

Private Sub Timer1_Timer()
    Text1.Text = Text1.Text - 1
End Sub

Bueno, haber si con la ayuda de todos, encuentras la solucion ;)
Un saludo

PD: Da gusto ayudar a alguien tan agradecido :D


Título: Re: PROTEGER APLICACION
Publicado por: Deep_Purple en 27 Junio 2005, 21:10 pm
Hola.
Dicen que es de bien nacido ser agredecido. Yo también intento resolver dudas y aportar la información que puedo en otro foro (sobre Ingeniería Química) y jode mucho que después de haber buscado la información o resuelto el problema no se dignen a contestarte. Hay gente pa to

Venga gracias a todos.


Título: Re: PROTEGER APLICACION
Publicado por: Nosferatu en 27 Junio 2005, 21:20 pm
benga a ti ;) pero.... creo que todos estamos con ganas xD yo al menos:
Con que te has quedado? Que solucion??

Has ideado otra cosa tu mismo??

xD, solo pregunto por irritante curiosidad ;), no tienes porque responder :D


Título: Re: PROTEGER APLICACION
Publicado por: goodbye en 27 Junio 2005, 23:39 pm
Deep_Purple - Para aplicar la idea que propuse:

Código:
Private Function Encriptacion_Reversible(GUID As String) As String ' Depurado
   
    Dim i, c
   
    For i = 1 To Len(GUID)
        c = Chr(Asc(Mid(GUID, i, 1)) Xor Sqr(Len(GUID) / i))
        Encriptacion_Reversible = Encriptacion_Reversible + c
    Next i
   
End Function

La clave de tu aplicacion va a ser justamente el valor GUID y tu programa debera generarlo desde la primera vez.
La funcion arriba es para protegerla.
Pero como bien dices, cada vez que generaste la clave obtuviste un GUID diferente. Entonces cada vez que el programa vuelva a generarlo que sea por alguna razon (puede ser que llego la fecha de vencimiento o un numero limitado de usos) encriptaras el GUID con una funcion como la de arriba; como veras es reversible.
Guardaras la clave cifrada, desde el primer momento, pudiera ser en el registro de windows.
Cuando te decia que crearas otra aplicacion (para tu uso exclusivo) aparte de la del proyecto que logicamente funcionaria con el mismo algoritmo de encriptacion, este seria tu recuperador de la clave. Asi tu aplicacion principal cada vez que quisiera registrarse solo mostraria la clave cifrada a los ojos del publico (o mejor aun, sin mostrarla, pero si guardada, en algun lugar  ;), para luego ser leida y validada); despues por telefono o tambien que el programa te autoenvie la cifrada a tu e-mail. De cualquier manera siempre tienen que morir en ti, porque solo tu tienes el metodo para recuperar la original, sin la cual ya sabemos que nada de nada!! uhff!! :P espero haberme explicado..

Para probar la encriptacion reversible y de paso construirte tu propio recuperador de la clave, deposita en una nueva ventana un Text, un Button y pegale el code de la funcion de arriba y este otro

Código:
Private Sub Command1_Click()
    Text1 = Encriptacion_Reversible(Text1)
End Sub

Por ultimo: El procedimiento para que tu programa valide la clave y se bloquee para su uso no autorizado
queda de tu parte.

Saludos y mucha Suerte!!



Título: Re: PROTEGER APLICACION
Publicado por: Nosferatu en 28 Junio 2005, 08:58 am
MUY Interesante  :o :o CrackelDestripador
!!

Esto me va a servir para algo  ;D  Se me hace familiar al metodo unidireccional de las autentificaciones de contraseñas en Unix

Toda esta cantidad de codigos tambien me seran de utilidad, asique, muchas gracias a todos :D

salu2


Título: Re: PROTEGER APLICACION
Publicado por: Deep_Purple en 28 Junio 2005, 09:49 am
Hola a todos.
He probado la función de cifrado reversible y obtengo esto:

(i=1) Chr(Str(...= D Int(Str....=  195 c= _
(i=2) Chr(Str(...= E Int(Str....=  146666666666667 c= ‡
(i=3) Desbordamiento

He probado con varias claves y siempre se desborda en la tercera iteración.
¿lo ha probado alguien y le ocurre lo mismo?
Un saludo.


Título: Re: PROTEGER APLICACION
Publicado por: Ertai en 28 Junio 2005, 09:54 am
Mira, lo que podrias hacer (aparte) y segurisimo que no falla, es guardar todo lo que necesites guardar en un archivo en Internet que sea modificable por PHP, así nadie te podrá modificar la información.

A favor: Fácil y seguro.
En contra: Se necesita conexión a Internet y se puede asaltar la información con un Sniffer.

Lo puedes añadir a tu programa como opción "extra" en caso de que hubiera Internet.

Saludos,
Ertai


Título: Re: PROTEGER APLICACION
Publicado por: Kizar en 28 Junio 2005, 18:22 pm
Esa es una buena opcion  ;) pero tienes que tener un hosting con soporte de php, (casi todos), ahora pongo el codigo, en cuanto tenga un poco de tiempo.

Salu2


Título: Re: PROTEGER APLICACION
Publicado por: Kizar en 28 Junio 2005, 19:13 pm
Mira, tienes k subir el archivo php a tu hosting, lo que esto ace no seria validar contraseñas, seria enviarte la contraseña y gurdartelo en un archivo de texto en el servidor, luefo tu tendrias que comprovar la clave solo es una idea, lo de como agas luego para autorizarles no se muy bien...

Weno, aqui va el codigo

Código:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_NORMAL = 1

Private Sub Command1_Click()
Dim X
X = ShellExecute(Me.hwnd, "Open", "http://www.tuweb.com/IPSP.php?datos1=" & Text1.Text, &O0, &O0, SW_NORMAL)
End Sub

Tienes que añadir un boton y un textbox

Al archivo php yo le e llamado IPSP
En el archivo php:

Código:
<?php
$archivo = "Registros.txt";
$puntero=fopen("$archivo", "a+");
rewind($puntero);

$td = date("F jS");
$date = date("d M, Y");
$time = date("g:i a");
$LogTime = "FECHA: $date, [ $time ]";
$realip = getenv( 'REMOTE_ADDR' );

$add = ("$datos1" . "___" . "$LogTime" . "___" . "$realip" . "
");
fwrite($puntero, $add);
fclose($puntero);
?>

Tambien le e añadido que te muestre la fecha y hora de la solicitud y la IP desde la que a sido registrado.

Salu2


Título: Re: PROTEGER APLICACION
Publicado por: Ertai en 28 Junio 2005, 19:26 pm
Sí, es eso, a mi me daba palo postear el código.


Título: Re: PROTEGER APLICACION
Publicado por: programatrix en 28 Junio 2005, 20:32 pm
A mi me parece también bien, otra formula. A cada uno que usa el programa le das un nombre y luego mediante un algoritmo dependiendo del nombre que hayas introducido recibe una clave diferente. Es solo una opinión.


Título: Re: PROTEGER APLICACION
Publicado por: Deep_Purple en 28 Junio 2005, 21:37 pm
Hola
Creo que entre todos me habeís proporcionado suficiente material para impedir un uso ilicito de la aplicación.
He pensado 3 opciones
(1) Distribuir gratuitamente la  versión limitada de la aplicación a quien me la pida. A este le asigno una clave. Compruebo que no haya dos solicitudes iguales (con IP diferente)
(2) A la universidad le doy una copia completa, con limitación de fecha y veces que se ejecuta (no deben saberlo porque creo que hay un periodo de tiempo en el que pueden joderte el expediente). Además la aplicación debe conectarse al fichero php. Cada copia entregada a la universidad tendrá un código que la identificará. Además creo que usan un conjunto de direcciones IP características (tengo un primo en robótica que me puede informar)
(3) Versión completa. Contiene una base de datos bastante grande que he ido tecleando yo solo como un pringao (el que le interese y esté dispuesto a pagar pues eso...) Debería identificarse mediante el fichero php.

Bueno no se si me he explicado bien, lo mio es más bien la química (jeje)
Creo que este hilo es bastante interesante pues normalmente nos defendemos más o menos haciendo las aplicaciones pero no protegiendo nuestro trabajo. Otro tema es el de las multinacionales (a esas que les den)

Venga gracias a todos.


Título: Re: PROTEGER APLICACION
Publicado por: byebye en 29 Junio 2005, 06:49 am
Citar
suficiente material para impedir un uso ilicito de la aplicación.

solo añadir que eso de impedir...... ten en cuenta que si quieren usarlo se va a usar, no sufras por eso pq si a alguien le hace falta lo usara.


Título: Re: PROTEGER APLICACION
Publicado por: Deep_Purple en 29 Junio 2005, 10:58 am
Hola
No me importa que lo use un estudiante, que posiblemente será el que se tome más molestias en "piratearlo". Ni que lo prueben en otras universidades. Lo que  pretendo es dificultar el uso de aquellos que me están ninguneando y jodiendo en la universidad.
Bueno gracias otra vez y el que tenga alguna otra idea pues bienvenida sea.


Título: Re: PROTEGER APLICACION
Publicado por: programatrix en 29 Junio 2005, 12:14 pm
Te recomiendo también que comprimas tu aplicacion con UPX asi es mas dificil de desensamblar y mas dificil de crackear.


Título: Re: PROTEGER APLICACION
Publicado por: Deep_Purple en 29 Junio 2005, 16:05 pm
Hola reydelmundo11
Podrías explicar que es eso de comprimir con upx (no tengo ni pi)
Gracias.


Título: Re: PROTEGER APLICACION
Publicado por: programatrix en 29 Junio 2005, 16:32 pm
Upx es ultimate pack for executables y sirve para comprimir aplicaciones ej: Una aplicación pesa 50 kb, este programa te lo comprime a 16 kb y también te hace mas pequeño todo siendo mas dificil su descompilación.
se usa modo consola. Ej tienes el programa en c:\ y el programa que quieres comprimir en c:\ entonces abres el ms-dos pones cd.. hasta llegar a la carpeta c:\ y pones:
Citar
upx -9 Nombredemiprograma.exe

el nombre no tiene que tener espacio si no, no te lo va a saber comprimir.
NOTA: no intentes comprimir algun exe que lleve a su vez archivos adentro si no el programa que intentas comprimir se quedará un poco mal.