将 System.Int32 转换为 System.UIntPtr
Convert System.Int32 to System.UIntPtr
我正在使用 PowerShell 中的 P/Invoke 功能来调用 Win32 VirtualProtectEx
函数。
根据函数签名,对于第三个参数,它需要一个无符号整型指针作为参数
static extern bool VirtualProtectEx(IntPtr hProcess, IntPtr lpAddress,
UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
.
虽然我有一个名为 $shellcode
的变量,但我想将其写入某个内存地址,因此我需要保留 $shellcode.Length
字节。我不知道该把谁投给指针。我已经试过了
[System.UIntPtr]$shellcode.Length
# Set memory for shellcode to Execute and Read
$oldProtect = 0
$procHandle.GetType().fullname
$basePtr.GetType().fullname
$shellcode.Length.GetType().fullname
$PAGE_EXECUTE_READWRITE.GetType().fullname
$oldProtect.GetType().fullname
$result = $Kernel32::VirtualProtectEx($procHandle, $basePtr, $shellcode.Length, $PAGE_EXECUTE_READ, [ref] $oldProtect);
但是returns
System.IntPtr
System.IntPtr
System.Int32
System.Int32
System.Int32
Cannot convert argument "dwSize", with value: "168", for "VirtualProtectEx" to type
"System.UIntPtr": "Cannot convert the "168" value of type "System.Int32" to type
"System.UIntPtr"."
At C:\Users\Admin\Desktop\malware.ps1:59 char:1
+ $result = $Kernel32::VirtualProtectEx($procHandle, $basePtr, $shellco ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
使用 constructor: [UIntPtr]::new($shellcode.Length)
.
我正在使用 PowerShell 中的 P/Invoke 功能来调用 Win32 VirtualProtectEx
函数。
根据函数签名,对于第三个参数,它需要一个无符号整型指针作为参数
static extern bool VirtualProtectEx(IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
.
虽然我有一个名为 $shellcode
的变量,但我想将其写入某个内存地址,因此我需要保留 $shellcode.Length
字节。我不知道该把谁投给指针。我已经试过了
[System.UIntPtr]$shellcode.Length
# Set memory for shellcode to Execute and Read
$oldProtect = 0
$procHandle.GetType().fullname
$basePtr.GetType().fullname
$shellcode.Length.GetType().fullname
$PAGE_EXECUTE_READWRITE.GetType().fullname
$oldProtect.GetType().fullname
$result = $Kernel32::VirtualProtectEx($procHandle, $basePtr, $shellcode.Length, $PAGE_EXECUTE_READ, [ref] $oldProtect);
但是returns
System.IntPtr
System.IntPtr
System.Int32
System.Int32
System.Int32
Cannot convert argument "dwSize", with value: "168", for "VirtualProtectEx" to type
"System.UIntPtr": "Cannot convert the "168" value of type "System.Int32" to type
"System.UIntPtr"."
At C:\Users\Admin\Desktop\malware.ps1:59 char:1
+ $result = $Kernel32::VirtualProtectEx($procHandle, $basePtr, $shellco ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
使用 constructor: [UIntPtr]::new($shellcode.Length)
.