|
|
http://yunpan.cn/QGq45ZIECxnyU
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, TlHelp32,StdCtrls, Buttons;
type
TForm1 = class(TForm)
Image1: TImage;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
type
PGetGwCallParam = ^TGetGwCallParam;
TGetGwCallParam = packed record
GameBase,SXSpeed word;
end;
var
Form1: TForm1;
游戏ID WORD;
打开句柄:THANDLE;
const
PassAddr1=$00405D86; //破解地址
PassData1:array[1..6] of byte=($90,$90,$90,$90,$90,$90);
PassAddr2=$00405E3F; //0F85 7C000000 JNZ 启动器.00405EC1 ; t
PassData2:array[1..6] of byte=($E9,$7D,$00,$00,$00,$90);
PassAddr3=$00405F43; //0F85 7C000000 JNZ 启动器.00405FC5 ; t
PassData3:array[1..6] of byte=($E9,$7D,$00,$00,$00,$90);
PassAddr4=$004061CC; //0F84 7C000000 JE 启动器.0040624E ; t
PassData4:array[1..6] of byte=($E9,$7D,$00,$00,$00,$90);
PassAddr5=$0040625D; //7C 0D JL SHORT 启动器.0040626C ; t
PassData5:array[1..2] of byte=($eb,$0d);
PassAddr6=$004062C0; //74 11 JE SHORT 启动器.004062D3 ; np
PassData6:array[1..2] of byte=($90,$90);
PassAddr7=$0040630D; //0F84 7C000000 JE 启动器.0040638F ; t
PassData7:array[1..6] of byte=($E9,$7D,$00,$00,$00,$90);
PassAddr8=$004063B5; // FF75 E8 PUSH DWORD PTR SS:[EBP-18] ; np
PassData8:array[1..8] of byte=($90,$90,$90,$90,$90,$90,$90,$90);
PassAddr9=$004063CC; //75 05 JNZ SHORT 启动器.004063D3 ; t
PassData9:array[1..2] of byte=($Eb,$05);
PassAddr10=$004063F1; //74 09 JE SHORT 启动器.004063FC ; np
PassData10:array[1..2] of byte=($90,$90);
PassAddr11=$00406410; //75 05 JNZ SHORT 启动器.00406417 ; np
PassData11:array[1..2] of byte=($90,$90);
PassAddr12=$00406488; //0F84 7C000000 JE 启动器.0040650A ; T
PassData12:array[1..6] of byte=($E9,$7D,$00,$00,$00,$90);
PassAddr13=$00406519; //7C 0D JL SHORT 启动器.00406528 ; t
PassData13:array[1..2] of byte=($eb,$0d);
//如果用户名过长则走过这里出错
PassAddr14=$004065C9; //0F84 7C000000 JE 启动器.0040664B ; t
PassData14:array[1..6] of byte=($E9,$7D,$00,$00,$00,$90);
PassAddr15=$0040665A; //7C 0D JL SHORT 启动器.00406669 ; t
PassData15:array[1..2] of byte=($Eb,$0d);
PassAddr16=$0040672F; //74 09 JE SHORT 启动器.0040673A ; np
PassData16:array[1..2] of byte=($90,$90);
PassAddr17=$0040718D; //0F84 04000000 JE 启动器.00407197 ; n
PassData17:array[1..6] of byte=($90,$90,$90,$90,$90,$90);
implementation
{$R *.dfm}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TerminateProcess(打开句柄,1);
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
myicon: Hicon;
begin
myicon:=LoadCursorFromFile('kill.ani');
Screen.Cursors[1]:=myicon;Screen.Cursor:=1;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
窗口句柄:HWND;
p:tpoint;
curxy:TPoint;
当前进程 : Boolean;
进程快照句柄 : THandle;
进程入口信息 : TProcessEntry32;
进程名:string;
当前进程ID:THandle;
begin
GetCursorPos(curxy);
Screen.Cursor:=2;
getcursorpos(p); //得到鼠标的位置
窗口句柄:=WindowFromPoint(p);
GetWindowThreadProcessID(窗口句柄,游戏ID);
打开句柄:=OpenProcess(windows.PROCESS_ALL_ACCESS,False,游戏ID);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
//传入参数 GetGwCallParam;
//参数:TGetGwCallParam;
//调用指针 ointer;
写入字节, ptmp,Byte WORD;
//hRemoteThread: THandle;
begin
if 打开句柄>0 then
begin
// 调用指针:=VirtualAllocEx(打开句柄,nil,windows.MAX_PATH,windows.MEM_COMMIT OR windows.MEM_RESERVE,windows.PAGE_EXECUTE_READWRITE); //申请虚拟空间
WriteProcessMemory(打开句柄,Pointer(PassAddr1),@(PassData1),6,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr2),@(PassData2),6,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr3),@(PassData3),6,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr4),@(PassData4),6,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr5),@(PassData5),2,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr6),@(PassData6),2,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr7),@(PassData7),6,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr8),@(PassData8),8,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr9),@(PassData9),2,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr10),@(PassData10),2,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr11),@(PassData11),2,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr12),@(PassData12),6,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr13),@(PassData13),2,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr14),@(PassData14),6,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr15),@(PassData15),2,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr16),@(PassData16),2,写入字节); //写入地址
WriteProcessMemory(打开句柄,Pointer(PassAddr17),@(PassData17),6,写入字节); //写入地址
// hRemoteThread:=CreateRemoteThread(打开句柄,nil,0,调用指针,nil,0,写入字节); //调用代码
// WaitForSingleObject(hRemoteThread, INFINITE); // ---- 等待线程结束
// CloseHandle(hRemoteThread);
// exit;
end;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
TerminateProcess(打开句柄,1);
Close;
end;
end.
|
|