Ir al contenido


Foto

Prevenir la ejecución en "antiguos Windows"


  • Por favor identifícate para responder
No hay respuestas en este tema

#1 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 23 enero 2009 - 12:39

El siguiente método es el utilizado por las aplicaciones propias del S.O., notoriamente visible al intentar ejecutar alguna aplicación (Ej. notepad.exe) de Vista, en una versión anterior al SO al que pertenece.



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var hFile, Offset: Integer;
  3. begin
  4. hFile := _lopen('programa.exe', OF_READWRITE);
  5. _llseek(hFile, $3C, FILE_BEGIN);
  6. _lread(hFile, @Offset, 4);
  7. _llseek(hFile, Offset + $48, FILE_BEGIN);
  8. _lwrite(hFile, #5#0#1, 3); // XP
  9.  
  10. // 6.1  Windows 7 / Server 2008 R2
  11. // 6.0  Windows Vista / Server 2008
  12. // 5.2  Windows Server 2003 / R2
  13. // 5.1  Windows XP
  14. // 5.0  Windows 2000
  15. // 4.90 Windows Me
  16. // 4.10 Windows 98
  17. // 4.0  Windows 95 / NT4
  18. end;



El anterior código puede ser comprendido mediante las siguientes estructuras;



delphi
  1. TImageNtHeaders(TImageDosHeader._lfanew).OptionalHeader.MajorSubsystemVersion



Y las constantes de las versiones en la sección de comentarios en MSDN.

X:\programa.exe Uno de los dispositivos vinculados al sistema no funciona.

El archivo X:\programa.exe
espera una versión mas reciente de Windows.
Actualice la version de Windows.


X:\programa.exe no es una aplicación Win32 válida.


Aunque el desarrollador puede validar la versión mínima (y máxima) del SO mediante un par de líneas de código, la anterior solución previene la ejecución del programa en versiones antiguas de SO facilitando al desarrollador la declaración (no dinámica) de las APIs utilizadas y el manejo de variables de registro y otros propios de cada versión.

Enjoy!
  • 0




IP.Board spam blocked by CleanTalk.