分类 笔记 下的文章

战略make Hook LsaApLogonUserEx2时X86/X64需要注意的地方

Type
{$IFDEF WIN64}
  xDWORD = DWORD64;
{$ELSE}
  xDWORD = DWORD;
{$ENDIF}

PMSV1_0_INTERACTIVE_LOGON= ^MSV1_0_INTERACTIVE_LOGON;
MSV1_0_INTERACTIVE_LOGON = Record
  MessageType     :MSV1_0_LOGON_SUBMIT_TYPE;
  LogonDomainName :UNICODE_STRING;
  UserName        :UNICODE_STRING;
  Password        :UNICODE_STRING;
End;
  
 
// 计算的时候需要考虑X86/X64的区别{内存地址长度的问题}
Function AdjustPointer(Buffer, Base:Pointer):xDWORD;
begin 
  if (xDWORD(Buffer) < xDWORD(Base)) then
  begin
    Result := xDWORD(Buffer);
  end else
  begin
    Result := (xDWORD(Buffer) - xDWORD(Base));
  end;
end;

// 计算字符串的偏移地址
ProtocolSubmitBuffer^.LogonDomainName.Buffer := PWideChar(xDWORD(ProtocolSubmitBuffer) + AdjustPointer(ProtocolSubmitBuffer^.LogonDomainName.Buffer, ClientBufferBase));

Windows Vista/7/8/8.1/2012下文件夹安全选项标签{用户权限标签} 失踪的处理

以下内容复制保存为 .reg 注册表文件后 双击导入即可


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shellex\PropertySheetHandlers\{1f2e5c40-9550-11ce-99d2-00aa006e086c}]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoSecurityTab"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoSecurityTab"=-


Delphi下的纯Pascal的十六进制转十进制

Function StrLenA(Str :PAnsiChar):Integer;
Begin
  Result := 0;
  while Str[Result] <> #$0 do Inc(Result)
End;  

Function Char2Int(A :AnsiChar):Integer;
Begin   //字符转整数
  Result := -1;
  if (Byte(A) > 47) And (Byte(A) < 58) Then
  Begin   //0-9
    Result := Byte(A) - 48;
  End Else if (Byte(A) > 64) And (Byte(A) < 71) then
  Begin   //A-F
    Result := Byte(A) - 55;
  End Else if (Byte(A) > 96) And (Byte(A) < 103) then
  Begin  //a-f
    Result := Byte(A) - 87;
  End;               
End;

Function HexPower(X, Y:Integer):UInt64;
Var     //次方计算
  I :Integer;
Begin
  Result := X;
  for I := 1 to Y do
  Begin
    Result := Result * 16;
  End;
End;  

Function Hex2Int(HEX :PAnsiChar):UInt64;
Var   //十六进制字符串转整数
  iLen :Integer;
  I    :Integer;
Begin
  iLen  := StrLenA(HEX);
  Result:= 0;
  for I:= 0 to iLen-2 do
  Begin
    Result := Result + HexPower(Char2Int(HEX[I]), iLen - (I + 1)); 
  End;  
  Result := Result + Char2Int(HEX[iLen-1]);
End;




代码实例:

Var
  HEX  :Array [0..16] Of AnsiChar;
begin
  HEX  := '14f03'#$0;  
  Writeln(Hex2Int(@HEX));

  HEX  := 'FFFFFFFF'#$0;  
  Writeln(Hex2Int(@HEX));
  
  HEX  := 'FFFFFFFFFFFFFFFF'#$0;  
  Writeln(Hex2Int(@HEX));
  Readln;  
End.



运行结果:


Untitled.jpg/