亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? magicapihook.pas

?? how you can hook functions by small size of codes
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit MagicApiHook;
(*
==============================================
Magic Api Hook Engine v1.0 - Date: 2006.04.24
this is a simple all around process api hooker
UserMode(Ring3) just for WinNT family
By: Magic_h2001 - magic_h2001@yahoo.com
Home: http://magic.shabgard.org
==============================================
*)
interface

uses Windows;

function LowCaseStr(S:string):string;
function UpCaseStr(S:string):string;
function StrCmp(String1,String2:string):Boolean;
function Trim(S:string):string;
function StrToInt(S:string):Integer;
function StrToInt64(S:string):Int64;
function IntToStr(i:Int64):string;
function IntToHex(i:Int64; P:Int64=0):string;
function HexToInt(S:string):Integer;
function HexToInt64(S:string):Int64;
function WideToStr(const WS:WideString):string;
function StrToWide(const S:AnsiString):WideString;
function GetWin:string;
function GetSys:string;
function GetTmp:string;
function IsWinNT:Boolean;
function IsWin9x:Boolean;
function IsAdmin:Boolean;
function GetPath(Path:string):string;
function GetFile(Path:string):string;
function GetFileInfo(Filename,BlockKey:string):string;
function IsFileExist(FileName:string):Boolean;
function IsFileInUse(FileName:string):Boolean;
function DebugPrivilege(ToEnable:Boolean):Boolean;
function GetExplorerPid:DWORD;
function PHandleToPID(dwProcessHandle:DWord):DWord;
function CalcJump(Src,Dest:DWORD):DWORD;
function InjectDll(DllPath:string; PID_or_PHD:DWORD):Boolean;
function UnInjectDll(DllName:string; PID_or_PHD:DWORD):Boolean;
function ApiHook(ModName,ApiName:Pchar; FuncAddr,HookedApi:Pointer; var MainApi:Pointer):Boolean;
function ApiUnHook(ModName,ApiName:Pchar; FuncAddr,HookedApi:Pointer; var MainApi:Pointer):Boolean;
function InjectAllProc(DllPath:string):Integer;
function UnInjectAllProc(DllPath:string):Integer;
function IsHeuristicScan:Boolean;
function OpCodeLength(Address:DWORD):DWORD; cdecl;

implementation

const
  TH32CS_SNAPPROCESS=$00000002;

type
  tagPROCESSENTRY32=packed record
    dwSize: DWORD;
    cntUsage: DWORD;
    th32ProcessID: DWORD;
    th32DefaultHeapID: DWORD;
    th32ModuleID: DWORD;
    cntThreads: DWORD;
    th32ParentProcessID: DWORD;
    pcPriClassBase: Longint;
    dwFlags: DWORD;
    szExeFile: array[0..MAX_PATH-1] of Char;
  end;
  PROCESSENTRY32=tagPROCESSENTRY32;
  TProcessEntry32=tagPROCESSENTRY32;

