⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdh.pas

📁 面对面 木马生成器 完整代码 程序仅提供测试学习 全局钩子查找句柄截获 使用ASP收信 收信地址明文(测试而已没加密) //本软件主要是截获账号和密码 带了个简单发信
💻 PAS
字号:
{******************************************************************}
{                                                       	   }
{       Borland Delphi Runtime Library                  	   }
{       Performance Data Helper interface unit                     }
{ 								   }
{ Portions created by Microsoft are 				   }
{ Copyright (C) 1995-1999 Microsoft Corporation. 		   }
{ All Rights Reserved. 						   }
{ 								   }
{ The original file is: Pdh.pas, released 3 Dec 1999. 	           }
{ The original Pascal code is: Pdh.pas, released 3 Dec 1999.       }
{ The initial developer of the Pascal code is Marcel van Brakel    }
{ (brakelm@chello.nl).                      			   }
{ 								   }
{ Portions created by Marcel van Brakel are			   }
{ Copyright (C) 1999 Marcel van Brakel.				   }
{ 								   }
{ Obtained through:                               	           }
{ Joint Endeavour of Delphi Innovators (Project JEDI)              }
{								   }
{ You may retrieve the latest version of this file at the Project  }
{ JEDI home page, located at http://delphi-jedi.org                }
{								   }
{ The contents of this file are used with permission, subject to   }
{ the Mozilla Public License Version 1.1 (the "License"); you may  }
{ not use this file except in compliance with the License. You may }
{ obtain a copy of the License at                                  }
{ http://www.mozilla.org/NPL/NPL-1_1Final.html 	                   }
{                                                                  }
{ Software distributed under the License is distributed on an 	   }
{ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or   }
{ implied. See the License for the specific language governing     }
{ rights and limitations under the License. 			   }
{ 								   }
{******************************************************************}

unit Pdh;

{$WEAKPACKAGEUNIT}

interface

{$HPPEMIT ''}
{$HPPEMIT '#include "pdh.h"'}
{$HPPEMIT ''}

uses
  Windows, WinPerf;

type
  DWORD_PTR = DWORD;

  PDH_STATUS = Longint;
  {$EXTERNALSYM PDH_STATUS}


type

// data type definitions

  HCOUNTER = THandle;
  {$EXTERNALSYM HCOUNTER}
  HQUERY = THandle;
  {$EXTERNALSYM HQUERY}
  HLOG = THandle;
  {$EXTERNALSYM HLOG}

  PPdhRawCounter = ^TPdhRawCounter;
  _PDH_RAW_COUNTER = record
    CStatus: DWORD;
    TimeStamp: TFileTime;
    FirstValue: LONGLONG;
    SecondValue: LONGLONG;
    MultiCount: DWORD;
  end;
  {$EXTERNALSYM _PDH_RAW_COUNTER}
  TPdhRawCounter = _PDH_RAW_COUNTER;

  PPdhRawCounterItemA = ^TPdhRawCounterItemA;
  PPdhRawCounterItemW = ^TPdhRawCounterItemW;
  PPdhRawCounterItem = PPdhRawCounterItemA;
  _PDH_RAW_COUNTER_ITEM_A = record
    szName: PAnsiChar;
    RawValue: TPdhRawCounter;
  end;
  {$EXTERNALSYM _PDH_RAW_COUNTER_ITEM_A}
  _PDH_RAW_COUNTER_ITEM_W = record
    szName: PWideChar;
    RawValue: TPdhRawCounter;
  end;
  {$EXTERNALSYM _PDH_RAW_COUNTER_ITEM_W}
  _PDH_RAW_COUNTER_ITEM_ = _PDH_RAW_COUNTER_ITEM_A;
  TPdhRawCounterItemA = _PDH_RAW_COUNTER_ITEM_A;
  TPdhRawCounterItemW = _PDH_RAW_COUNTER_ITEM_W;
  TPdhRawCounterItem = TPdhRawCounterItemA;

  PPdhFmtCounterValue = ^TPdhFmtCounterValue;
  _PDH_FMT_COUNTERVALUE = record
    CStatus: DWORD;
    case Longint of
      1: (longValue: Longint);
      2: (doubleValue: Double);
      3: (largeValue: LONGLONG);
      4: (AnsiStringValue: LPSTR);
      5: (WideStringValue: LPWSTR);
  end;
  {$EXTERNALSYM _PDH_FMT_COUNTERVALUE}
  TPdhFmtCounterValue = _PDH_FMT_COUNTERVALUE;

  PPdhFmtCounterValueItemA = ^TPdhFmtCounterValueItemA;
  PPdhFmtCounterValueItemW = ^TPdhFmtCounterValueItemW;
  PPdhFmtCounterValueItem = PPdhFmtCounterValueItemA;
  _PDH_FMT_COUNTERVALUE_ITEM_A = record
    szName: PAnsiChar;
    FmtValue: TPdhFmtCounterValue;
  end;
  {$EXTERNALSYM _PDH_FMT_COUNTERVALUE_ITEM_A}
  _PDH_FMT_COUNTERVALUE_ITEM_W = record
    szName: PWideChar;
    FmtValue: TPdhFmtCounterValue;
  end;
  {$EXTERNALSYM _PDH_FMT_COUNTERVALUE_ITEM_W}
  _PDH_FMT_COUNTERVALUE_ITEM_ = _PDH_FMT_COUNTERVALUE_ITEM_A;
  TPdhFmtCounterValueItemA = _PDH_FMT_COUNTERVALUE_ITEM_A;
  TPdhFmtCounterValueItemW = _PDH_FMT_COUNTERVALUE_ITEM_W;
  TPdhFmtCounterValueItem = TPdhFmtCounterValueItemA;

  PPdhStatistics = ^TPdhStatistics;
  _PDH_STATISTICS = record
    dwFormat: DWORD;
    Count: DWORD;
    min: TPdhFmtCounterValue;
    max: TPdhFmtCounterValue;
    mean: TPdhFmtCounterValue;
  end;
  {$EXTERNALSYM _PDH_STATISTICS}
  TPdhStatistics = _PDH_STATISTICS;

  PPdhCounterPathElementsA = ^TPdhCounterPathElementsA;
  PPdhCounterPathElementsW = ^TPdhCounterPathElementsW;
  PPdhCounterPathElements = PPdhCounterPathElementsA;
  _PDH_COUNTER_PATH_ELEMENTS_A = record
    szMachineName: PAnsiChar;
    szObjectName: PAnsiChar;
    szInstanceName: PAnsiChar;
    szParentInstance: PAnsiChar;
    dwInstanceIndex: DWORD;
    szCounterName: PAnsiChar;
  end;
  {$EXTERNALSYM _PDH_COUNTER_PATH_ELEMENTS_A}
  _PDH_COUNTER_PATH_ELEMENTS_W = record
    szMachineName: PWideChar;
    szObjectName: PWideChar;
    szInstanceName: PWideChar;
    szParentInstance: PWideChar;
    dwInstanceIndex: DWORD;
    szCounterName: PWideChar;
  end;
  {$EXTERNALSYM _PDH_COUNTER_PATH_ELEMENTS_W}
  _PDH_COUNTER_PATH_ELEMENTS_ = _PDH_COUNTER_PATH_ELEMENTS_A;
  TPdhCounterPathElementsA = _PDH_COUNTER_PATH_ELEMENTS_A;
  TPdhCounterPathElementsW = _PDH_COUNTER_PATH_ELEMENTS_W;
  TPdhCounterPathElements = TPdhCounterPathElementsA;

  PPdhDataItemPathElementsA = ^TPdhDataItemPathElementsA;
  PPdhDataItemPathElementsW = ^TPdhDataItemPathElementsW;
  PPdhDataItemPathElements = PPdhDataItemPathElementsA;
  _PDH_DATA_ITEM_PATH_ELEMENTS_A = record
    szMachineName: PAnsiChar;
    ObjectGUID: TGUID;
    dwItemId: DWORD;
    szInstanceName: PAnsiChar;
  end;
  {$EXTERNALSYM _PDH_DATA_ITEM_PATH_ELEMENTS_A}
  _PDH_DATA_ITEM_PATH_ELEMENTS_W = record
    szMachineName: PWideChar;
    ObjectGUID: TGUID;
    dwItemId: DWORD;
    szInstanceName: PWideChar;
  end;
  {$EXTERNALSYM _PDH_DATA_ITEM_PATH_ELEMENTS_W}
  _PDH_DATA_ITEM_PATH_ELEMENTS_ = _PDH_DATA_ITEM_PATH_ELEMENTS_A;
  TPdhDataItemPathElementsA = _PDH_DATA_ITEM_PATH_ELEMENTS_A;
  TPdhDataItemPathElementsW = _PDH_DATA_ITEM_PATH_ELEMENTS_W;
  TPdhDataItemPathElements = TPdhDataItemPathElementsA;

  PPdhCounterInfoA = ^TPdhCounterInfoA;
  PPdhCounterInfoW = ^TPdhCounterInfoW;
  PPdhCounterInfo = PPdhCounterInfoA;
  _PDH_COUNTER_INFO_A = record
    dwLength: DWORD;
    dwType: DWORD;
    CVersion: DWORD;
    CStatus: DWORD;
    lScale: Longint;
    lDefaultScale: Longint;
    dwUserData: DWORD_PTR;
    dwQueryUserData: DWORD_PTR;
    szFullPath: PAnsiChar;
    Union: record
      case Longint of
        1: (DataItemPath: TPdhDataItemPathElementsA);
        2: (CounterPath: TPdhCounterPathElementsA);
        3: (szMachineName: PAnsiChar;
            szObjectName: PAnsiChar;
            szInstanceName: PAnsiChar;
            szParentInstance: PAnsiChar;
            dwInstanceIndex: DWORD;
            szCounterName: PAnsiChar);
    end;
    szExplainText: PAnsiChar;
    DataBuffer: array[0..0] of DWORD;
  end;
  {$EXTERNALSYM _PDH_COUNTER_INFO_A}
  _PDH_COUNTER_INFO_W = record
    dwLength: DWORD;
    dwType: DWORD;
    CVersion: DWORD;
    CStatus: DWORD;
    lScale: Longint;
    lDefaultScale: Longint;
    dwUserData: DWORD_PTR;
    dwQueryUserData: DWORD_PTR;
    szFullPath: PWideChar;
    Union: record
      case Longint of
        1: (DataItemPath: TPdhDataItemPathElementsW);
        2: (CounterPath: TPdhCounterPathElementsW);
        3: (szMachineName: PWideChar;
            szObjectName: PWideChar;
            szInstanceName: PWideChar;
            szParentInstance: PWideChar;
            dwInstanceIndex: DWORD;
            szCounterName: PWideChar);
    end;
    szExplainText: PWideChar;
    DataBuffer: array[0..0] of DWORD;
  end;
  {$EXTERNALSYM _PDH_COUNTER_INFO_W}
  _PDH_COUNTER_INFO_ = _PDH_COUNTER_INFO_A;
  TPdhCounterInfoA = _PDH_COUNTER_INFO_A;
  TPdhCounterInfoW = _PDH_COUNTER_INFO_W;
  TPdhCounterInfo = TPdhCounterInfoA;

  PPdhTimeInfo = ^TPdhTimeInfo;
  _PDH_TIME_INFO = record
    StartTime: LONGLONG;
    EndTime: LONGLONG;
    SampleCount: DWORD;
  end;
  {$EXTERNALSYM _PDH_TIME_INFO}
  TPdhTimeInfo = _PDH_TIME_INFO;

  PPdhRawLogRecord = ^TPdhRawLogRecord;
  _PDH_RAW_LOG_RECORD = record
    dwStructureSize: DWORD;
    dwRecordType: DWORD;
    dwItems: DWORD;
    RawBytes: array[0..0] of UCHAR;
  end;
  {$EXTERNALSYM _PDH_RAW_LOG_RECORD}
  TPdhRawLogRecord = _PDH_RAW_LOG_RECORD;

  PPdhLogServiceQueryInfoA = ^TPdhLogServiceQueryInfoA;
  PPdhLogServiceQueryInfoW = ^TPdhLogServiceQueryInfoW;
  PPdhLogServiceQueryInfo = PPdhLogServiceQueryInfoA;
  _PDH_LOG_SERVICE_QUERY_INFO_A = record
    dwSize: DWORD;
    dwFlags: DWORD;
    dwLogQuota: DWORD;
    szLogFileCaption: PAnsiChar;
    szDefaultDir: PAnsiChar;
    szBaseFileName: PAnsiChar;
    dwFileType: DWORD;
    dwReserved: DWORD;
    Union: record
      case Longint of
      1: (PdlAutoNameInterval: DWORD;
          PdlAutoNameUnits: DWORD;
          PdlCommandFilename: PAnsiChar;
          PdlCounterList: PAnsiChar;
          PdlAutoNameFormat: DWORD;
          PdlSampleInterval: DWORD;
          PdlLogStartTime: TFileTime;
          PdlLogEndTime: TFileTime);
      2: (TlNumberOfBuffers: DWORD;
          TlMinimumBuffers: DWORD;
          TlMaximumBuffers: DWORD;
          TlFreeBuffers: DWORD;
          TlBufferSize: DWORD;
          TlEventsLost: DWORD;
          TlLoggerThreadId: DWORD;
          TlBuffersWritten: DWORD;
          TlLogHandle: DWORD;
          TlLogFileName: PAnsiChar);
    end;
  end;
  {$EXTERNALSYM _PDH_LOG_SERVICE_QUERY_INFO_A}
  _PDH_LOG_SERVICE_QUERY_INFO_W = record
    dwSize: DWORD;
    dwFlags: DWORD;
    dwLogQuota: DWORD;
    szLogFileCaption: PWideChar;
    szDefaultDir: PWideChar;
    szBaseFileName: PWideChar;
    dwFileType: DWORD;
    dwReserved: DWORD;
    Union: record
      case Longint of
      1: (PdlAutoNameInterval: DWORD;
          PdlAutoNameUnits: DWORD;
          PdlCommandFilename: PWideChar;
          PdlCounterList: PWideChar;
          PdlAutoNameFormat: DWORD;
          PdlSampleInterval: DWORD;
          PdlLogStartTime: TFileTime;
          PdlLogEndTime: TFileTime);
      2: (TlNumberOfBuffers: DWORD;
          TlMinimumBuffers: DWORD;
          TlMaximumBuffers: DWORD;
          TlFreeBuffers: DWORD;
          TlBufferSize: DWORD;
          TlEventsLost: DWORD;
          TlLoggerThreadId: DWORD;
          TlBuffersWritten: DWORD;
          TlLogHandle: DWORD;
          TlLogFileName: PWideChar);
    end;
  end;
  {$EXTERNALSYM _PDH_LOG_SERVICE_QUERY_INFO_W}
  _PDH_LOG_SERVICE_QUERY_INFO_ = _PDH_LOG_SERVICE_QUERY_INFO_A;
  TPdhLogServiceQueryInfoA = _PDH_LOG_SERVICE_QUERY_INFO_A;
  TPdhLogServiceQueryInfoW = _PDH_LOG_SERVICE_QUERY_INFO_W;
  TPdhLogServiceQueryInfo = TPdhLogServiceQueryInfoA;

//
//  Time value constants
//

const
  MAX_TIME_VALUE = LONGLONG($7FFFFFFFFFFFFFFF);
  {$EXTERNALSYM MAX_TIME_VALUE}
  MIN_TIME_VALUE = LONGLONG(0);
  {$EXTERNALSYM MIN_TIME_VALUE}

// function definitions


//
//  Query Functions
//
var
PdhOpenQuery:function (szDataSource: PChar; dwUserData: DWORD_PTR;
  var phQuery: HQUERY): Longint; stdcall;
{$EXTERNALSYM PdhOpenQuery}

PdhAddCounter:function (hQuery: HQUERY; szFullCounterPath: PChar;
  dwUserData: DWORD_PTR; var phCounter: HCOUNTER): Longint; stdcall;
{$EXTERNALSYM PdhAddCounter}

PdhCollectQueryData:function (hQuery: HQUERY): Longint; stdcall;
{$EXTERNALSYM PdhCollectQueryData}

PdhRemoveCounter: function (hCounter: HCOUNTER): Longint; stdcall;
{$EXTERNALSYM PdhRemoveCounter}

PdhCloseQuery:function (hQuery: HQUERY): Longint; stdcall;
{$EXTERNALSYM PdhCloseQuery}

//
//  Counter Functions
//

PdhGetFormattedCounterValue:function (hCounter: HCOUNTER; dwFormat: DWORD;
  lpdwType: LPDWORD; var pValue: TPdhFmtCounterValue): Longint; stdcall;
{$EXTERNALSYM PdhGetFormattedCounterValue}

// dwFormat flag values

const
  PDH_FMT_RAW     = DWORD($00000010);
  {$EXTERNALSYM PDH_FMT_RAW}
  PDH_FMT_ANSI    = DWORD($00000020);
  {$EXTERNALSYM PDH_FMT_ANSI}
  PDH_FMT_UNICODE = DWORD($00000040);
  {$EXTERNALSYM PDH_FMT_UNICODE}
  PDH_FMT_LONG    = DWORD($00000100);
  {$EXTERNALSYM PDH_FMT_LONG}
  PDH_FMT_DOUBLE  = DWORD($00000200);
  {$EXTERNALSYM PDH_FMT_DOUBLE}
  PDH_FMT_LARGE   = DWORD($00000400);
  {$EXTERNALSYM PDH_FMT_LARGE}
  PDH_FMT_NOSCALE = DWORD($00001000);
  {$EXTERNALSYM PDH_FMT_NOSCALE}
  PDH_FMT_1000    = DWORD($00002000);
  {$EXTERNALSYM PDH_FMT_1000}
  PDH_FMT_NODATA  = DWORD($00004000);
  {$EXTERNALSYM PDH_FMT_NODATA}

  PERF_DETAIL_COSTLY   = DWORD($00010000);
  {$EXTERNALSYM PERF_DETAIL_COSTLY}
  PERF_DETAIL_STANDARD = DWORD($0000FFFF);
  {$EXTERNALSYM PERF_DETAIL_STANDARD}


var LibHandle:HWND;            
  procedure InitDll;
  procedure CloseDll;
implementation

uses Other;

const
  PdhLib = 'pdh.dll';

procedure InitDll;
begin
	if judgesys in [1,2] then exit;
	LibHandle:=LoadLibrary(PdhLib);
  if LibHandle<32 then
  begin
    Exit;
  end;
  //@PdhGetDllVersion:=GetProcAddress(LibHandle,'PdhGetDllVersion');
  @PdhOpenQuery:=GetProcAddress(LibHandle,'PdhOpenQuery');
  @PdhAddCounter:=GetProcAddress(LibHandle,'PdhAddCounterA');
  @PdhCollectQueryData:=GetProcAddress(LibHandle,'PdhCollectQueryData');
  @PdhGetFormattedCounterValue:=GetProcAddress(LibHandle,'PdhGetFormattedCounterValue');
  @PdhRemoveCounter:=GetProcAddress(LibHandle,'PdhRemoveCounter');
  @PdhCloseQuery:=GetProcAddress(LibHandle,'PdhCloseQuery');
  if (@PdhOpenQuery=nil) or (@PdhAddCounter=nil) or (@PdhCollectQueryData=nil) or
  		(@PdhGetFormattedCounterValue=nil) or (@PdhRemoveCounter=nil) or (@PdhCloseQuery=nil)
 	then begin
    freeLibrary(LibHandle);
    LibHandle:=0;
    Exit
  end;
end;

procedure CloseDll;
begin
  if LibHandle>=32 then
    freeLibrary(LibHandle);//:=LoadLibrary(
end;

end.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -