Конвертировать System.Int32 в System.UIntPtr - PullRequest
1 голос
/ 15 октября 2019

Я использую функцию P / Invoke в PowerShell для вызова функции Win32 VirtualProtectEx.

Для третьего параметра в качестве аргумента требуется указатель int без знака в соответствии с сигнатурой функции

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);

Но он возвращает

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

1 Ответ

0 голосов
/ 15 октября 2019

Используйте конструктор : [UIntPtr]::new($shellcode.Length).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...