var LoadOpCodes: array[0..23] of Byte=($68,0,0,0,0,$E8,0,0,0,0,$B8,$FF,$FF,$FF,$FF,$50,$E8,0,0,0,0,$EB,$F3,$C3);
    FreeOpCodes: array[0..32] of Byte=($68,0,0,0,0,$E8,0,0,0,0,$B9,$FF,$FF,0,0,$50,$51,$50,$E8,0,0,0,0,$59,$83,$F8,$00,$58,$74,$02,$E2,$EF,$C3);

 CreateToolhelp32Snapshot: function(dwFlags, th32ProcessID: DWORD): THandle; stdcall;
 Process32First: function(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL; stdcall;
 Process32Next: function(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL; stdcall;
 OpenProcess: function(dwDesiredAccess:DWORD; bInheritHandle:BOOL; dwProcessId:DWORD):THandle; stdcall;
 VirtualAllocEx: function(hProcess:THandle; lpAddress:Pointer; dwSize,flAllocationType:DWORD; flProtect:DWORD):Pointer; stdcall;
 WriteProcessMemory: function(hProcess:THandle; const lpBaseAddress:Pointer; lpBuffer:Pointer; nSize:DWORD; var lpNumberOfBytesWritten:DWORD):BOOL; stdcall;
 CreateRemoteThread: function(hProcess:THandle; lpThreadAttributes:Pointer; dwStackSize:DWORD; lpStartAddress:TFNThreadStartRoutine; lpParameter:Pointer; dwCreationFlags:DWORD; var lpThreadId:DWORD):THandle; stdcall;

(******************************************************************************)
function LowCaseStr(S:string):string;
var i: Integer;
begin
 Result:=S;
 if S='' then Exit;
 for i:=1 to Length(S) do if Result[i] in ['A'..'Z'] then Inc(Result[i],32);
end;
(******************************************************************************)
function UpCaseStr(S:string):string;
var i: Integer;
begin
 Result:=S;
 if S='' then Exit;
 for i:=1 to Length(S) do Result[i]:=UpCase(Result[i]);
end;
(******************************************************************************)
function StrCmp(String1,String2:string):Boolean;
begin
 Result:=lstrcmpi(Pchar(String1),Pchar(String2))=0;
end;
(******************************************************************************)
function Trim(S:string):string;
begin
 Result:='';
 if S='' then Exit;
 while S[1]=' ' do begin
  Delete(S,1,1);
  if S='' then Exit;
 end;
 while S[Length(S)]=' ' do begin
  Delete(S,Length(S),1);
  if S='' then Exit;
 end;
 Result:=S;
end;
(******************************************************************************)
function IntToStr(i:Int64):string;
begin
 try
  Str(i,Result);
 except
  Result:='';
 end;
end;
(******************************************************************************)
function StrToInt(S:string):Integer;
var
 Code:Integer;
begin
 Val(S, Result, Code);
 if Code<>0 then Result:=0;
end;
(******************************************************************************)
function StrToInt64(S:string):Int64;
var
 Code:Integer;
begin
 Val(S, Result, Code);
 if Code<>0 then Result:=0;
end;
(******************************************************************************)
function HexToInt(S:string):Integer;
var Tmp:string;
begin
 Result:=0;
 Tmp:='';
 if S='' then Exit;
 if (S[1]='-') or (S[1]='+') then begin
   Tmp:=S[1];
   Delete(S,1,1);
  end;
 S:=Tmp+'$'+S;
 Result:=StrToInt(S);
end;
(******************************************************************************)
function HexToInt64(S:string):Int64;
var Tmp:string;
begin
 Result:=0;
 Tmp:='';
 if S='' then Exit;
 if (S[1]='-') or (S[1]='+') then begin
   Tmp:=S[1];
   Delete(S,1,1);
  end;
 S:=Tmp+'$'+S;
 Result:=StrToInt64(S);
end;
(******************************************************************************)
function IntToHex(i:Int64; P:Int64=0):string;
const
  Hexa:array[0..$F] of char='0123456789ABCDEF';
begin
 if (P=0) and (i=0) then begin
  Result:='0';
  Exit;
 end;
 Result:='';
 while (P>0)or(i>0) do begin
  dec(p,1);
  Result:=hexa[i and $F]+Result;
  i:=i shr 4;
 end;
end;
(******************************************************************************)
function WideToStr(const WS:WideString):string;
var l:Integer;
begin
 Result:='';
 if WS='' then Exit;
 l:=WideCharToMultiByte(CP_ACP,0,@WS[1],-1,nil,0,nil,nil);
 SetLength(Result,l-1);
 if l>1 then WideCharToMultiByte(CP_ACP,0,@WS[1],-1,@Result[1],l-1,nil,nil);
end;
(******************************************************************************)
function StrToWide(const S:AnsiString):WideString;
var l:Integer;
begin
 Result:='';
 if S='' then Exit;
 l:=MultiByteToWideChar(CP_ACP,0, Pchar(@S[1]),-1,nil,0);
 SetLength(Result,l-1);
 if l>1 then MultiByteToWideChar(CP_ACP,0,Pchar(@S[1]),-1,PWideChar(@Result[1]),l-1);
end;
(******************************************************************************)
function GetWin:string;
var
  Gwin : array[0..MAX_PATH] of Char;
begin
  GetWindowsDirectory(Gwin,MAX_PATH);
  Result:=Gwin;
  if Length(Result)>0 then
  if Result[Length(Result)]<>'\' then Result:=Result+'\';
end;
(******************************************************************************)
function GetSys:string;
var
  Gsys : array[0..MAX_PATH] of Char;
begin
  GetSystemDirectory(Gsys,MAX_PATH);
  Result:=Gsys;
  if Length(Result)>0 then
  if Result[Length(Result)]<>'\' then Result:=Result+'\';
end;
(******************************************************************************)
function GetTmp:string;
var
  Gtmp : array[0..MAX_PATH] of Char;
begin
  GetTempPath(MAX_PATH,Gtmp);
  Result:=Gtmp;
  if Length(Result)>0 then
  if Result[Length(Result)]<>'\' then Result:=Result+'\';
end;
(******************************************************************************)
function IsWinNT:Boolean;
var osVerInfo: TOSVersionInfo;
begin
 Result:=false;
 osVerInfo.dwOSVersionInfoSize:=SizeOf(TOSVersionInfo);
 if GetVersionEx(osVerInfo) then
   if osVerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then Result:=True
end;
(******************************************************************************)
function IsWin9x:Boolean;
asm
 MOV     EAX, FS:[030H]
 TEST    EAX, EAX
 SETS    AL
end;
(******************************************************************************)
function IsAdmin:Boolean;
const
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0,0,0,0,0,5));
  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  DOMAIN_ALIAS_RID_ADMINS     = $00000220;
var
  IsUserAnAdmin: function(): BOOL; stdcall;
  hAccessToken: THandle;
  ptgGroups: PTokenGroups;
  dwInfoBufferSize: DWORD;
  psidAdministrators: PSID;
  xi: Integer;
  bSuccess: BOOL;
  hMod: Thandle;
begin
 Result:=False;
 if IsWin9x then begin
   Result:=True;
   Exit;
 end;
 hMod:=GetModuleHandle('shell32.dll');
 if hMod=0 then hMod:=LoadLibrary('shell32.dll');
 IsUserAnAdmin:=GetProcAddress(hMod,'IsUserAnAdmin');
 if not Assigned(IsUserAnAdmin) then begin
  bSuccess:=OpenThreadToken(GetCurrentThread,TOKEN_QUERY,True,hAccessToken);
  if not bSuccess then if GetLastError=ERROR_NO_TOKEN then
   bSuccess:=OpenProcessToken(GetCurrentProcess,TOKEN_QUERY,hAccessToken);
  if bSuccess then begin
    GetMem(ptgGroups,1024);
    bSuccess:=GetTokenInformation(hAccessToken,TokenGroups,ptgGroups,1024,dwInfoBufferSize);
    CloseHandle(hAccessToken);
    if bSuccess then begin
      AllocateAndInitializeSid(SECURITY_NT_AUTHORITY,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,0,0,0,0,0,0,psidAdministrators);
      if ptgGroups.GroupCount>0 then
        for xi:=0 to ptgGroups.GroupCount-1 do
         if EqualSid(psidAdministrators,ptgGroups.Groups[xi].Sid) then begin
          Result:=True;
          Break;
         end;
      FreeSid(psidAdministrators);
    end;
    FreeMem(ptgGroups);
  end;
 end
 else Result:=IsUserAnAdmin();
end;
(******************************************************************************)
function GetPath(Path:string):string;
begin
 Result:='';
 if Path='' then Exit;
 if Pos('\',Path)<>0 then begin
   while Path[Length(Path)]<>'\' do Delete(Path,Length(Path),1);
   Result:=Path;
   Exit;
 end;
 if Pos('/',Path)<>0 then begin
   while Path[Length(Path)]<>'/' do Delete(Path,Length(Path),1);
   Result:=Path;
   Exit;
 end;
end;
(******************************************************************************)
function GetFile(Path:string):string;
begin
 while Pos(':',Path)<>0 do Delete(Path,1,Pos(':',Path));
 while Pos('\',Path)<>0 do Delete(Path,1,Pos('\',Path));
 while Pos('/',Path)<>0 do Delete(Path,1,Pos('/',Path));
 Result:=Path;
end;
(******************************************************************************)
function GetFileInfo(Filename,BlockKey:string):string;
var Size,VSize,Dummy: Longword;
    Pbuff,Plang: Pointer;
    Pvalue: Pchar;
    Qroot: string;
begin
 Result:='';
 Size:=GetFileVersionInfoSize(Pchar(Filename),Dummy);
 if Size=0 then Exit;
 GetMem(Pbuff,Size);
 try
 if GetFileVersionInfo(Pchar(Filename),0,Size,Pbuff) then begin
   Result:='';
   Qroot:='\StringFileInfo\040904E4\';
   if not VerQueryValue(Pbuff,Pchar(Qroot+BlockKey),Pointer(Pvalue),VSize) then begin
     if VerQueryValue(Pbuff,Pchar('\VarFileInfo\Translation'),Plang,VSize) then begin
       Qroot:=IntToHex(Integer(Plang^),8);
       Qroot:=Copy(Qroot,5,4)+Copy(Qroot,1,4);
       Qroot:='\StringFileInfo\'+Qroot+'\';
       if not VerQueryValue(Pbuff,Pchar(Qroot+BlockKey),Pointer(Pvalue),VSize) then Exit;
     end else Exit;
   end;
   Result:=Pvalue;
 end;
 finally
   FreeMem(Pbuff);
 end;
end;
(******************************************************************************)
function IsFileExist(FileName:string):Boolean;
var
 cHandle:THandle;
 FindData:TWin32FindData;
begin
 cHandle:=FindFirstFileA(Pchar(FileName),FindData);
 Result:=cHandle<>INVALID_HANDLE_VALUE;
 if Result then FindClose(cHandle);
end;
(******************************************************************************)
function IsFileInUse(FileName:string):Boolean;
var
 HFileRes: HFile;
begin
 Result:=False;
 if IsFileExist(FileName) then begin
  HFileRes := CreateFile(Pchar(FileName),GENERIC_READ or GENERIC_WRITE,
              FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);
  Result:=(HFileRes=INVALID_HANDLE_VALUE);
  if Result=False then CloseHandle(HFileRes);
 end;
end;
(******************************************************************************)
function DebugPrivilege(ToEnable:Boolean):Boolean;
var
 OldTokenPrivileges, TokenPrivileges: TTokenPrivileges;
 ReturnLength: DWORD;
 hToken: THandle;
 Luid: Int64;
begin
 Result:=True;
 if IsWin9x then Exit;
 Result:=False;
 if not OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken) then Exit;
 try
  if not LookupPrivilegeValue(nil,'SeDebugPrivilege',Luid) then Exit;
  TokenPrivileges.Privileges[0].luid:=Luid;
  TokenPrivileges.PrivilegeCount:=1;
  TokenPrivileges.Privileges[0].Attributes:=0;
  AdjustTokenPrivileges(hToken,False,TokenPrivileges,SizeOf(TTokenPrivileges),OldTokenPrivileges,ReturnLength);
  OldTokenPrivileges.Privileges[0].luid:=Luid;
  OldTokenPrivileges.PrivilegeCount:=1;
  if ToEnable then OldTokenPrivileges.Privileges[0].Attributes:=TokenPrivileges.Privileges[0].Attributes or SE_PRIVILEGE_ENABLED
  else OldTokenPrivileges.Privileges[0].Attributes:=TokenPrivileges.Privileges[0].Attributes and (not SE_PRIVILEGE_ENABLED);
  Result:=AdjustTokenPrivileges(hToken,False,OldTokenPrivileges,ReturnLength,PTokenPrivileges(nil)^,ReturnLength);
 finally
  CloseHandle(hToken);
 end;
end;
(******************************************************************************)
function GetExplorerPid:DWORD;
begin
 GetWindowThreadProcessID(FindWindow('Shell_TrayWnd',nil), @Result );
end;
(******************************************************************************)
function PHandleToPID(dwProcessHandle:DWord):DWord;
type
 TPI=packed record
       Reserved1      : Pointer;
       PebBaseAddress : Pointer;
       Reserved2      : array[0..1] of Pointer;
       UniqueProcessId: DWord;
       Reserved3      : Pointer;
     end;
 PPI=^TPI;
var
 NtQueryInformationProcess: function(dwHandle: DWord; dwInfo: DWord; pbi: PPI; dwSize: DWord; pData: Pointer): DWord; stdcall;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久久免费一区二区| 久久久久久久国产精品影院| 亚洲日本青草视频在线怡红院 | 亚洲欧洲日韩综合一区二区| 91女人视频在线观看| 亚洲国产中文字幕| 欧美一区午夜视频在线观看| 国产精品影视网| 亚洲国产日韩综合久久精品| 亚洲女性喷水在线观看一区| 精品福利一二区| 色av一区二区| 在线观看网站黄不卡| 国产成人在线电影| 日本中文一区二区三区| 亚洲欧美日韩综合aⅴ视频| 亚洲欧美偷拍卡通变态| 一二三四社区欧美黄| 欧美韩日一区二区三区| 日韩欧美国产麻豆| 欧美体内she精视频| jlzzjlzz欧美大全| 国产91精品精华液一区二区三区| 全部av―极品视觉盛宴亚洲| 亚洲国产成人av| 免费观看日韩av| 懂色av中文一区二区三区| 色综合天天综合狠狠| 成人美女视频在线观看18| 国内成人自拍视频| 久久国产精品露脸对白| 日韩国产欧美在线观看| 国产麻豆欧美日韩一区| 偷拍一区二区三区| 丝瓜av网站精品一区二区| 亚洲精品第一国产综合野| 亚洲视频免费在线观看| 日韩国产欧美在线视频| jizzjizzjizz欧美| 日韩一区国产二区欧美三区| 日韩欧美国产不卡| 亚洲日本一区二区| 国产九九视频一区二区三区| 欧美视频在线播放| 国产精品天美传媒沈樵| 亚洲日本免费电影| 国产成人亚洲综合a∨猫咪| 欧美亚洲动漫制服丝袜| 国产日韩av一区| 亚洲伦理在线免费看| 韩国成人精品a∨在线观看| 在线观看日韩高清av| 欧美高清在线一区| 精品在线观看免费| 懂色av一区二区三区蜜臀| 日韩一区二区三区在线| 亚洲一区二区三区四区在线 | 欧美日韩中字一区| 欧美精品xxxxbbbb| 久久综合av免费| 中文字幕一区二区三区色视频| 蜜臀av国产精品久久久久| 国产在线精品免费| 欧美麻豆精品久久久久久| 一区二区三区在线播| 欧美视频一区在线| 夜夜揉揉日日人人青青一国产精品| 调教+趴+乳夹+国产+精品| 99久久久国产精品| 99久久99久久免费精品蜜臀| 久久久不卡网国产精品二区| 麻豆国产欧美一区二区三区| 欧美精品在线一区二区三区| 一级特黄大欧美久久久| 日本道免费精品一区二区三区| 国产精品成人在线观看| 日韩精品一级二级| 欧美精品第一页| 秋霞电影网一区二区| 日韩一区二区麻豆国产| 久久精品久久99精品久久| 欧美www视频| 亚洲精品欧美在线| 色激情天天射综合网| 一区二区三区中文在线| 欧美在线免费播放| 水野朝阳av一区二区三区| 日韩精品一区二区在线| 国产一区二区在线免费观看| 久久精品免视看| 五月开心婷婷久久| 日韩欧美在线不卡| 国产成人在线网站| 亚洲精品中文字幕在线观看| 欧美亚洲国产一卡| 久久99最新地址| 国产日韩视频一区二区三区| 99精品视频免费在线观看| 伊人色综合久久天天人手人婷| 欧美视频三区在线播放| 麻豆成人免费电影| 一区在线播放视频| 4438成人网| 亚洲va天堂va国产va久| 一本大道久久a久久综合婷婷| 久久久蜜桃精品| 91啦中文在线观看| 免费观看一级欧美片| 久久精品日产第一区二区三区高清版| a4yy欧美一区二区三区| 亚洲成av人影院| 国产日韩一级二级三级| 欧美午夜免费电影| 国产大陆a不卡| 午夜激情综合网| 国产精品国产三级国产三级人妇| 欧美日韩成人在线| 视频一区国产视频| 国产精品丝袜久久久久久app| 欧美美女bb生活片| 色综合天天综合网天天看片| 久久精品国产一区二区| 一区二区在线电影| 国产精品网站在线| 亚洲色图制服丝袜| 欧美一区二区三区视频在线观看| 成人午夜激情片| 久久国产尿小便嘘嘘尿| 亚洲视频你懂的| 日本一区二区三区国色天香| 日韩区在线观看| 欧美亚洲高清一区| 色丁香久综合在线久综合在线观看| 国产真实乱偷精品视频免| 日韩和的一区二区| 亚洲一级二级在线| 亚洲另类中文字| 中文字幕制服丝袜一区二区三区| 欧美精品一区视频| 日韩欧美国产综合在线一区二区三区| 欧美伊人精品成人久久综合97 | 国产精品白丝av| 蜜臀av国产精品久久久久| 亚洲成在人线免费| 洋洋成人永久网站入口| 日韩毛片精品高清免费| 国产精品福利影院| 国产精品久99| 国产精品视频麻豆| 欧美高清在线视频| 国产精品久久久久影院老司 | 亚洲日韩欧美一区二区在线| 国产欧美一区二区在线观看| 国产欧美精品在线观看| 日本一区二区综合亚洲| 国产日韩欧美高清在线| 欧美国产日韩在线观看| 一区二区三区不卡在线观看| 亚洲蜜臀av乱码久久精品| 亚洲丝袜另类动漫二区| 一区二区在线免费观看| 一区二区三区欧美亚洲| 亚洲一卡二卡三卡四卡| 视频一区二区三区中文字幕| 免费精品视频在线| 国产麻豆精品95视频| 成人一区二区三区| 色哟哟一区二区在线观看 | 91精品国产综合久久精品麻豆| 精品视频1区2区3区| 91精品国产一区二区三区| 精品国产一区二区三区不卡| 亚洲精品一区二区三区在线观看 | 国产精品的网站| 一区二区三区中文在线| 秋霞午夜av一区二区三区| 国产剧情一区在线| 91国在线观看| 日韩欧美国产综合在线一区二区三区| 精品国产乱码久久久久久浪潮| 久久久噜噜噜久久人人看 | 亚洲第一会所有码转帖| 蜜臀a∨国产成人精品| 成+人+亚洲+综合天堂| 理论电影国产精品| 成人激情小说网站| 欧美日本国产视频| 久久综合成人精品亚洲另类欧美 | 制服丝袜av成人在线看| 国产欧美日韩综合| 亚洲一区二区黄色| 国内精品伊人久久久久av一坑| jvid福利写真一区二区三区| 欧美精品在线观看播放| 日本一区二区动态图| 五月激情丁香一区二区三区| 成人午夜碰碰视频| 日韩精品一区二区三区蜜臀| 亚洲日本va午夜在线电影| 狠狠色狠狠色合久久伊人|