Cuando se pase de fecha, borrar el propio ejecutable.

Iniciado por Meta, 15 Enero 2016, 15:20 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

Hola:

He hecho ejecutables a clientes en el cual al final no paga y se van, eso si, por Internet.

Mi idea, se que hay muchas y mejores de las que voy a contar, el mio es simple, no de hacer pero si de explicar.

Si hoy es día 15-01-2016 hora 15:30. Le entrego un ejecutable hecho con Visual C#, el que sea, simple como el propio Form1 con un botón que al pulsar dice Hola mundo. Si el día 29-01-2016 a la misma hora o la que sea, desde que ejecutes la aplicación haga lo siguiente.

Que borre el propio ejecutable.

Antes de eso, hace otra cosa, por ejemplo, el ejectubale se lo envio en .zip o .rar. ¿Qué hacer?
Que se ponga a buscar primero en el área local para que borre dichos archivos llamado nombre.zip o nombre.rar. Si no lo encuentra, acto seguido borra el nombre.exe.

Parece complicado a la hora de programar. Me conformo que se borre el propio ejecutable.

Se puede sugerir mejores métodos, eso si, tampoco quiero complicarme la vida. 

¿Alguna sugerencia, ejemplos?

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Eleкtro

#1
Olvida TODO eso, esa no es la manera de solucionarlo.

Siempre hay que acordar que el cliente pague ANTES de entregar el programa (ya sea el primer día o el último dia, pero ANTES), los que no valoren el trabajo de esta manera pues buenas tardes y adiós...¿me entiendes?, se más selectivo.

De todas formas si por el motivo que sea el cliente dice de pagar antes y luego cuando ya has terminado la app dice de pagarte despues, entonces lo que debes hacer es tan simple cómo entregarle una demo del programa, es decir, la aplicación con funcionalidad muy limitada, para que el cliente tenga la certeza de que el programa está hecho y cumple con los requisitos, pero que no podrá hacerla funcionar del todo hasta que te pague el trabajo que le hiciste.

Esa es la solución más simple y también la más efectiva, por que directamente le estarías entregando al cliente la "porción" del código fuente a la que tendrá acceso, mientras que al usar soluciones rebuscadas de sistemas de protección se podrían bypassear con ciertas herramientas de ingeniería inversa.




Te he dado mi opinión y sinceramente te aconsejo que lo soluciones de la forma que acabo de explicar, ahora, solamente como información adicional te indicaré un par de buenas herramientas para proteger ensamblados .Net y añadirles un periodo de evaluación o expiración o trial o como quieras llamarlo...:


Puedes usar cualquier otro software para añadirle el periodo de evaluación trial cómo por ejemplo WinLicense, pero los que mencioné son para .Net.

Saludos!








Meta

Gracias, no he querido hacerlo así por el poco tiempo que me dio.

Bueno.

Lo de retrasar el reloj si lo hace, lo detecta y se borra.

En cuanto a que no se borre el propio ejecutable cuando está corriendo. Se puede hacer que al ejecutarlo, crea otro ejecutable que no hace nada, solo una ventana invisible que cierra el ejecutable principal y luego borra, a parte de localiza el nombre.zip o nombre.rar si lo tienen lo más cerca posible.

El proceso sería así.

Dentro del programa principal lo que he hecho es crear otro ejecutable de prueba, en el cual cualquier antivirus me detecta, hay que tener cuidado.

El ejecutable puedo ponerlo llamado así nombre.dll. Al ejecutar el programa principal, crea copia dll (en realidad es un .exe que le cambié la extensión a .dll) como cebo y lo copia en lo más profundo del disco duro, donde le indiques.

Entrego estos dos programas.

Programa principal.exe
nombre.dll

El nombre.dll se copia en el disco duro donde quieras, se llamará como quieras pero con el nombre.exe.

Ese nuevo archivo copiado se ejecuta, comprueba hora y fecha, si se pasó el tiempo, se ejecuta cerrar la aplicación del programa principal y el borrado.



Espero que se entienda.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Eleкtro

#3
Bueno, ya veo que una vez más todo lo que te he dicho no ha servido de nada para que sigas el consejo, y yo me niego a ayudar en algo así por que es exageradamente innecesario, pero te diré una cosa para ver si consigo que al menos lo veas más simple:

La solución que propones, aparte de ser muy rebuscada y completamente desaconsejable e innecesaria bajo mi criterio, la manera en la que quieres que se efectue el procedmiento también es algo muy rebuscado, mira, solo deberías asegurarte de evaluar la fecha o lo que quieras evaluar al inicio de la aplicación, en el evento Application.Startup por ejemplo o en el evento Form.Load y la almacenas en una clave de registro o cómo prefieras,
y luego para auto eliminar la aplicación es tan simple como finalizar la ejecución de la app no si antes iniciar una instancia de la CMD pasándole el comando DEL con la ruta de tu executable y el comando PING para retrasar la ejecución de la orden de eliminación unos cuantos segundos asegurando así que tu app está completamente cerrada, est significa que no necesitas manejarte con varios executables y archivos camuflados y... en fin, nada de lo mencionado tiene sentido hacerlo, ni de lo que tu has dicho ni tampoco de lo que yo acabo de decir, por que repito de nuevo: es algo completamente innecesario implementar seguridad, le pasas una demo de tu programa al cliente y listo, esa es la mayor seguridad y efectividad, pero bueno, ¡tu mismo!.

Saludos.








Meta

Hola:

Mejor hacer una parte del programa y el resto cuando paque todo.

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

nevachana

Por que no creas un servidor que guarde toda la source con un string obfuscado,y si el cliente quiere usar el programa envia un paquete con datos,pago,datetime etc y si todo es correcto le respondes con el string y lo compilas.

Meta

#6
Hola:

¿Crear un servidor?

No suena nada fácil. Me han sugerido que le saque información de la máquina como el MAC tanto PC como el use habitualmente, si la MAC no coincide, no se ejecutará.

https://msdn.microsoft.com/es-es/library/system.net.networkinformation.physicaladdress%28v=vs.110%29.aspx

Se compara con el MAC o dos MAC o los que tenga en esos PC con el programa, si no coincide, no se ejecuta o sale un mensaje que no corresponde al PC correspondiente, por poner un ejemplo.

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

nevachana

Cita de: Meta en 16 Enero 2016, 13:42 PM
Hola:

¿Crear un servidor?

No suena nada fácil. Me han sugerido que le saque información de la máquina como el MAC tanto PC como el use habitualmente, si la MAC no coincide, no se ejecutará.

https://msdn.microsoft.com/es-es/library/system.net.networkinformation.physicaladdress%28v=vs.110%29.aspx

Se compara con el MAC o dos MAC o los que tenga en esos PC con el programa, si no coincide, no se ejecuta o sale un mensaje que no corresponde al PC correspondiente, por poner un ejemplo.

Saludos.
Yo creo que si el server solamente tuviese ese packet unico que te digo seria "muy facil" de hacer

kondrag_X1

Coincido con Elektro en el tema si quieres ser profesional haz una demo, en tal caso de que te resulte muy complicado graba un video usando las funcionalidad de la app y envíaselo para que el cliente se quede mas tranquilo.

PD: Consejo que recibí por parte de electro hace algún tiempo se selectivo en los trabajos.

Meta

Lo que me han contado y gracias los consejos, este es otra forma.



  •     Crea un nuevo proyecto de formularios (el clásico)
        Ve a Proyecto > Propiedades de WindowsAplicattion1 (o como se llame el proyecto)
        Ve a Configuración
        En donde dice "setting" escribes "licencia" y le das enter
        En la misma columna, donde dice "String" le das click y lo cambias por "Double"
        En la misma columna, donde dice "Usuario" lo dejás así
        En la misma columna, donde hay un espacio vació, le pones 10
        Haces click en "Guardar Todo" (ya sabes donde está)
        Vuelves al formulario y le das doble click en lo gris
        Ahora, en la ventana de código, borras todo el contenido y escribes:

Código (vbnet) [Seleccionar]
Public Class Form1
    Sub Form1_Load (sender as object, e as EventArgs) handles MyBase.Load

If My.Settings.licencia = 0 Then
            MsgBox("TIENES QUE COMPRARME EL PROGRAMA (NO TE LO REGALE)")

            END
        Else
            My.Settings.licencia = My.Settings.licencia - 1
            MsgBox("Te quedan " & My.Settings.licencia & " arranques en este programa. Tendrás que comprame el programa.")
        End If

end sub

end class


Listo. Cada ves que se ejecute tu programa se le restará un arranque al por defecto que le asignamos 10, si le quedan 0 se muestra un menssaje y se cierra tu programa, NO SE BORRA PERO TAMPOCO SE EJECUTA. Debería de ser una solución. Salu2.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/