home *** CD-ROM | disk | FTP | other *** search
/ The Elite Hackers Toolkit / TheEliteHackersToolkitVolume1_1998.rar / HACKERS.BIN / appcraks / WKT_WC35.ZIP / PATCH.DPR next >
Text File  |  1998-04-27  |  6KB  |  133 lines

  1. Program patch;
  2.  
  3. {******************************************************************************}
  4. {*                                                                            *}
  5. {*   Windows Commander 32-bit v3.50 (c) 1993-1998 por Christian Ghisler       *}
  6. {*   Crack de Registro, por Aitor                                             *}
  7. {*   (c) 1998 WKT Cracking Team                                               *}
  8. {*                                                                            *}
  9. {******************************************************************************}
  10. {*                                                                            *}
  11. {*   El primer crack de este tipo que jamßs he hecho ... cruza los dedos ;-)  *}
  12. {*   (┐quiΘn dijo que no se podφan codificar cracks en Delphi? ...)           *}
  13. {*   Bßsicamente lo que he hecho (a parte de crackear el programa :) ha sido  *}
  14. {*   traducir c≤digo para un parche del mismo tipo escrito en Visual C++ y    *}
  15. {*   aparecido en el artφculo "How to access the memory of a process"         *}
  16. {*   por NaTzGUL <http://fravia.org/natz_mp2.htm> ... ígracias!.              *}
  17. {*                                                                            *}
  18. {*   Escrito en Borland Delphi v2.0                                           *}
  19. {*   8.704 bytes compilado (icono incluido :)                                 *}
  20. {*                                                                            *}
  21. {*                                                                            *}
  22. {*   Saludines :  Mikel, Jon eta Peru (jotake!), Jose, Carlos (los tres :),   *}
  23. {*                Gloom Lord, Nieves, Mr.DoS, Zipi, Miguel, mi primo Jon,     *}
  24. {*                Fravia+ y la +HCU, +Crackers, WKT Cracking Team, ...        *}
  25. {*                                                                            *}
  26. {*                                                                            *}
  27. {*       "... todos reconocieron la imagen de Aitor, el gran antepasado,      *}
  28. {*         el patriarca, el padre de la raza indoatlßntida y el primer        *}
  29. {*                         nacido de los euskaros."                           *}
  30. {*                                                                            *}
  31. {******************************************************************************}
  32.  
  33. {$R *.res}
  34.  
  35. Uses
  36.   Windows;
  37.  
  38. Type
  39.   TParche = Array [1..5] of Byte;
  40.  
  41. Const
  42.   cNombrePrograma : PChar   = 'Windows Commander 32 v3.50 CRaCK (c) Aitor [WKT/98]';
  43.   cVictima        : PChar   = 'wincmd32.exe';
  44.   cOffset1        : Longint = $49f179;
  45.   cOrigen1        : TParche = ($c7,$45,$e2,$00,$00);
  46.   cParche1        : TParche = ($c7,$45,$e2,$80,$00);
  47.   cOffset2        : Longint = $49f184;
  48.   cOrigen2        : TParche = ($0f,$94,$05,$41,$7f);
  49.   cParche2        : TParche = ($0f,$94,$05,$40,$7f);
  50.   cOffset3        : Longint = $49f5a3;
  51.   cOrigen3        : TParche = ($88,$1d,$40,$7f,$4e);
  52.   cParche3        : TParche = ($88,$1d,$41,$7f,$4e);
  53.   cCodigoError    : Byte    = 0;
  54.   cMensajeError   : Array [1..4] of String =
  55.     ('Error al intentar ejecutar el programa "vφctima" (CreateProcess).',
  56.      'Error al intentar leer los bytes originales (ReadProcessMemory).',
  57.      'Error al comprobar los bytes originales.  Programa "vφctima" equivocado.',
  58.      'Error al intentar aplicar el parche en memoria (WriteProcessMemory).');
  59.  
  60. Var
  61.   StartupInfo    : TStartupInfo;
  62.   ProcessInfo    : TProcessInformation;
  63.   Buf1,Buf2,Buf3 : TParche;
  64.   i              : Integer;
  65.  
  66. Procedure FinPrograma;
  67. Begin
  68.   If cCodigoError<>1 Then
  69.     With ProcessInfo do
  70.       Begin
  71.         CloseHandle(hProcess);
  72.         CloseHandle(hThread);
  73.       End;
  74.   If cCodigoError<>0 Then
  75.     MessageBox(0,PChar(cMensajeError[cCodigoError]),cNombrePrograma,
  76.       MB_OK or MB_IconError);
  77. End; {FinPrograma}
  78.  
  79. Begin
  80.   ZeroMemory(@StartupInfo,SizeOf(StartupInfo));
  81.   StartupInfo.cb:=SizeOf(StartupInfo);
  82.   If CreateProcess(cVictima,GetCommandLine,Nil,Nil,False,Normal_Priority_Class,
  83.     Nil,Nil,StartupInfo,ProcessInfo) Then
  84.       With ProcessInfo do
  85.         Begin
  86.           WaitForInputIdle(hProcess,Infinite);
  87.           If ReadProcessMemory(hProcess,Pointer(cOffset1),@Buf1,
  88.             SizeOf(cOrigen1),i) and
  89.           ReadProcessMemory(hProcess,Pointer(cOffset2),@Buf2,
  90.             SizeOf(cOrigen2),i) and
  91.           ReadProcessMemory(hProcess,Pointer(cOffset3),@Buf3,
  92.             SizeOf(cOrigen3),i)
  93.               Then
  94.           Begin
  95.             For i:=1 to SizeOf(cOrigen1) do
  96.               If Buf1[i]<>cOrigen1[i] Then
  97.                 Break;
  98.               If i>=SizeOf(cOrigen1)
  99.                 Then
  100.                   Begin
  101.                     For i:=1 to SizeOf(cOrigen2) do
  102.                       If Buf2[i]<>cOrigen2[i] Then
  103.                         Break;
  104.                   End;
  105.               If i>=SizeOf(cOrigen2)
  106.                 Then
  107.                   Begin
  108.                     For i:=1 to SizeOf(cOrigen3) do
  109.                       If Buf3[i]<>cOrigen3[i] Then
  110.                         Break;
  111.                   End;
  112.               If i>=SizeOf(cOrigen3) Then
  113.                 Begin
  114.                   If not WriteProcessMemory(hProcess,Pointer(cOffset1),
  115.                     @cParche1,SizeOf(cParche1),i) or
  116.                   not WriteProcessMemory(hProcess,Pointer(cOffset2),
  117.                     @cParche2,SizeOf(cParche2),i) or
  118.                   not WriteProcessMemory(hProcess,Pointer(cOffset3),
  119.                     @cParche3,SizeOf(cParche3),i) Then
  120.                       cCodigoError:=4;
  121.                 End
  122.                   Else
  123.               cCodigoError:=3;
  124.           End
  125.             Else
  126.           cCodigoError:=2;
  127.         End
  128.           Else
  129.         cCodigoError:=1;
  130.   FinPrograma;
  131. End. {patch}
  132.  
  133.