eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: FOXHACKBOK, PEvgen (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Как подменить ClassName главного окна, в запускаемой из лоадера программы?
Посл.ответ Сообщение

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 13 июля 2017 02:00 New!
Цитата · Личное сообщение · #1

Попытался открыть RAM запущенной программы-жертвы в WinHex, надо-то было найти патерн и изменить его. Но защита программы спалила запуск WinHex-а и закрыла свою программу.
Выяснил, что запуск WinHex определяется защитой по Caption("WinHex") и по ClassName ("WHXMDI"). Если хоть один из этих параметров есть, то защита валит программу.
Хочу сделать лоадер под WinHex, на Делфи. Чтобы при запуске подменить Caption и ClassName.
С Caption, проблем нет:
Code:
  1. SetWindowText(FindWindow(nil, 'WinHex'), 'BinHex ');

А вот с ClassName, не знаю как это сделать.
Подскажите. пожалуйста, если кто знает решение.

Ранг: 127.6 (ветеран)
Статус: Участник

Создано: 13 июля 2017 08:50 New!
Цитата · Личное сообщение · #2

Вы конечно вольны выбирать любые способы усложнить себе жизнь достижения цели, но запатчить бинарь дело 2-5 минут...


Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 13 июля 2017 18:37 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #3

Ну такое я уже проделывал, хотелось-бы узнать метод не меняя сам EXE. Тоесть делать это с помощью лоадера, при запуске WinHex.
Я хотел сказать, хочется знать универсальный метод, без поиска паттернов, и чтоб подходил к любой версии программы, да и не только к WinHex.


Ранг: 292.6 (наставник)
Статус: Участник

Создано: 13 июля 2017 19:01 New!
Цитата · Личное сообщение · #4

Kuzya69

Давайте вместе подумаем. Вам нужно изменить некоторые параметры приложения. Очевидно что некоторые(текст) могут быть изменены в произвольный момент времени, некоторые не могут быть изменены(класс етц), так как к примеру свойства обьекта задаются при его создании.

Поэтому очевидно что параметры/свойства которые далее изменить нельзя должны быть заданы на том этапе работы апп, когда их возможно изменить. В данном случае это создание обьектов.
Как отловить это событие - мониторить вызов соотвествующего сервиса/апи. Как это сделать - зависит от конкретного тз.

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 13 июля 2017 19:41 New!
Цитата · Личное сообщение · #5

Как я понял, надо отлавливать момент создания структуры WNDCLASS, и после ее создания подменять переменную lpszClassName. Ну или отлавливать API RegisterClass, по ее параметру находить WNDCLASS, ну и так-же как в первом случае?

Ранг: 127.6 (ветеран)
Статус: Участник

Создано: 13 июля 2017 20:06 New!
Цитата · Личное сообщение · #6

Kuzya69, ну скриншот же


Ранг: 755.0 (! !)
Статус: Участник
Student

Создано: 14 июля 2017 10:17 New!
Цитата · Личное сообщение · #7

кто вообще додумался (и главное зачем) защищаться от WinHex?

Ранг: 127.6 (ветеран)
Статус: Участник

Создано: 14 июля 2017 10:56 · Поправил: VOLKOFF New!
Цитата · Личное сообщение · #8

Ну кому-то же пришло в голову
Kuzya69 пишет:
открыть RAM запущенной программы-жертвы в WinHex

они нашли друг друга

Ранг: 10.2 (новичок)
Статус: Участник

Создано: 14 июля 2017 11:17 New!
Цитата · Личное сообщение · #9

Элементарно через Loader:
1) Запускаем WinHex через CreateProcess с флагами NORMAL_PRIORITY_CLASS | CREATE_SUSPENDED.
2) Патчим нужное (как руками в HEX-редакторе, только в памяти) (VirtualProtectEx & WriteProcessMemory)
3) ResumeThread

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 14 июля 2017 13:00 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #10

Isaev пишет:
кто вообще додумался

Не знаю, протектор. RDGPackerDetector076 и ProtectionID685 молчат как партизаны. Но судя по тому что для предыдущих версий программы использовался VMProtect, то скорее всего и в этот раз он, родимый.
gajemuxi пишет:
Патчим нужное (как руками в HEX-редакторе, только в памяти

Не, это не мой метод, нужно научить лоадер самостоятельно находить имя класса.

Ранг: 127.6 (ветеран)
Статус: Участник

Создано: 14 июля 2017 14:19 New!
Цитата · Личное сообщение · #11

Уже многим походу интересно что это за аццкий такой софт?

Kuzya69 пишет:
нужно научить лоадер самостоятельно находить имя класса

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

Ранг: 160.9 (ветеран)
Статус: Участник

Создано: 14 июля 2017 14:57 New!
Цитата · Личное сообщение · #12

Kuzya69 пишет:
Не, это не мой метод, нужно научить лоадер самостоятельно находить имя класса.

Ну так хукай функции и обрабатывай.

Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 14 июля 2017 15:49 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #13

VOLKOFF пишет:
увидеть функцию, создающую окно и параметры, которые она принимает.

Так скорее всего, не создающую окно, а функцию, регистрирующую класс, надо хукать ?


Ранг: 292.6 (наставник)
Статус: Участник

Создано: 14 июля 2017 19:26 New!
Цитата · Личное сообщение · #14

Kuzya69

У вас не работает сеть или гугл..

--> Link <--

Первый аргумент. Есчо спросите какой нибудь бред.


Ранг: 296.9 (наставник)
Статус: Участник

Создано: 15 июля 2017 10:52 · Поправил: DenCoder New!
Цитата · Личное сообщение · #15

Kuzya69 пишет:
Так скорее всего, не создающую окно, а функцию, регистрирующую класс, надо хукать ?


Можно функу по ссылке difexacaw хукать, тогда надо класс подменять, свой создавать на обработке хука. Но перед нужно узнать значение атома, ведь регистрация класса окна возвращает его, чтобы передать в CreateWindowEx(A | W). Как узнать по атому название класса? Надо вызывать GetClassInfo/GetClassInfoEx. Хотя можно и по адресам возврата в стеке выявить, что именно то нужное окно вызывается.

А можно только RegisterClass(A | W)/RegisterClassEx(A | W) хукнуть, чтобы подменить название класса сразу и только.

| Сообщение посчитали полезным: Kuzya69


Ранг: 30.1 (посетитель)
Статус: Участник

Создано: 15 июля 2017 14:29 · Поправил: Kuzya69 New!
Цитата · Личное сообщение · #16

DenCoder пишет:
Можно функу по ссылке difexacaw хукать, тогда надо класс подменять, свой создавать на обработке хука.
.....
А можно только RegisterClass(A | W)/RegisterClassEx(A | W) хукнуть, чтобы подменить название класса сразу и только.

Ну, вот это я и пытался выяснить. Я никак не мог понять, как задать имя класса для функции CreateWindow, который еще не создан-зарегистрирован.


Ранг: 292.6 (наставник)
Статус: Участник

Создано: 15 июля 2017 15:47 New!
Цитата · Личное сообщение · #17

DenCoder

Для захвата кода через патч и восстановление нужен мотор. Причём который не кривой, а делает это синхронно. По данной причине, такое юзать не желательно, что бы не тягать с собой тяжёлые движки и лишний раз не палиться.

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

Ранг: 33.4 (посетитель)
Статус: Участник

Создано: 15 июля 2017 23:44 · Поправил: redlord New!
Цитата · Личное сообщение · #18

Kuzya69
рихтера + msdn читани, дебаггером походи
если не поможет - мотор клерка скомпЕлируй


Ранг: 296.9 (наставник)
Статус: Участник

Создано: 17 июля 2017 16:58 New!
Цитата · Личное сообщение · #19

difexacaw пишет:
Поставить HW точку останова на нужную функу, и обработать.


У каждого своё кунфу ) Но в данном случае для выполнения описанной задачи, в контексте желаемого тс достаточно джампов на чуть умелонаписанный "хэндлер" хуков

По универсальности - это как и пытались найти общий алгоритм решений диофантовых уравнений. Нет такого! - Это было доказано Матиясевичем в 1970 г. Также и вообще - нет универсального алгоритма и никогда не будет! К каждой задаче индивидуальный подход!
 eXeL@B —› Вопросы новичков —› Как подменить ClassName главного окна, в запускаемой из лоадера программы?

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS