Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос ИИ в IDA Pro

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
30 Окт 2025
Сообщения
8
Реакции
1
Как думаете, мусор или нет, может использовали уже, просто я вот для примера использовал codex и mcp сервер от mrexodia (ida-pro-mcp) для реверса лоадера hrisitosense чтобы попробывать чисто достать дллку, в итоге получилось, codex написал мини повершелл код для дампа -


code:
Expand Collapse Copy
$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"
}
 
Как думаете, мусор или нет, может использовали уже, просто я вот для примера использовал codex и mcp сервер от mrexodia (ida-pro-mcp) для реверса лоадера hrisitosense чтобы попробывать чисто достать дллку, в итоге получилось, codex написал мини повершелл код для дампа -


code:
Expand Collapse Copy
$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"
}
Давно думал о такой штуке,почему нету дизасемблеров с ИИ для вайб реверсеров, идея ахуенная,главное правильно реализовать.
 
АХХАХАХАХА бля не смешите меня, нейронки не могут отличить __thiscall от __fastcall от __vectorcall по прологу функции, куда там реверсить например какой то даже инлайн xor будет для них жопной болью :roflanEbalo:
я уже молчу о виртуализаци...
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Давно думал о такой штуке,почему нету дизасемблеров с ИИ для вайб реверсеров, идея ахуенная,главное правильно реализовать.
нет, идея хуёвая, так как нейронки зачастую не могут разобрать какие функции с чем взаимодействуют, а реверсить тот же лоадер с дллкой полному новичку будет адской болью, так что все дружненько открываем руководство по гидре/ида и сидим учим, вообще уже вайбкодеры ахуели


скоро начнете бунтовать "А ПАЧЕМУ ПО 1 ПРОМПТУ НЕ МОГУ ВЕСЬ ПРОЕКТ СРАЗУ СОЗДАТЬ НА 342734234827823 СТРОК?"
 
нет, идея хуёвая, так как нейронки зачастую не могут разобрать какие функции с чем взаимодействуют, а реверсить тот же лоадер с дллкой полному новичку будет адской болью, так что все дружненько открываем руководство по гидре/ида и сидим учим, вообще уже вайбкодеры ахуели


скоро начнете бунтовать "А ПАЧЕМУ ПО 1 ПРОМПТУ НЕ МОГУ ВЕСЬ ПРОЕКТ СРАЗУ СОЗДАТЬ НА 342734234827823 СТРОК?"
так вся их затея ломается условным затеранием хедера, рантайм патчем директ каллов нативных функций и каким то сискал диспатчиром :roflanEbalo:
или например не ребазнутый дамп:roflanEbalo:
 
нет, идея хуёвая, так как нейронки зачастую не могут разобрать какие функции с чем взаимодействуют, а реверсить тот же лоадер с дллкой полному новичку будет адской болью, так что все дружненько открываем руководство по гидре/ида и сидим учим, вообще уже вайбкодеры ахуели


скоро начнете бунтовать "А ПАЧЕМУ ПО 1 ПРОМПТУ НЕ МОГУ ВЕСЬ ПРОЕКТ СРАЗУ СОЗДАТЬ НА 342734234827823 СТРОК?"
1765432242713.png
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
наверное данную тему открывал какой нибудь майнкрафтер, только они способны пастить и пользоваться нейронкой одновременно, только по их мнению у них софт на вес золота

больше всего меня прикалывает то, что они свой софт собирают как какого нибудь робота, только все части они берут из других софтов, слитых сурсов, и по кусочкам получается однотонный говнопродукт без какой либо защиты, и тот самый школьник который сидел пастил ее целый месяц, побежит продавать ее за ебанные 400 рублей
 
наверное данную тему открывал какой нибудь майнкрафтер, только они способны пастить и пользоваться нейронкой одновременно, только по их мнению у них софт на вес золота

больше всего меня прикалывает то, что они свой софт собирают как какого нибудь робота, только все части они берут из других софтов, слитых сурсов, и по кусочкам получается однотонный говнопродукт без какой либо защиты, и тот самый школьник который сидел пастил ее целый месяц, побежит продавать ее за ебанные 400 рублей
Я особо щас в кубы не играю даже... Разве что своим сервером занимаюсь,а про продажу паст на майнкрафт даже речи и идти не может,мне это не интресно особо
 
