Вопросы по Reverse-Engineering

вайега52

Налуашил состояние
Автор темы
Модератор
2,963
3,069
Доброго времени суток.
Тема для вопросов по Reverse-Engineering. Не привязывается к определенному языку программирования, среде выполнения кода или инструментам. Приветствуется лаконичность и точность при формулировке вопросов/ответов для большей читабельности.

Полезные ссылки:

 

stool

Известный
485
414
поддержу хорошую тему вопросами, которые бы, вероятно хотели бы задать новички:
- в чем польза и какой выгоды можно достичь при помощи реверса?
- с чего начать новичку? поясни за статический и динамический анализ\отладку, как ламеру понимать мнемоники, опкоды, инструкции?
- вм, пакеры, обфускация, антидебаггер, deadcode, jmp-хаос -- как бороться? что делать, если IDA отказывается анализировать код? поясни за EP, ручной анпакинг, борьбу с ксорами, итд

также хотел бы добавить немного материалов по теме, особенно связанных с приложениями на .NET:

 

вайега52

Налуашил состояние
Автор темы
Модератор
2,963
3,069
Писать свои программы и пытаться их взломать, анализировать, что во что превращается. Как вариант, можно так же пробовать взламывать чужие программы (легально), в виде крякми. В качестве какого-то входного видоса, могу это посоветовать (это не туториал, это скорее набор умных слов, которые ты должен сам освоить)
 
  • Нравится
Реакции: stool

copypaste_scripter

Известный
1,425
290
можно ли получить значении каких то переменных в игре elder scrolls online? я пробовал cheat engine и игра сразу вылетает (защита какая то), стоит таким заниматся дауну гавнокодеру или не справлюсь?

edit: ну верить или нет вам решать но я тупо делаю не вредительские не читерские скрипты, но на эту нет поддержки в самом игре которые сами разработчики предоставляют API
 

вайега52

Налуашил состояние
Автор темы
Модератор
2,963
3,069
можно ли получить значении каких то переменных в игре elder scrolls online? я пробовал cheat engine и игра сразу вылетает (защита какая то), стоит таким заниматся дауну гавнокодеру или не справлюсь?

edit: ну верить или нет вам решать но я тупо делаю не вредительские не читерские скрипты, но на эту нет поддержки в самом игре которые сами разработчики предоставляют API
Возможно, если процесс читенджина переименовать, то сработает
 

Kingfish

Известный
11
1
Добрый вечер, джентельмены.

Я пытаюсь сделать дамп игрового процесса с помощью Scylla в исследовательских целях. Для обхода защиты внедрил плагин ScyllaHide через x64dbg. Однако столкнулся с проблемой: как только в программе выбираю процесс игры (игра.exe), окно программы автоматически сворачивается. Я могу развернуть его, но через несколько секунд оно снова сворачивается. Несколько раз мне удавалось быстро нажать на кнопку “Dump” после выбора процесса, но каждый раз при этом возникает ошибка дампа.

Судя по всему, античит игры блокирует или скрывает окно, чтобы предотвратить создание дампа, и пока что обойти это не удалось.

Кто-нибудь сталкивался с подобным? Есть ли рабочие способы обойти такую защиту и успешно сделать дамп процесса?

Буду признателен за любую помощь или совет.

Добрый вечер, джентельмены.

Я пытаюсь сделать дамп игрового процесса с помощью Scylla в исследовательских целях. Для обхода защиты внедрил плагин ScyllaHide через x64dbg. Однако столкнулся с проблемой: как только в программе выбираю процесс игры (игра.exe), окно программы автоматически сворачивается. Я могу развернуть его, но через несколько секунд оно снова сворачивается. Несколько раз мне удавалось быстро нажать на кнопку “Dump” после выбора процесса, но каждый раз при этом возникает ошибка дампа.

Судя по всему, античит игры блокирует или скрывает окно, чтобы предотвратить создание дампа, и пока что обойти это не удалось.

Кто-нибудь сталкивался с подобным? Есть ли рабочие способы обойти такую защиту и успешно сделать дамп процесса?

Буду признателен за любую помощь или совет.
Сейчас не дома, но как только приеду — хочу попробовать еще несколько идей, которые пришли в голову:

1. Запустить процесс внутри виртуальной машины (VirtualBox или VMware), создать чистый снапшот до запуска, а затем приостановить ВМ сразу после старта — попробовать получить доступ к процессу до того, как включится защита. Не факт, что сработает, но попробовать стоит.

2. Сразу после запуска попробовать приостановить процесс через x64dbg или Process Hacker — это может временно заморозить защиту и даст возможность подключиться и сделать дамп. При необходимости использовать ручный маппинг через Scylla.

3. Настроить кастомный профиль ScyllaHide: замаскировать IsDebuggerPresent, перехватить NtQueryInformationProcess и возвращать false на отладочные запросы. Также важно, чтобы x64dbg был не просто с инжектом, а с полной интеграцией ScyllaHide при сборке.

