В интернете я нашел плагин от mrexodia на ida (ida-pro-mcp)
Довольно хорошая вещь, для примера я взял лоадер кряка скита (hrisitosense)
В итоге что он сделал -
1. Пропатчил авторизацию, а точнее написал как лучше пропатчить с помощью MinHook
2. Сделал мини дампер длл файлов на powershell по адресам
3. Нашел ключи декодирования XOR, по которым в итоге достал длл (3 дллки) и декодировал их
с помощью данного скрипта я достал длл чита не имея сабки, эти длл лежали просто в лоадере, этот лоадер я смотрел с помощью ИИшки чисто для примера
Довольно хорошая вещь, для примера я взял лоадер кряка скита (hrisitosense)
В итоге что он сделал -
1. Пропатчил авторизацию, а точнее написал как лучше пропатчить с помощью MinHook
2. Сделал мини дампер длл файлов на powershell по адресам
3. Нашел ключи декодирования XOR, по которым в итоге достал длл (3 дллки) и декодировал их
C#:
# dump_payloads.ps1
$exe = "ddd.exe"
$base = 0x400000
$keySpecs = @(
@{va=0x48B640; size=0x63; xv=0xA5; off=0},
@{va=0x48B5C0; size=0x7E; xv=0x12; off=163},
@{va=0x48B580; size=0x40; xv=0xF9; off=520},
@{va=0x48B360; size=0x9E; xv=0x5A; off=584},
@{va=0x48B400; size=0xE7; xv=0xBA; off=289},
@{va=0x48B4E8; size=0x92; xv=0x39; off=742},
@{va=0x48B6A8; size=0x88; xv=0x24; off=888},
@{va=0x48B730; size=0x40; xv=0x1B; off=99}
)
$payloads = @(
@{va=0x176FB20; size=0xB600; out="payload1.dll"},
@{va=0x58D720; size=0xD37200; out="payload2.dll"},
@{va=0x12C4920; size=0x4AB200; out="payload3.dll"}
)
[byte[]]$bytes = [System.IO.File]::ReadAllBytes($exe)
function Get-Sections {
param([byte[]]$data)
$e_lfanew = [BitConverter]::ToUInt32($data, 0x3C)
$numSec = [BitConverter]::ToUInt16($data, $e_lfanew + 6)
$optSize = [BitConverter]::ToUInt16($data, $e_lfanew + 20)
$secBase = $e_lfanew + 24 + $optSize
$secs = @()
for ($i=0; $i -lt $numSec; $i++) {
$off = $secBase + 40*$i
$virtSize = [BitConverter]::ToUInt32($data, $off+8)
$virtAddr = [BitConverter]::ToUInt32($data, $off+12)
$rawSize = [BitConverter]::ToUInt32($data, $off+16)
$rawPtr = [BitConverter]::ToUInt32($data, $off+20)
$secs += @{va=$virtAddr; vs=$virtSize; rp=$rawPtr; rs=$rawSize}
}
return $secs
}
function Va-ToRaw {
param([UInt32]$va, [UInt32]$size, $sections)
$rva = $va - $base
foreach ($s in $sections) {
if ($rva -ge $s.va -and $rva -lt ($s.va + $s.vs)) {
$off = $s.rp + ($rva - $s.va)
return [pscustomobject]@{Off=[int]$off; Size=[int]$size}
}
}
throw "RVA not in sections: $(('{0:X}' -f $va))"
}
$sections = Get-Sections -data $bytes
$key = New-Object byte[] 1024
foreach ($k in $keySpecs) {
$map = Va-ToRaw $k.va $k.size $sections
$off = $map.Off; $sz = $map.Size
for ($i=0; $i -lt $sz; $i++) {
$b = [int]$bytes[$off + $i]
$key[$k.off + $i] = [byte]($b -bxor [int]$k.xv)
}
}
foreach ($p in $payloads) {
$map = Va-ToRaw $p.va $p.size $sections
$off = $map.Off; $sz = $map.Size
$out = New-Object byte[] $sz
for ($i=0; $i -lt $sz; $i++) {
$b = [int]$bytes[$off + $i]
$out[$i] = [byte]($b -bxor [int]$key[$i % 1024])
}
[IO.File]::WriteAllBytes($p.out, $out)
Write-Host "$($p.out) dumped"
}
с помощью данного скрипта я достал длл чита не имея сабки, эти длл лежали просто в лоадере, этот лоадер я смотрел с помощью ИИшки чисто для примера
Последнее редактирование: