library DLL; uses SysUtils, Windows, Classes, UHk; {$R *.res} var CorChat2: function( Pr: HDC; X: Integer; Y: Integer; Str: PCHAR; Count: Integer ): Boolean; Stdcall; CV: DWORD; UserD: DWORD; Val: DWORD; Regen: DWORD; OI: DWORD = $004436B1; setar : Boolean = False; RegenP: DWORD; procedure FindUser; var i: DWORD; begin for I := $00401000 to $005A0000 do begin if PDWORD(i)^=612417295 then begin UserD:= PDWORD(i-4)^; Regen:= I+$2D; Break; end; end; for I := $00401000 to $00550000 do begin if PDWORD(i)^=2713960843 then begin Val:= i+3; Break; end; end; end; procedure Validate; assembler; asm call [CV] end; procedure RegenBPT; assembler; asm MOV EAX,DWORD PTR DS:[UserD] MOV CX,WORD PTR SS:[ESP+6] MOV WORD PTR DS:[EAX+124h],CX mov eax,004C0F5Ah jmp eax end; var SegDC: DWORD; b: Boolean = False; b2: Boolean = False; function CorChat( Pr: HDC; X: Integer; Y: Integer; Str: PCHAR; Count: Integer ): Boolean; Stdcall; var UserData: DWORD; begin if b2=False then FindUser; b2:= True; if GetAsyncKeyState(VK_F3)<>0 then B:= True; UserData:= PDWORD(UserD)^; CV:= Val; if b=True then begin inc(SegDC); if SegDC=1000 then begin PWORD(UserData+$128)^:= PWORD(UserData+$12A)^; Validate; PWORD(UserData+$12C)^:= PWORD(UserData+$12E)^; Validate; SegDC:= 0; end; end; Result:= CorChat2(PR,X,Y,Str,Count); //SetTextColor(PR,$00E1FF); CorChat2(PR,10,10,PCHAR('VegasNew v1.0 for bPT'),Length('VegasNew v1.0 for bPT')); end; procedure HookDllProg(Reason: DWORD); begin if not setar then begin if PBYTE($00460000)^=$FF then begin FindUser; PBYTE(Regen)^:= $FF; PBYTE(Regen+1)^:= $25; RegenP:= DWORD(@RegenBPT); PDWORD(Regen+2)^:= DWORD(@RegenP); { ApiHook('Gdi32.dll', 'TextOutA' , nil , @CorChat, @CorChat2); } Beep(500,500); setar:= True; end; end; end; begin DllProc := @HookDllProg; HookDllProg(DLL_PROCESS_ATTACH); end.