Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   MINI PROTECCION DE APLICACIONES (https://www.clubdelphi.com/foros/showthread.php?t=80781)

ArdiIIa 04-01-2007 10:07:24

MINI PROTECCION DE APLICACIONES
 
Hace tiempo puse un truco que estaba en la sección de columnas pero no he llegado a encontrarlo, así que vuelvo a ponerlo por considerarlo de interés general:

En sí, lo que hace es introducir la información del disco duro dentro de un RESOURCE del programa. Posteriormente verifica que esa información introducida en el RESOURCE, se corresponda con el número de serie del disco duro donde se ejecuta el programa, en el caso de que existan diferencias quiere decir que el programa se está ejecutando en otro ordenador (o disco duro) o que el disco duro formateado.
De un modo u otro, si la aplicación detecta esto último, deja de ejecutarse.
El procedimiento, una vez que se "automodifica", se autoejecuta, por ese motivo siempre trata de borrar la copia antigua del programa "borrame.dat".
Ni que decir tiene que este procedimiento ha de ser llamado cuando el programa comienza a ejecutarse, a mi juicio el modo mas apropiado es cuando el Form principal se está creando.

A título informativo, diré que las funciones utilizadas en este procedimiento, referentes a recursos, pueden ser utilizadas por cualquier programa para introducir cualquier información o fichero dentro de nuestro propio ejecutable. Esto lo comento porque he visto mensajes por ahí preguntando como se podría meter un fichero ejecutable dentro de nuestro programa y este modelo podría servir como introducción haciéndole alguna pequeña modificación.

En fin espero que resulte útil.


Código Delphi [-]
// ESTE PROCEDIMIENDO DETECTA Y MARCA EL EJECUABLE SI ES EL CASO PARA QUE SOLAMENTE
// SE EJECUTE EN UN ORDENADOR EN CONCRETO

Procedure TFormMain.CheckSecurity;

Function Check_HD : string;
Var
   VolumeNameBuffer : array [0..MAX_PATH -1] of Char;
   VolumeSerialNumber : DWord;
   MaximumComponentLength : DWord;
   FileSystemFlags : DWord;
Begin
Result := '*';
      GetVolumeInformation( '\'
                           ,VolumeNameBuffer
                           ,DWORD(sizeof(VolumeNameBuffer))
                           ,@VolumeSerialNumber
                           ,MaximumComponentLength
                           ,FileSystemFlags
                           ,nil
                           ,0);
Check_HD := IntToHEX(VolumeSerialNumber,8);
End;



Function Check_RES : String;
Var
    ResData: HGLOBAL;
    ResInfo: HRSRC;
Begin
 Result := '';
 ResInfo := FindResource(hInstance, 'FULANO', RT_RCDATA);
 if ResInfo <> 0 then
    Begin
      ResData := LoadResource(hInstance, ResInfo);
      if ResData <> 0 then
      try
        Result := PChar(LockResource(ResData));
        Check_Res := TRIM(Result);
        UnlockResource(ResData);
      finally
        FreeResource(ResData);
      End;
    End;

End;


Function Write_Exe : Boolean;
Var hRes : THandle;
    cHD  : String;
Begin
     cHD := Check_HD;
     hRes := BeginUpdateResource(PChar(cAtom+'.exe'),False);
     UpdateResource(hRes,RT_RCDATA,'FULANO',0,Pointer(cHD),Length(cHD));
     Result :=  EndUpdateResource(hRes,False);
End;



var
cTemp : String;
proc_info: TProcessInformation;
startinfo: TStartupInfo;

Begin //Comienzo del Procedimiento
Deletefile('borrame.dat');
cTemp := Check_Res;
If cTemp = '' then
Begin
Aviso('SE VA A REALIZAR UNA OPERACIÓN DE AUTOPROTECCIÓN QUE PUEDE SER DETECTADA POR PROGRAMAS ANTIVIRUS');
CopyFile(Pchar(Application.Exename),cAtom+'.exe',False);
If Write_Exe then
    if MoveFileEx(PChar(Application.Exename),'BORRAME.DAT',MOVEFILE_COPY_ALLOWED) then
        if MoveFileEx(cAtom + '.exe',PChar(Application.Exename),MOVEFILE_COPY_ALLOWED) then
        Begin
            FillChar(proc_info, sizeof(TProcessInformation), 0);
            FillChar(startinfo, sizeof(TStartupInfo), 0);
            startinfo.cb := sizeof(TStartupInfo);
            if CreateProcess(PChar(Application.exename),'',nil,nil,False,IDLE_PRIORITY_CLASS ,nil,nil,startinfo,proc_info) then
               CloseHandle(proc_info.hProcess);
            Application.Terminate;
        End;
End
else if cTemp <> Check_HD then
Begin
AVISO('ESTE PROGRAMA ES UNA COPIA ILEGAL Y NO ESTA AUTORIZADO A EJECUTARSE EN ESTE ORDENADOR');
Application.Terminate;
Sleep(10000);
End;
End;

P.D.
(FULANO) es el nombre del recurso, que obviamente puede ser cualquier nombre...
(cAtom) es una variable de texto que contiene un nombre para asignar al fichero...

Dalmine 31-01-2007 15:59:41

hola que tal mi pregunta por ahi es algo basica o peco de ignorante!!
pero lo quize probar y nose que hace esto

Procedure TFormMain.CheckSecurity; me tira error ahi
despues esta otra

Aviso('SE VA A REALIZAR UNA OPERACIÓN DE AUTOPROTECCIÓN QUE PUEDE SER DETECTADA POR PROGRAMAS ANTIVIRUS');
probe reemplazarlo por un showmessage,

despues en la variable catom tambien tengo problemas hacerla global string pero me da incompatible string and pchar
bueno aver quien se rie un rato y me explica un poquito!!

ArdiIIa 31-01-2007 18:15:22

Hola Dalmine:
Date cuenta que el código está adaptado a un programa concreto, y solo como "muestra", lo que quiere decir que eres tu quien ha de realizar los cambios oportunos para que te funcione, es obvio que por ejemplo Aviso, es una función que muestra un mensaje, por lo cual con un simple ShowMessage es válido, y así para el resto de código...

Dalmine 31-01-2007 19:09:20

ok gracias, si eso del mensaje me imagine pero lo de catom seria el nombre del archivo compilado y lo de la primerera linea no se de que es ni como anda, ya que me gustaria aplicarlo para unos programas que tengo echo. Esto iria en el form principal del programa, y tendria que hacer que chequee antes de que pueda usar algo del menu para que se sierre solo si no es el numero de serie adecuado

gracias

Dalmine 31-01-2007 19:20:24

ok gracias, si eso del mensaje me imagine pero lo de catom seria el nombre del archivo compilado y lo de la primerera linea no se de que es ni como anda, ya que me gustaria aplicarlo para unos programas que tengo echo. Esto iria en el form principal del programa, y tendria que hacer que chequee antes de que pueda usar algo del menu para que se sierre solo si no es el numero de serie adecuado

gracias

Dalmine 31-01-2007 19:24:24

ok gracias, si eso del mensaje me imagine pero lo de catom seria el nombre del archivo compilado y lo de la primerera linea no se de que es ni como anda, ya que me gustaria aplicarlo para unos programas que tengo echo. Esto iria en el form principal del programa, y tendria que hacer que chequee antes de que pueda usar algo del menu para que se sierre solo si no es el numero de serie adecuado

gracias

Dalmine 31-01-2007 20:06:42

ok gracias, si eso del mensaje me imagine pero lo de catom seria el nombre del archivo compilado y lo de la primerera linea no se de que es ni como anda, ya que me gustaria aplicarlo para unos programas que tengo echo. Esto iria en el form principal del programa, y tendria que hacer que chequee antes de que pueda usar algo del menu para que se sierre solo si no es el numero de serie adecuado

gracias

ArdiIIa 31-01-2007 21:04:35

Vaya, Dalmine; que persona más agradecida...
Ya se que esto de los comentarios a los trucos no funciona bien... Unas veces se ven y la mayoría NO.

Dalmine 31-01-2007 21:39:26

hola que tal al final lo pude hacer andar a medias!! tengo que ver mas que pasa con la ruta cuando copia el archivo que ahi no me lo copia donde lo pongo, pero sino me crea un archivo solo, o sino dos archivos en el mismo path, pero anda re bien!!
gracias

Dalmine 31-01-2007 22:54:33

bueno me gano!! ajja, no entiendo en el tema donde mueve los archivos, yo le pongo al catom
hRes := BeginUpdateResource(PChar('c:\delia\bloqueado.exe'),False);
ahi me crea en archivo en ese path

CopyFile(Pchar(Application.Exename),pchar('c:\delia\bloqueado.exe'),False);
aca nose que hace lo copia en donde le digo
if MoveFileEx(pchar('c:\delia\bloqueado.exe'),PChar(Application.Exename),MOVEFILE_COPY_ALLOWED) then
y bueno lo demas nose

si tiene que dejar un solo archivo anda, ahora si son dos nose, y bueno si es como vos veces que los trucos aveces andan o no, nose se me dio por hacerlo andar a toda costa!!

nuk3zito 21-02-2007 21:05:26

Este tipo de protecciones aunque no son seguras son dignas de tenerlas como material didáctico.

Gracias ArdiIIa

martinzcr 28-03-2007 19:01:29

Hola:

Esta muy interesante. Sólo tengo una consulta. Si necesito que la aplicación también se ejecute desde una PC de la red cómo hago para que no me detecte la aplicación como "COPIA ILEGAL"?. Puede ser mapeando la unidad?... si es así, que pasa si el recurso esta en una carpeta diferente a la que se mapea (o no esta campartida en la red?

Saludos!


La franja horaria es GMT +2. Ahora son las 14:50:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi