乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      delphi攔截 網(wǎng)絡(luò)數(shù)據(jù)封包

       獨(dú)孤求財(cái) 2012-03-12

      delphi攔截 網(wǎng)絡(luò)數(shù)據(jù)封包

      時(shí)間:2011-5-30來源:yang 作者: peng點(diǎn)擊: 69次

      從網(wǎng)上查到一篇“攔截其它程序的網(wǎng)絡(luò)數(shù)據(jù)封包”的文章,我想問問前輩們,我應(yīng)該怎么獲取此程序連接的ip地址呢?我是希望能根據(jù)ip地址判斷是不是需要攔截。

      HOOK.DLL的代碼:
      library Hook;

      uses
      SysUtils,
      windows,
      Messages,
      APIHook in ‘APIHook.pas‘;

      type
      PData = ^TData;
      TData = record
      Hook: THandle;
      Hooked: Boolean;
      end;

      var
      DLLData: PData;

      {------------------------------------}
      {過程名:HookProc
      {過程功能:HOOK過程
      {過程參數(shù):nCode, wParam, lParam消息的相
      { 關(guān)參數(shù)
      {------------------------------------}
      procedure HookProc(nCode, wParam, lParam: LongWORD);stdcall;
      begin
      if not DLLData^.Hooked then
      begin
      HookAPI;
      DLLData^.Hooked := True;
      end;
      //調(diào)用下一個(gè)Hook
      CallNextHookEx(DLLData^.Hook, nCode, wParam, lParam);
      end;


      {------------------------------------}
      {函數(shù)名:InstallHook
      {函數(shù)功能:在指定窗口上安裝HOOK
      {函數(shù)參數(shù):sWindow:要安裝HOOK的窗口
      {返回值:成功返回TRUE,失敗返回FALSE
      {------------------------------------}
      function InstallHook(SWindow: LongWORD):Boolean;stdcall;
      var
      ThreadID: LongWORD;
      begin
      Result := False;
      DLLData^.Hook := 0;
      ThreadID := GetWindowThreadProcessId(sWindow, nil);
      //給指定窗口掛上鉤子
      DLLData^.Hook := SetWindowsHookEx(WH_GETMESSAGE, @HookProc, Hinstance, ThreadID);
      if DLLData^.Hook > 0 then
      Result := True //是否成功HOOK
      else
      exit;
      end;

      {------------------------------------}
      {過程名:UnHook
      {過程功能:卸載HOOK
      {過程參數(shù):無
      {------------------------------------}
      procedure UnHook;stdcall;
      begin
      UnHookAPI;
      //卸載Hook
      UnhookWindowsHookEx(DLLData^.Hook);
      end;

      {------------------------------------}
      {過程名:DLL入口函數(shù)
      {過程功能:進(jìn)行DLL初始化,釋放等
      {過程參數(shù):DLL狀態(tài)
      {------------------------------------}
      procedure MyDLLHandler(Reason: Integer);
      var
      FHandle: LongWORD;
      begin
      case Reason of
      DLL_PROCESS_ATTACH:
      begin //建立文件映射,以實(shí)現(xiàn)DLL中的全局變量
      FHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, $ffff, ‘MYDLLDATA‘);
      if FHandle = 0 then
      if GetLastError = ERROR_ALREADY_EXISTS then
      begin
      FHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, ‘MYDLLDATA‘);
      if FHandle = 0 then Exit;
      end else Exit;
      DLLData := MapViewOfFile(FHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
      if DLLData = nil then
      CloseHandle(FHandle);
      end;
      DLL_PROCESS_DETACH:
      begin
      if Assigned(DLLData) then
      begin
      UnmapViewOfFile(DLLData);
      DLLData := nil;
      end;
      end;
      end;
      end;

      {$R *.res}
      exports
      InstallHook, UnHook, HookProc;

      begin
      DLLProc := @MyDLLHandler;
      MyDLLhandler(DLL_PROCESS_ATTACH);
      DLLData^.Hooked := False;
      end.

      ----------------------------------------------------------------------------------------
      APIHook.Pas的代碼:

      unit APIHook;

      interface

      uses
      SysUtils,
      Windows, WinSock;

      type
      //要HOOK的API函數(shù)定義
      TSockProc = function (s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;

      PJmpCode = ^TJmpCode;
      TJmpCode = packed record
      JmpCode: BYTE;
      Address: TSockProc;
      MovEAX: Array [0..2] of BYTE;
      end;

      //--------------------函數(shù)聲明---------------------------
      procedure HookAPI;
      procedure UnHookAPI;

      var
      OldSend, OldRecv: TSockProc; //原來的API地址
      JmpCode: TJmpCode;
      OldProc: array [0..1] of TJmpCode;
      AddSend, AddRecv: pointer; //API地址
      TmpJmp: TJmpCode;
      ProcessHandle: THandle;
      implementation

      {---------------------------------------}
      {函數(shù)功能:Send函數(shù)的HOOK
      {函數(shù)參數(shù):同Send
      {函數(shù)返回值:integer
      {---------------------------------------}
      function MySend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
      var
      dwSize: cardinal;
      begin
      //這兒進(jìn)行發(fā)送的數(shù)據(jù)處理
      MessageBeep(1000); //簡單的響一聲
      //調(diào)用直正的Send函數(shù)
      WriteProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize);
      Result := OldSend(S, Buf, len, flags);
      JmpCode.Address := @MySend;
      WriteProcessMemory(ProcessHandle, AddSend, @JmpCode, 8, dwSize);
      end;

      {---------------------------------------}
      {函數(shù)功能:Recv函數(shù)的HOOK
      {函數(shù)參數(shù):同Recv
      {函數(shù)返回值:integer
      {---------------------------------------}
      function MyRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
      var
      dwSize: cardinal;
      begin
      //這兒進(jìn)行接收的數(shù)據(jù)處理
      MessageBeep(1000); //簡單的響一聲
      //調(diào)用直正的Recv函數(shù)
      WriteProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize);
      Result := OldRecv(S, Buf, len, flags);
      JmpCode.Address := @MyRecv;
      WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize);
      end;

      {------------------------------------}
      {過程功能:HookAPI
      {過程參數(shù):無
      {------------------------------------}
      procedure HookAPI;
      var
      DLLModule: THandle;
      dwSize: cardinal;
      begin
      ProcessHandle := GetCurrentProcess;
      DLLModule := LoadLibrary(‘ws2_32.dll‘);
      AddSend := GetProcAddress(DLLModule, ‘send‘); //取得API地址
      AddRecv := GetProcAddress(DLLModule, ‘recv‘);
      JmpCode.JmpCode := $B8;
      JmpCode.MovEAX[0] := $FF;
      JmpCode.MovEAX[1] := $E0;
      JmpCode.MovEAX[2] := 0;
      ReadProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize);
      JmpCode.Address := @MySend;
      WriteProcessMemory(ProcessHandle, AddSend, @JmpCode, 8, dwSize); //修改Send入口
      ReadProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize);
      JmpCode.Address := @MyRecv;
      WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize); //修改Recv入口
      OldSend := AddSend;
      OldRecv := AddRecv;
      end;

      {------------------------------------}
      {過程功能:取消HOOKAPI
      {過程參數(shù):無
      {------------------------------------}
      procedure UnHookAPI;
      var
      dwSize: Cardinal;
      begin
      WriteProcessMemory(ProcessHandle, AddSend, @OldProc[0], 8, dwSize);
      WriteProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize);
      end;

      end.

      ---------------------------------------------------------------------------------------------
      編譯這個(gè)DLL后,再新建一個(gè)程序調(diào)用這個(gè)DLL的InstallHook并傳入目標(biāo)進(jìn)程的主窗口句柄就可:
      unit fmMain;

      interface

      uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

      type
      TForm1 = class(TForm)
      Button1: TButton;
      Button2: TButton;
      Edit1: TEdit;
      procedure Button1Click(Sender: TObject);
      procedure Button2Click(Sender: TObject);
      private
      { Private declarations }
      public
      { Public declarations }
      end;

      var
      Form1: TForm1;
      InstallHook: function (SWindow: THandle):Boolean;stdcall;
      UnHook: procedure;stdcall;
      implementation

      {$R *.dfm}

      procedure TForm1.Button1Click(Sender: TObject);
      var
      ModuleHandle: THandle;
      TmpWndHandle: THandle;
      begin
      TmpWndHandle := 0;
      TmpWndHandle := FindWindow(nil, ‘目標(biāo)窗口的標(biāo)題‘);
      if not isWindow(TmpWndHandle) then
      begin
      MessageBox(self.Handle, ‘沒有找到窗口‘, ‘!!!‘, MB_OK);
      exit;
      end;
      ModuleHandle := LoadLibrary(‘Hook.dll‘);
      @InstallHook := GetProcAddress(ModuleHandle, ‘InstallHook‘);
      @UnHook := GetProcAddress(ModuleHandle, ‘UnHook‘);
      if InstallHook(FindWindow(nil, ‘Untitled‘)) then
      ShowMessage(‘Hook OK‘);
      end;

      procedure TForm1.Button2Click(Sender: TObject);
      begin
      UnHook
      end;

      end.

      留著自己以后研究  

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多