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 decodeutf8str解决系统自带utf8解码缺陷

Delphi代码中嵌入asm代码

Delphi winapi: loadstring - 从资源中载入字符串

Delphi xe firemonkey的stylebook皮肤控件的使用

Delphi生成的webservice appdebug的程序,编译时出错

Delphi randomize 随机数

Delphi中禁止webbrowser右键的方法

Delphi 监视剪贴板内容

Delphi通过setupapi.dll列举和停用硬件设备

Delphi 给力版 getprocaddress

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



打赏

取消

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

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

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

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

评论

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