4. Попробовать инструменты на уровне ядра — например, дамп физической памяти через HxD или подключение через WinDbg. Также можно использовать DumpIt для съёма всей памяти системы и потом вручную извлечь нужные участки из дампа.

5. Попытаться сделать дамп до запуска защиты — в момент загрузки исполняемого файла. Или использовать Image File Execution Options (IFEO), чтобы временно задержать или перенаправить запуск нужных компонентов.

Если ничего из этого не поможет — даже не знаю, что ещё можно сделать… но надежда умирает последней.
 
Последнее редактирование:
  • Нравится
Реакции: TheBadZero

clowlaw

Новичок
1
0
Доброго времени суток.
Тема для вопросов по Reverse-Engineering. Не привязывается к определенному языку программирования, среде выполнения кода или инструментам. Приветствуется лаконичность и точность при формулировке вопросов/ответов для большей читабельности.

Полезные ссылки:
link doesn't work
 
  • Эм
Реакции: zakatov

lixx77

Новичок
3
0
В ядре Windows есть системы защиты, такие как:PatchGuard, DSE.

PG — Следит за изменением кода на уровне ядра, в целом следит за целостностью ядра.
DSE же в свою очередь проверяет, имеет ли драйвер подпись, если нет — угроза для системы.
Но, DSE можно обойти путем скачивания чужого легального драйвера с подписью, и уже использовать его, так что по большей части мой вопрос будет про PG.

У меня есть свой, самонаписанный на ассемблере простой руткит.

Я вот думаю, могу ли я обойти PatchGuard.
Сперва были мысли просто попытаться отключить, но это вызвало бы KeBugCheckEx и я бы получил синий экран.

Моя цель проста: Обойти PatchGuard, пропатчить руткит в системный драйвер, в главную функцию DriverEntry, чтобы сначала начал работу руткит, а после уже сам системный драйвер.

Есть ли шанс того что в случае если не получится обойти PG, он не заметит что в главной функции драйвера вписано не то что он ожидает?
слышал, что чел один обошел. Надо что-то с таймингами колдовать, так как PG чекает память с определенной периодичностью.
 

swlm

Участник
46
15
Всем привет. Хочу поинтересоваться у знатоков/знающих, или у тех, у кого уже был такой опыт. Я хочу попробовать сделать переадресацию массивов из структур CVehiclePool на свои массивы, собственно, чтобы увеличить максимальное кол-во созданного транспорта на сервере.
Придумал два способа, но не знаю, правильные ли они.
- Перераспределение всех массивов внутри структуры CVehiclePool на свои массивы.
- Везде, где идёт обращение к оффсетам из структуры CVehiclePool заменять на свои смещения (смещения своих массивов)

Меня заинтересовал второй способ, ведь он более простой как мне кажется.

К примеру, есть вот эта инструкция:
asm:
.text:1000111E 8B 94 81 74 30 00 00                          mov     edx, [ecx+eax*4+3074h]
+3074h смещение к массиву m_bNotEmpty в структуре CVehiclePool
Так-вот, я могу просто пропатчить это смещение на своё? Или это не физический адрес массива, а просто смещение до массива в структуре?
Я уже пробовал патчить вот так, и у меня не получилось:
С++:
struct Entity
{
    char data[0x48];
};

struct CVector
{
    float x, y, z;
};

struct CVehicle
{
    Entity baseclass_0;
    void* m_pTrailer;
    void* m_pGameVehicle;
    int m_bEngineOn;
    int m_bIsLightSOn;
    int m_bItsInvulnerable;
    int pad_5c;
    int m_bIsLocked;
    bool m_bIsObjective;
    int m_bObjectiveHighCreated;
    int m_timesIncelastDriven;
    int m_DHasBeenDriven;
    int pad_71;
    int m_bEngineState;
    unsigned char m_nPrimaryColor;
    unsigned char m_nSecondaryColor;
    int m_DNeedsTolUpdateColor;
    int m_bUnoccupiedSync;
    int m_bRemoteUnocSync;
    int m_bKeepModelLoaded;
    int m_DHasSiren;
    void* m_pLicensePlate;
    char m_szlicensePlateText[33];
    int m_marker;
}; // sizeof = 0xB8

struct CustomVehicleArrays
{
    CVehicle* m_pObject[3000];
    int m_bNotEmpty[3000];
    void* m_pGameObject[3000];
    int pad_6ef4[3000];
    short m_nLastUndrivenId[3000];
    int m_lastUndrivenProcessTick[3000];
    int m_bIsActive[3000];
    int m_bIsDestroyed[3000];
    int m_tickWhenDestroyed[3000];
    CVector m_spawnedAt[3000];
};

CustomVehicleArrays g_customArrays;

uintptr_t sampModule = (uintptr_t)GetModuleHandle("samp.dll");
patch::SetPointer((uintptr_t)sampModule + 0x111E + 3, g_customArrays.m_bNotEmpty);
Подскажите правильный способ, пожалуйста.