Как думаете, мусор или нет, может использовали уже, просто я вот для примера использовал codex и mcp сервер от mrexodia (ida-pro-mcp) для реверса лоадера hrisitosense чтобы попробывать чисто достать дллку, в итоге получилось, codex написал мини повершелл код для дампа -


code:
Expand Collapse Copy
$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"
}
Без практических навыков в ревёрсе и понимании вообще как это работает тебе эта иишка ничем не поможет, потому что ты не знаешь что хочешь и не сможешь скорректировать её в случае чего, а она тупо не поймёт чё тебе надо от неё и начнёт просто творить, попутно смешивая ревёрс с нейрогалюнами.
 
АХХАХАХАХА бля не смешите меня, нейронки не могут отличить __thiscall от __fastcall от __vectorcall по прологу функции, куда там реверсить например какой то даже инлайн xor будет для них жопной болью :roflanEbalo:
я уже молчу о виртуализаци...

1. __thiscall
  • Для чего: Используется по умолчанию для методов классов в C++.
  • Главная фишка: Нужно передать указатель на сам объект (this).
  • Как работает (x86):
    • Указатель this кладется в регистр ECX.
    • Остальные аргументы идут в стек (справа налево).
    • Очистку стека делает вызываемая функция (callee).
  • Почему это важно: Если реверсер видит, что функция сразу лезет в ECX без инициализации — это почти наверняка метод класса C++.

2. __fastcall​

  • Для чего: Для ускорения вызова функций (передача через регистры быстрее, чем через память стека).
  • Главная фишка: Первые два аргумента — в регистрах.
  • Как работает (x86):
    • 1-й аргумент -> ECX.
    • 2-й аргумент -> EDX.
    • Остальные -> в стек.
    • Стек чистит вызываемая функция.
  • Нюанс: В именах функций часто добавляется символ @ (например, @FuncName@8).

3. __vectorcall​

  • Для чего: Для высокопроизводительных вычислений, математики, графики (SIMD, AVX). Появилось в Visual Studio 2013.
  • Главная фишка: Использование огромных векторных регистров (XMM/YMM) для передачи данных.
  • Как работает:
    • Если аргументы — это векторы (float, double, __m128 и т.д.), они передаются прямо в регистрах XMM0 — XMM5.
    • Это позволяет избежать копирования больших данных в стек и обратно.
    • Обычные целочисленные аргументы ведут себя как в fastcall/x64 конвенции.
 
1. __thiscall
  • Для чего: Используется по умолчанию для методов классов в C++.
  • Главная фишка: Нужно передать указатель на сам объект (this).
  • Как работает (x86):
    • Указатель this кладется в регистр ECX.
    • Остальные аргументы идут в стек (справа налево).
    • Очистку стека делает вызываемая функция (callee).
  • Почему это важно: Если реверсер видит, что функция сразу лезет в ECX без инициализации — это почти наверняка метод класса C++.

2. __fastcall​

  • Для чего: Для ускорения вызова функций (передача через регистры быстрее, чем через память стека).
  • Главная фишка: Первые два аргумента — в регистрах.
  • Как работает (x86):
    • 1-й аргумент -> ECX.
    • 2-й аргумент -> EDX.
    • Остальные -> в стек.
    • Стек чистит вызываемая функция.
  • Нюанс: В именах функций часто добавляется символ @ (например, @FuncName@8).

3. __vectorcall​

  • Для чего: Для высокопроизводительных вычислений, математики, графики (SIMD, AVX). Появилось в Visual Studio 2013.
  • Главная фишка: Использование огромных векторных регистров (XMM/YMM) для передачи данных.
  • Как работает:
    • Если аргументы — это векторы (float, double, __m128 и т.д.), они передаются прямо в регистрах XMM0 — XMM5.
    • Это позволяет избежать копирования больших данных в стек и обратно.
    • Обычные целочисленные аргументы ведут себя как в fastcall/x64 конвенции.
бля тип, выучи русский язык, потом отвечай на форуме. ну либо закончи школу я хз
 
Назад
Сверху Снизу