home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Elite Hackers Toolkit
/
TheEliteHackersToolkitVolume1_1998.rar
/
HACKERS.BIN
/
appcraks
/
WKT_WC35.ZIP
/
PATCH.DPR
next >
Wrap
Text File
|
1998-04-27
|
6KB
|
133 lines
Program patch;
{******************************************************************************}
{* *}
{* Windows Commander 32-bit v3.50 (c) 1993-1998 por Christian Ghisler *}
{* Crack de Registro, por Aitor *}
{* (c) 1998 WKT Cracking Team *}
{* *}
{******************************************************************************}
{* *}
{* El primer crack de este tipo que jamßs he hecho ... cruza los dedos ;-) *}
{* (┐quiΘn dijo que no se podφan codificar cracks en Delphi? ...) *}
{* Bßsicamente lo que he hecho (a parte de crackear el programa :) ha sido *}
{* traducir c≤digo para un parche del mismo tipo escrito en Visual C++ y *}
{* aparecido en el artφculo "How to access the memory of a process" *}
{* por NaTzGUL <http://fravia.org/natz_mp2.htm> ... ígracias!. *}
{* *}
{* Escrito en Borland Delphi v2.0 *}
{* 8.704 bytes compilado (icono incluido :) *}
{* *}
{* *}
{* Saludines : Mikel, Jon eta Peru (jotake!), Jose, Carlos (los tres :), *}
{* Gloom Lord, Nieves, Mr.DoS, Zipi, Miguel, mi primo Jon, *}
{* Fravia+ y la +HCU, +Crackers, WKT Cracking Team, ... *}
{* *}
{* *}
{* "... todos reconocieron la imagen de Aitor, el gran antepasado, *}
{* el patriarca, el padre de la raza indoatlßntida y el primer *}
{* nacido de los euskaros." *}
{* *}
{******************************************************************************}
{$R *.res}
Uses
Windows;
Type
TParche = Array [1..5] of Byte;
Const
cNombrePrograma : PChar = 'Windows Commander 32 v3.50 CRaCK (c) Aitor [WKT/98]';
cVictima : PChar = 'wincmd32.exe';
cOffset1 : Longint = $49f179;
cOrigen1 : TParche = ($c7,$45,$e2,$00,$00);
cParche1 : TParche = ($c7,$45,$e2,$80,$00);
cOffset2 : Longint = $49f184;
cOrigen2 : TParche = ($0f,$94,$05,$41,$7f);
cParche2 : TParche = ($0f,$94,$05,$40,$7f);
cOffset3 : Longint = $49f5a3;
cOrigen3 : TParche = ($88,$1d,$40,$7f,$4e);
cParche3 : TParche = ($88,$1d,$41,$7f,$4e);
cCodigoError : Byte = 0;
cMensajeError : Array [1..4] of String =
('Error al intentar ejecutar el programa "vφctima" (CreateProcess).',
'Error al intentar leer los bytes originales (ReadProcessMemory).',
'Error al comprobar los bytes originales. Programa "vφctima" equivocado.',
'Error al intentar aplicar el parche en memoria (WriteProcessMemory).');
Var
StartupInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
Buf1,Buf2,Buf3 : TParche;
i : Integer;
Procedure FinPrograma;
Begin
If cCodigoError<>1 Then
With ProcessInfo do
Begin
CloseHandle(hProcess);
CloseHandle(hThread);
End;
If cCodigoError<>0 Then
MessageBox(0,PChar(cMensajeError[cCodigoError]),cNombrePrograma,
MB_OK or MB_IconError);
End; {FinPrograma}
Begin
ZeroMemory(@StartupInfo,SizeOf(StartupInfo));
StartupInfo.cb:=SizeOf(StartupInfo);
If CreateProcess(cVictima,GetCommandLine,Nil,Nil,False,Normal_Priority_Class,
Nil,Nil,StartupInfo,ProcessInfo) Then
With ProcessInfo do
Begin
WaitForInputIdle(hProcess,Infinite);
If ReadProcessMemory(hProcess,Pointer(cOffset1),@Buf1,
SizeOf(cOrigen1),i) and
ReadProcessMemory(hProcess,Pointer(cOffset2),@Buf2,
SizeOf(cOrigen2),i) and
ReadProcessMemory(hProcess,Pointer(cOffset3),@Buf3,
SizeOf(cOrigen3),i)
Then
Begin
For i:=1 to SizeOf(cOrigen1) do
If Buf1[i]<>cOrigen1[i] Then
Break;
If i>=SizeOf(cOrigen1)
Then
Begin
For i:=1 to SizeOf(cOrigen2) do
If Buf2[i]<>cOrigen2[i] Then
Break;
End;
If i>=SizeOf(cOrigen2)
Then
Begin
For i:=1 to SizeOf(cOrigen3) do
If Buf3[i]<>cOrigen3[i] Then
Break;
End;
If i>=SizeOf(cOrigen3) Then
Begin
If not WriteProcessMemory(hProcess,Pointer(cOffset1),
@cParche1,SizeOf(cParche1),i) or
not WriteProcessMemory(hProcess,Pointer(cOffset2),
@cParche2,SizeOf(cParche2),i) or
not WriteProcessMemory(hProcess,Pointer(cOffset3),
@cParche3,SizeOf(cParche3),i) Then
cCodigoError:=4;
End
Else
cCodigoError:=3;
End
Else
cCodigoError:=2;
End
Else
cCodigoError:=1;
FinPrograma;
End. {patch}