Delphi版多开源码,也就是遍历系统内核对象句柄


本文整理自网络,侵删。

  

此源码翻译自C++,可用于遍历系统内核对象句柄,然后找到其他进程的Mutex句柄 
远程注入后关闭句柄,解决Mutex,实现多开。 
或者做成dll注入,关闭句柄
注:本程序有一Bug;有时无法获取其他进程完整的内核对象句柄表(包括Mutex),望高手们可以修正此Bug。 
 
 
 
 
 
 
 
procedure EumKnlObjectName(var sList:TStrings); 
type 
  PObjectTypeInformation = ^TObjectTypeInformation; 
  TObjectTypeInformation = packed record 
    Name: Unicode_STRING; 
    ObjectCount, HandleCount: Cardinal; 
    Reserved1: array[0..3] of Cardinal; 
    PeakObjectCount, PeakHandleCount: Cardinal; 
    Reserved2: array[0..3] of Cardinal; 
    InvalidAttributes: Cardinal; 
    GenericMapping: TGenericMapping; 
    ValidAccess: Cardinal; 
    Unknown: UCHAR; 
    MaintainHandleDatabase: Boolean; 
    Reserved3: array[0..1] of UCHAR; 
    PoolType: Cardinal; 
    PagedPoolUsage, NonPagedPoolUsage: Cardinal; 
  end; 
  POBJECT_ALL_TYPES_INFORMATION = ^TOBJECT_ALL_TYPES_INFORMATION; 
  TOBJECT_ALL_TYPES_INFORMATION = record // Information Class 3 
    NumberOfTypes: DWORD; 
    TypeInformation: TObjectTypeInformation; 
  end; 
  TOBJECT_INFORMATION_CLASS = ( 
    ObjectBasicInformation, 
    ObjectNameInformation, 
    ObjectTypeInformation, 
    ObjectAllTypesInformation, 
    ObjectHandleInformation); 
  PObjectNameInformation = ^TObjectNameInformation; 
  TObjectNameInformation = packed record 
    Name: UNICODE_STRING; 
  end; 
  PSystemHandleInformation = ^TSystemHandleInformation
  TSystemHandleInformation = packed record 
    ProcessId: DWORD; 
    ObjectTypeNumber: Byte; 
    Flags: Byte; 
    Handle: Word; 
    eObject: Pointer; 
    GrantedAccess: ACCESS_MASK; 
  end; 
  PSystemHandleInformation_Ex = ^TSystemHandleInformation_Ex; 
  TSystemHandleInformation_Ex = packed record 
    NumberOfHandles: DWORD; 
    Information: TSystemHandleInformation
  end; 
  PNtQuerySystemInformation = function(SystemInformationClass: DWORD; SystemInformation: Pointer; SystemInformationLength: ULONG; ReturnLength: PULONG): DWORD; stdcall; 
  PNtQueryObject = function(ObjectHandle: THANDLE; 
    ObjectInformationClass: TOBJECT_INFORMATION_CLASS; 
    ObjectInformation: Pointer; 
    ObjectInformationLength: DWORD; 
    ReturnLength: PDWORD): DWORD; stdcall; 
var 
  _ModuleHandle, _Count, i: Dword; 
  _NtQueryObject: PNtQueryObject; 
  _ObjTypeInfo: POBJECT_ALL_TYPES_INFORMATION; 
  _P, _StrLen, _Size: DWORD; 
  _ObjName: string; 
  _NtQuerySystemInformation: PNtQuerySystemInformation; 
  pHandleInfor: PSystemHandleInformation_Ex; 
  _HandleInfor: PSystemHandleInformation
  _Name: PObjectNameInformation; 
begin 
  _Count := 0; 
  _ModuleHandle := GetModuleHandle('ntdll.dll'); 
  _NtQueryObject := GetProcAddress(_ModuleHandle, 'NtQueryObject'); 
  _NtQuerySystemInformation := GetProcAddress(LoadLibrary('ntdll.dll'), 'NtQuerySystemInformation'); 
  _Size := $4000; 
  GetMem(pHandleInfor, _Size); 
  while _NtQuerySystemInformation(16, pHandleInfor, _Size, nil) <> 0 do 
  begin 
    _Size := _Size + _Size; 
    ReallocMem(pHandleInfor, _Size); 
  end; 
  _Name := GetMemory($1000); 
  for I := 0 to pHandleInfor^.NumberOfHandles - 1 do 
  begin 
    _HandleInfor := PSystemHandleInformation(dword(pHandleInfor) + 4 + (i * SizeOf(TSystemHandleInformation))); 
      if (_HandleInfor^.ProcessId <> GetCurrentProcessId) then 
      begin 
      if _NtQueryObject(_HandleInfor^.Handle, ObjectNameInformation, _Name, $2000, nil) = 0 then 
      begin 
        _ObjName := WideCharToString(_Name.Name.Buffer); 
        sList.Add(IntToHex(Dword(_HandleInfor^.Handle), 8) + '-' + IntToStr(_HandleInfor^.ObjectTypeNumber) + ':' + _ObjName); 
      end; 
      end; 
  end; 
end; 
 
其中上面的UNICODE_STRING,是一个record,buffer是pwidechar,Length是word,MaximumLength也是word
如果不想这样动态调用内核Api
可以下载Jedi Api,完全翻译好头文件的,Delphi Pas
最后,希望高手能解决我的问题
无法获取其他进程完整的内核对象句柄表(包括Mutex),但可以获取本进程的

相关阅读 >>

Delphi fileopendialog1 多选加载大量文件,不受中文文件名影响

Delphi 利用windows api判断文件共享锁定状态

Delphi screencap 截图

Delphi 把窗体上的所有edit清空怎么做

Delphi 程序嵌入桌面效果的实现

Delphi 小票打印开钱箱 自动切纸指令

Delphi 利用sendinput模拟鼠标键盘

Delphi 重启启动计算机的代码

Delphi中setlength使用

Delphi lockbox 做加密解密

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...