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

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

?? magicapihook.pas

?? how you can hook functions by small size of codes
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
 pbi: TPI;
 dwDupCP: DWord;
begin
 Result:=0;
 if IsWin9x then Exit;
 @NtQueryInformationProcess:=GetProcAddress(GetModuleHandle('ntdll.dll'),'NtQueryInformationProcess');
 if (@NtQueryInformationProcess<>nil) then
   if DuplicateHandle(GetCurrentProcess, dwProcessHandle, GetCurrentProcess, @dwDupCP, PROCESS_ALL_ACCESS, False, 0) then begin
     if NtQueryInformationProcess(dwDupCP,0,@pbi,SizeOf(pbi),nil)=0 then
       Result:=pbi.UniqueProcessId;
     CloseHandle(dwDupCP);
   end;
end;
(******************************************************************************)
function CalcJump(Src,Dest:DWORD):DWORD;
begin
 if(Dest<Src) then begin
   Result:=Src-Dest;
   Result:=$FFFFFFFF-Result;
   Result:=Result-4;
  end
  else begin
   Result:=Dest-Src;
   Result:=Result-5;
  end;
end;
(******************************************************************************)
function InjectDll(DllPath:string; PID_or_PHD:DWORD):Boolean;
var
 Bytes,Process,Thread,ThreadId: DWORD;
 Params: Pointer;
 LodLib,Slp,St: DWORD;
begin
 Result:=False;
 if (IsWin9x) or (DllPath='') then Exit;
 LodLib:=DWORD(GetProcAddress(GetModuleHandle('kernel32'),'LoadLibraryA'));
 Slp:=DWORD(GetProcAddress(GetModuleHandle('kernel32'),'Sleep'));
 if (@Slp=nil) or (@LodLib=nil) then Exit;
 Process:=OpenProcess(PROCESS_ALL_ACCESS,False,PID_or_PHD);
 if Process=0 then Process:=PID_or_PHD;
 Params:=VirtualAllocEx(Process,nil,$1000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
 if Params=nil then Exit;
 WriteProcessMemory(Process,Params,Pchar(DLLPath),Length(DllPath),Bytes);
 St:=Integer(Params)+Length(DllPath)+1;
 DWORD(Pointer(DWORD(@LoadOpCodes)+1)^):=DWORD(Params);
 DWORD(Pointer(DWORD(@LoadOpCodes)+6)^):=CalcJump(St+5,LodLib);
 DWORD(Pointer(DWORD(@LoadOpCodes)+17)^):=CalcJump(St+16,Slp);
 WriteProcessMemory(Process,Pointer(St),@LoadOpCodes,SizeOf(LoadOpCodes),Bytes);
 Thread:=CreateRemoteThread(Process,nil,0,Pointer(St),nil,0,ThreadId);
 if Thread<>0 then CloseHandle(Thread);
 CloseHandle(Process);
 Result:=True;
end;
(******************************************************************************)
function UnInjectDll(DllName:string; PID_or_PHD:DWORD):Boolean;
var
 Bytes,Process,Thread,ThreadId: DWORD;
 Params: Pointer;
 FreeLib,GetMod,St: DWORD;
begin
 Result:=False;
 if (IsWin9x) or (DllName='') then Exit;
 FreeLib:=DWORD(GetProcAddress(GetModuleHandle('kernel32'),'FreeLibrary'));
 GetMod:=DWORD(GetProcAddress(GetModuleHandle('kernel32'),'GetModuleHandleA'));
 if (@FreeLib=nil) or (@GetMod=nil) then Exit;
 Process:=OpenProcess(PROCESS_ALL_ACCESS,False,PID_or_PHD);
 if Process=0 then Process:=PID_or_PHD;
 Params:=VirtualAllocEx(Process,nil,$1000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
 if Params=nil then Exit;
 WriteProcessMemory(Process,Params,Pchar(DLLName),Length(DllName),Bytes);
 St:=Integer(Params)+Length(DllName)+1;
 DWORD(Pointer(DWORD(@FreeOpCodes)+1)^):=DWORD(Params);
 DWORD(Pointer(DWORD(@FreeOpCodes)+6)^):=CalcJump(St+5,GetMod);
 DWORD(Pointer(DWORD(@FreeOpCodes)+19)^):=CalcJump(St+18,FreeLib);
 WriteProcessMemory(Process,Pointer(St),@FreeOpCodes,SizeOf(FreeOpCodes),Bytes);
 Thread:=CreateRemoteThread(Process,nil,0,Pointer(St),nil,0,ThreadId);
 if Thread<>0 then CloseHandle(Thread);
 CloseHandle(Process);
 Result:=True;
end;
(******************************************************************************)
function ApiHook(ModName,ApiName:Pchar; FuncAddr,HookedApi:Pointer; var MainApi:Pointer):Boolean;
var
 dwCount,Cnt,i,Jmp: DWORD;
 P: Pointer;
 hMod,OldP,TMP: Cardinal;
begin
 Result:=False;
 if IsWin9x then Exit;
 hMod:=GetModuleHandle(ModName);
 if hMod=0 then hMod:=LoadLibrary(ModName);
 P:=GetProcAddress(hMod,ApiName);
 if P=nil then P:=FuncAddr;
 if (P=nil) or (HookedApi=nil) then Exit;
 if not VirtualProtect(P,$40,PAGE_EXECUTE_READWRITE,@OldP) then Exit;
 if ((Byte(P^)=$68) and (DWORD(Pointer(DWORD(P)+1)^)=DWORD(HookedApi))) then Exit;
 MainApi:=VirtualAlloc(nil,$1000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
 if MainApi=nil then Exit;
 Cnt:=0;
 for dwCount:=0 to $3F do begin
  Inc(Cnt,OpCodeLength(DWORD(P)+Cnt));
  for i:=0 to Cnt-1 do Pchar(MainApi)[i]:=Pchar(P)[i];
  if Cnt>5 then Break;
 end;
 Pchar(MainApi)[Cnt]:=Char($68);
 DWORD(Pointer(DWORD(MainApi)+Cnt+1)^):=DWORD(P)+Cnt;
 Pchar(MainApi)[Cnt+5]:=Char($C3);
 Pchar(MainApi)[Cnt+6]:=Char($99);
 if (OpCodeLength(DWORD(MainApi))=5) and ((Byte(MainApi^)=$E8) or (Byte(MAinApi^)=$E9)) then begin
  Jmp:=DWORD(P)+DWORD(Pointer(DWORD(MainApi)+1)^)+5;
  DWORD(Pointer(DWORD(MainApi)+1)^):=CalcJump(DWORD(MainApi),Jmp);
 end;
 Pchar(P)[0]:=Char($68);
 DWORD(Pointer(DWORD(P)+1)^):=DWORD(HookedApi);
 Pchar(P)[5]:=Char($C3);
 VirtualProtect(P,$40,OldP,@TMP);
 Result:=True;
end;
(******************************************************************************)
function ApiUnHook(ModName,ApiName:Pchar; FuncAddr,HookedApi:Pointer; var MainApi:Pointer):Boolean;
var
 dwCount,Cnt,i,Jmp: DWORD;
 P: Pointer;
 hMod,OldP,TMP: Cardinal;
begin
 Result:=False;
 if IsWin9x then Exit;
 hMod:=GetModuleHandle(Pchar(ModName));
 P:=GetProcAddress(hMod,Pchar(ApiName));
 if P=nil then P:=FuncAddr;
 if (P=nil) or (MainApi=nil) or (HookedApi=nil) then Exit;
 if not VirtualProtect(P,$40,PAGE_EXECUTE_READWRITE,@OldP) then Exit;
 if ((Byte(P^)<>$68) or (DWORD(Pointer(DWORD(P)+1)^)<>DWORD(HookedApi))) then Exit;
 Cnt:=0;
 for dwCount:=0 to $3F do begin
  Inc(Cnt,OpCodeLength(DWORD(MainApi)+Cnt));
  if (Byte(Pointer(DWORD(MainApi)+Cnt)^)=$C3) and (Byte(Pointer(DWORD(MainApi)+Cnt+1)^)=$99) then Break;
  for i:=0 to Cnt-1 do Pchar(P)[i]:=Pchar(MainApi)[i];
 end;
 if (OpCodeLength(DWORD(P))=5) and ((Byte(P^)=$E8) or (Byte(P^)=$E9)) then begin
  Jmp:=DWORD(MainApi)+DWORD(Pointer(DWORD(MainApi)+1)^)+5;
  DWORD(Pointer(DWORD(P)+1)^):=CalcJump(DWORD(P),Jmp);
 end;
 VirtualProtect(P,$40,OldP,@TMP);
 VirtualFree(MainApi,0,MEM_RELEASE);
 Result:=True;
end;
(******************************************************************************)
function InjectAllProc(DllPath:string):Integer;
var
 hSnapP: THandle;
 ProcInfo: ProcessEntry32;
begin
 Result:=0;
 hSnapP:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 if hSnapP=INVALID_HANDLE_VALUE then Exit;
 ProcInfo.dwSize:=SizeOf(ProcessEntry32);
 if Process32First(hSnapP,ProcInfo) then
 repeat
  if InjectDll(DllPath,ProcInfo.th32ProcessID) then Inc(Result);
 until not Process32Next(hSnapP,ProcInfo);
 CloseHandle(hSnapP);
end;
(******************************************************************************)
function UnInjectAllProc(DllPath:string):Integer;
var
 hSnapP: THandle;
 ProcInfo: ProcessEntry32;
begin
 Result:=0;
 hSnapP:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 if hSnapP=INVALID_HANDLE_VALUE then Exit;
 ProcInfo.dwSize:=SizeOf(ProcessEntry32);
 if Process32First(hSnapP,ProcInfo) then
 repeat
  if UnInjectDll(DllPath,ProcInfo.th32ProcessID) then Inc(Result);
 until not Process32Next(hSnapP,ProcInfo);
 CloseHandle(hSnapP);
end;
(******************************************************************************)
function RDTSC: Int64; assembler;
asm
  DB 0fh ,031h
end;
(******************************************************************************)
function IsHeuristicScan:Boolean;
var
 Tm1,Tm2: Int64;
 Tc1,Tc2: DWORD;
begin
 // Method by: Magic_h2001
 Tm1:=RDTSC;
 Tc1:=GetTickCount;
 Sleep(100);
 Tm2:=RDTSC-Tm1;
 Tc2:=GetTickCount-Tc1;
 Result:=(Tm2<50000000) or (Tc2<50);
end;
(******************************************************************************)
function OpCodeLength(Address:DWORD):DWORD; cdecl; assembler;
const
  O_UNIQUE = 0;
  O_PREFIX = 1;
  O_IMM8 = 2;
  O_IMM16 = 3;
  O_IMM24 = 4;
  O_IMM32 = 5;
  O_IMM48 = 6;
  O_MODRM = 7;
  O_MODRM8 = 8;
  O_MODRM32 = 9;
  O_EXTENDED = 10;
  O_WEIRD = 11;
  O_ERROR = 12;
asm
	pushad
	cld
	xor	edx, edx
	mov esi, Address
 	mov	ebp, esp
	push	1097F71Ch
	push	0F71C6780h
	push	17389718h
	push	101CB718h
	push	17302C17h
	push	18173017h
	push	0F715F547h
	push	4C103748h
	push	272CE7F7h
	push	0F7AC6087h
	push	1C121C52h
	push	7C10871Ch
	push	201C701Ch
	push	4767602Bh
	push	20211011h
	push	40121625h
	push	82872022h
	push	47201220h
	push	13101419h
	push	18271013h
	push	28858260h
	push	15124045h
	push	5016A0C7h
	push	28191812h
	push	0F2401812h
	push	19154127h
	push	50F0F011h
	mov	ecx, 15124710h
	push	ecx
	push	11151247h
	push	10111512h
	push	47101115h
	mov	eax, 12472015h
	push	eax
	push	eax
	push	12471A10h
	add	cl, 10h
	push	ecx
	sub	cl, 20h
	push	ecx
	xor	ecx, ecx
	dec	ecx
@@ps:
	inc  ecx
	mov  edi, esp
@@go:
	lodsb
	mov  bh, al
@@ft:
	mov  ah, [edi]
	inc  edi
	shr  ah, 4
	sub  al, ah
	jnc  @@ft
	mov	al, [edi-1]
	and	al, 0Fh
	cmp  al, O_ERROR
	jnz  @@i7
	pop	edx
	not	edx
@@i7:
	inc	edx
	cmp	al, O_UNIQUE
	jz	@@t_exit
	cmp	al, O_PREFIX
	jz	@@ps
	add  edi, 51h
	cmp  al, O_EXTENDED
	jz   @@go
		mov	edi, [ebp+((1+8)*4)+4]
@@i6:
    inc  edx
    cmp  al, O_IMM8
    jz   @@t_exit
    cmp  al, O_MODRM
    jz   @@t_modrm
    cmp  al, O_WEIRD
    jz   @@t_weird
@@i5:
    inc  edx
    cmp  al, O_IMM16
    jz   @@t_exit
    cmp  al, O_MODRM8
    jz   @@t_modrm
@@i4:
    inc  edx
    cmp  al, O_IMM24
    jz   @@t_exit
@@i3:
    inc  edx
@@i2:
    inc  edx
    pushad
    mov  al, 66h
    repnz scasb
    popad
    jnz  @@c32
@@d2:
    dec  edx
    dec  edx
@@c32:
    cmp  al, O_MODRM32
    jz   @@t_modrm
    sub  al, O_IMM32
    jz   @@t_imm32
@@i1:
    inc  edx
@@t_exit:
    jmp @@ASMEnded
@@t_modrm:
       lodsb
       mov  ah, al
       shr  al, 7
       jb   @@prmk
       jz   @@prm
       add  dl, 4
       pushad
       mov  al, 67h
       repnz scasb
       popad
       jnz  @@prm
@@d3:  sub  dl, 3
       dec  al
@@prmk:jnz  @@t_exit
       inc  edx
       inc  eax
@@prm:
       and  ah, 00000111b
       pushad
       mov  al, 67h
       repnz scasb
       popad
       jz   @@prm67chk
       cmp  ah, 04h
       jz   @@prmsib
       cmp  ah, 05h
       jnz  @@t_exit
@@prm5chk:
       dec  al
       jz   @@t_exit
@@i42: add  dl, 4
       jmp  @@t_exit
@@prm67chk:
       cmp  ax, 0600h
       jnz  @@t_exit
       inc  edx
       jmp  @@i1
@@prmsib:
       cmp  al, 00h
       jnz  @@i1
       lodsb
       and  al, 00000111b
       sub  al, 05h
       jnz  @@i1
       inc  edx
       jmp  @@i42
@@t_weird:
       test byte ptr [esi], 00111000b
       jnz  @@t_modrm
       mov  al, O_MODRM8
       shr  bh, 1
       adc  al, 0
       jmp  @@i5
@@t_imm32:
       sub  bh, 0A0h
       cmp  bh, 04h
       jae  @@d2
       pushad
       mov  al, 67h
       repnz scasb
       popad
       jnz  @@chk66t
@@d4:  dec  edx
       dec  edx
@@chk66t:
       pushad
       mov  al, 66h
       repnz scasb
       popad
       jz   @@i1
       jnz  @@d2
@@ASMEnded:
    mov esp, ebp
    mov [result+(9*4)], edx
    popad
end;
(******************************************************************************)
initialization
 if IsHeuristicScan then Halt; // undetecting from Avs...
 @OpenProcess:=GetProcAddress(GetModuleHandle('kernel32'),'OpenProcess');
 @VirtualAllocEx:=GetProcAddress(GetModuleHandle('kernel32'),'VirtualAllocEx');
 @WriteProcessMemory:=GetProcAddress(GetModuleHandle('kernel32'),'WriteProcessMemory');
 @CreateRemoteThread:=GetProcAddress(GetModuleHandle('kernel32'),'CreateRemoteThread');
 @CreateToolhelp32Snapshot:=GetProcAddress(GetModuleHandle('kernel32'),'CreateToolhelp32Snapshot');
 @Process32First:=GetProcAddress(GetModuleHandle('kernel32'),'Process32First');
 @Process32Next:=GetProcAddress(GetModuleHandle('kernel32'),'Process32Next');

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美本精品男人aⅴ天堂| 在线观看日韩一区| 亚洲国产精品久久人人爱蜜臀| 日韩欧美精品在线视频| 99久久综合色| 久久精品国产精品亚洲综合| 亚洲人成7777| 中文幕一区二区三区久久蜜桃| 欧美久久久久中文字幕| av在线不卡免费看| 久久99国产精品久久| 亚洲精品大片www| 欧美国产综合一区二区| 欧美大片拔萝卜| 欧美性生活久久| 99亚偷拍自图区亚洲| 国产麻豆成人传媒免费观看| 天天影视网天天综合色在线播放| 亚洲婷婷国产精品电影人久久| 成人免费视频播放| 青草国产精品久久久久久| 国产精品成人网| 精品国产网站在线观看| 欧美体内she精高潮| 成人黄色在线网站| 国产一区二区三区观看| 裸体一区二区三区| 亚州成人在线电影| 亚洲综合一二三区| 亚洲品质自拍视频网站| 亚洲欧洲精品一区二区精品久久久 | 日韩午夜在线影院| 欧美日韩在线综合| 在线观看视频91| 欧洲精品在线观看| 欧美少妇xxx| 欧美性生活大片视频| 欧美亚洲图片小说| 亚洲1区2区3区视频| 精品国一区二区三区| 日韩美女视频一区二区在线观看| 666欧美在线视频| 在线不卡中文字幕| 91精品国产入口| 日韩一区二区免费电影| 欧美刺激脚交jootjob| 欧美一级一区二区| 欧美videossexotv100| 日韩欧美一区中文| 久久欧美中文字幕| 国产午夜精品久久久久久免费视| 久久欧美一区二区| 国产精品天美传媒| 亚洲欧美成人一区二区三区| 亚洲综合激情另类小说区| 午夜精品一区二区三区免费视频| 日韩制服丝袜先锋影音| 久久99精品国产.久久久久久 | 中文字幕国产一区二区| 国产精品传媒在线| 亚洲一区二区av在线| 日本视频中文字幕一区二区三区| 美日韩一级片在线观看| 欧美日韩一区国产| 日韩网站在线看片你懂的| 精品国产麻豆免费人成网站| 国产视频一区在线播放| 中文字幕一区二区三中文字幕| 亚洲一区二区三区自拍| 日本v片在线高清不卡在线观看| 国产一区二区三区黄视频 | 国产成人精品影视| 91捆绑美女网站| 欧美久久一区二区| 久久久久久久久久电影| 亚洲精品欧美专区| 精品在线播放免费| caoporen国产精品视频| 欧美日本韩国一区二区三区视频 | 在线精品视频小说1| 日韩欧美一级二级三级久久久| 久久精品男人天堂av| 亚洲精品网站在线观看| 久久99久久99精品免视看婷婷| 99国产欧美另类久久久精品 | 国产精品电影院| 日韩高清一区二区| 成人免费av在线| 6080日韩午夜伦伦午夜伦| 日本一二三不卡| 日韩二区三区四区| av一区二区久久| 欧美成人性战久久| 一区二区三区精品久久久| 精品在线你懂的| 欧美日韩一卡二卡三卡| 亚洲国产精品t66y| 免费xxxx性欧美18vr| 91女人视频在线观看| 久久中文娱乐网| 日韩主播视频在线| 色婷婷久久综合| 日本一区二区三区久久久久久久久不| 亚洲一卡二卡三卡四卡五卡| 成人黄页在线观看| 欧美精品一区二区三区蜜桃| 亚洲成av人综合在线观看| 不卡的av在线| 久久精品欧美一区二区三区麻豆| 日韩在线播放一区二区| 在线免费亚洲电影| 国产精品美日韩| 国产成人自拍网| 欧美成人一区二区三区在线观看| 亚洲成人av电影在线| 色又黄又爽网站www久久| 久久精品亚洲精品国产欧美| 麻豆精品国产91久久久久久| 欧美日韩国产小视频在线观看| 日韩美女啊v在线免费观看| 国产成a人无v码亚洲福利| 欧美大片在线观看一区二区| 无吗不卡中文字幕| 在线观看国产日韩| 亚洲一区二区四区蜜桃| 在线日韩av片| 一区二区三区中文字幕| 91啦中文在线观看| 亚洲乱码国产乱码精品精小说 | 亚洲综合精品久久| 色综合久久综合中文综合网| 国产精品免费av| 成人动漫一区二区| 国产精品久久久久久久岛一牛影视| 国产传媒欧美日韩成人| 国产欧美一区二区精品忘忧草| 国产真实乱子伦精品视频| 欧美精品一区二区三区在线播放| 麻豆精品久久精品色综合| 精品日产卡一卡二卡麻豆| 麻豆一区二区99久久久久| 精品免费日韩av| 国产精品资源网| 国产精品看片你懂得| av不卡免费电影| 樱桃国产成人精品视频| 日本乱码高清不卡字幕| 亚洲一级不卡视频| 91麻豆精品国产91久久久久久| 91首页免费视频| 亚洲精品综合在线| 欧美二区三区91| 日韩国产欧美在线视频| 精品国产伦理网| 国产999精品久久| 亚洲欧洲综合另类在线| 欧美日韩一区高清| 久久99精品网久久| 国产精品色噜噜| 欧美亚洲综合在线| 奇米在线7777在线精品| 精品少妇一区二区三区视频免付费| 国产电影一区在线| 伊人性伊人情综合网| 欧美美女一区二区三区| 韩国成人精品a∨在线观看| 国产欧美日韩在线视频| 91久久精品午夜一区二区| 天天操天天干天天综合网| 精品国产自在久精品国产| 国产精品亚洲第一| 亚洲在线中文字幕| 精品日产卡一卡二卡麻豆| 大尺度一区二区| 亚洲国产精品人人做人人爽| 精品少妇一区二区三区在线视频| 成人av网站免费观看| 亚洲在线观看免费视频| 精品国产一区a| 色综合咪咪久久| 精品一区二区三区香蕉蜜桃| 中文字幕在线不卡一区 | 欧美三级电影一区| 激情五月婷婷综合| 亚洲最大成人综合| 国产视频一区在线观看 | 国产精品国产三级国产有无不卡| 欧美日韩在线播放| 国产iv一区二区三区| 爽好久久久欧美精品| 国产精品素人一区二区| 欧美一区二区在线视频| 99国产精品国产精品久久| 久久国产精品区| 亚洲一区二区五区| 国产精品久久久久aaaa樱花| 日韩欧美另类在线| 欧美日韩中文字幕一区二区| 成人精品视频网站| 精品中文字幕一区二区|