Страница 3 из 24

Добавлено: Пн дек 18, 2006 3:19 am
Inik
Ты просто гениален. Даже не пытаясь понять мой пост.
Вообще то руро на мотре следит за тем чтобы не модифицировали клиент у него 2 екзешника (один дублирующий) + периодическая сверка чексуммы. и я писал "ну и самый главный косяк нуно модифицирования все сделать к норм виду( не всегда же через Олю пускать) ". В общем даже не знаю что о тебе и подумать :)
Да и прикольно ты мне кинул я так понял модификаю рагекзе даже не спрашивая версии екзешника? смело. Хотя может быть там и не меняли ничего:)

Добавлено: Пн дек 18, 2006 3:55 am
piroJOKE
Кстати о птичках... Господа, которые дружат с отладчиками, вопрос!
Как РО вообще определяет, что один его экземпляр уже запущен?

Добавлено: Пн дек 18, 2006 4:02 am
Inik
Эммм ну по мимо чисто эвристических методов типа создать левый ключик реестра во время запуска, стандартные функции( мб вызов не напрямую а через адресс в стеке) FindWindow*, zwQueryProccess( правда не разу не видел чтобы ктото кроме taskmanager юзал эту функцию, но все равно хук на нее весить нуно бп если скрыть себя хочешь). ну createmutex наверное относить нужно к эвристическим хз.
в общем способов вагон и тележка.

Добавлено: Пн дек 18, 2006 4:04 am
¤Seii¤
С помощь Process Explorer убиваем у процесса ruro.exe мьютекс \BaseNamedObjects\ruromutex1, а у процесса ragexe.exe убиваем мьютекс \BaseNamedObjects\Surface.

Потом запускалась вторая копия через виртуальный десктоп. Было это правда довольно давно уже -__- Полгода назад

Добавлено: Пн дек 18, 2006 4:05 am
piroJOKE
Inik
Дружище, извини, но я и сам знаю что "способов много". Меня интересуют конкретные наблюдения.

¤Seii¤
Што такое "мьютекс"? О_о И еще - какова роль виртуального дескопа в этой схеме?

Добавлено: Пн дек 18, 2006 4:08 am
Inik
piroJOKE ну я и написал что по моим наблюдениям дальше
call FindWindowA( call переменная содержащая адресс стека), call zwQueryProcess, createMutex(global = true) я не видел.
Ну кроме как специальных извров.

Добавлено: Пн дек 18, 2006 4:10 am
Inik
мьтекс - mutex - эмм ну это типа семафора но улучшеная вещь. как бы на пальцах объяснить : переменная позволяющая процессу(нити процееса) входить в секции кода, который система не может прервать обычнам способом.(очень грубо) Позволяет избежать одновременного доступа скажем к памяти на запись.

Добавлено: Пн дек 18, 2006 4:14 am
Inik
¤Seii¤ Хм а зачем виртуальный десктоп Оо это чтобы обойти FindWindow что-ли? и какой прогой ты вирт десктоп делаешь.
просто вмваркой какой-нить ппц же лаги:)

Добавлено: Пн дек 18, 2006 4:29 am
¤Seii¤
Inik, IBDesk юзал. Так вот я еще не все досказал. Запускать второе окно надо из копии директории РО. Руро при запуске создает временный файл для текущей сессии и не позволяет запуск второго. Новая папка с игрой позволяет делать обход этого при вышеописанных мной манипуляциях %)

Добавлено: Пн дек 18, 2006 4:36 am
Inik
Ну да про копию клиента я еще в первом посте написал, это понятно ибо он мутит с езешниками мама не горюй( судя по апи логерам)
ЗЫ а удалять мутексы у процесса это все-таки лол:) авось lock(mutex) не сделает:) кстати интересно как он себя тогда поведет :lol: Написать прогу чтоли для теста)

Добавлено: Пн дек 18, 2006 4:43 am
¤Seii¤
на каждый болт найдется своя хитрая гайка :crazy:

Добавлено: Пн дек 18, 2006 4:45 am
Inik
как говорится в сауз парке
За сегодня я понял очень важную вещь. Оказывается мутексы можно удалять с забавными последствиями.
Ну что прикольно фик ли. спасип за знание.

Добавлено: Пн дек 18, 2006 9:11 am
Jerry
о, чувак, ты шариш :)
Во-первых, распакуй руро, так удобнее :)
Во-вторых, поищи функцио MapFileAndChecksum, она проверяет контрольную сумму рагекзе, и не запускается если та неправильная. :) В-третьих, в-третьих... В руро есть такая штука как уникальный ID машины (это то, что изпользуется в @lock), как сам понимаешь, спалить два одинаковых ID в одно и то же время весьма просто :) НУ и в четвертых - не делай зумхак. Руро рапортукт о зумхаке на сервер :) Или отключи функцию проверки.

Добавлено: Пн дек 18, 2006 1:52 pm
Inik
1. вроде я когда распаковывал(на диск) он у меня не хотел запускатся, видимо он свой екзешник по длине смотрит или еще мутит что-то( не разобрался), я пока через Олю по старинке.
2. ну это просто bpx и все дела
3. хм, вот это уже интереснее, нуно подумать.
4. не решены пока что пункты 1,3 пока зумхак рано:)

Добавлено: Пн дек 18, 2006 2:33 pm
Jerry
1. проверяет :) Это место номер раз.
Ты чем распаковывал? Обычный распаковщик проде портит первую функцию в таблице импорта, нужно восстанавливать (должно быть Initчетотам) иначе оно крашится. Если педампом+импреком то не нужно.
2. это место номер 2.
Место номер 3 - это мьютекс в руро
Место номер 4 - это мьютекс в рагекзе.
Правишь в этих местах всякие jz на то что нужно - и будет тебе multiwin :)
4. Место номер пять - наделать всяких екзешников с разными ID :) это править десяток байт, mov [...], imm очень прекрасно влазит вместо того, чего там :) hint: GetVolumeInformationA

опционально можно пофиксить и проверку IsDebuggerPresent :)