Просмотр полной версии : Нужен качественный хелп :)
NeXArmAor
08.08.2008, 13:08
Нужно обойти взаимоисключение(Mutex) в одной программе,а как это сделать не пойму.
Программа при запуске создает мутекс,для того что бы не допустить запуска копии,а мне нужно как раз обойти этот мутекс. У кого какие мысли?
spider-intruder
08.08.2008, 13:28
Дай прогу посмотрим )
((Патчить софт можно?))
NeXArmAor
08.08.2008, 13:41
spider-intruder , ок. Тока прога весит немало. ВОт инсталлятор.
http://shareman.ru/SharemanSetup.exe
быстрый выход - открываешь бинарник проги хекс-редактором в поисках мютекса и меняешь произвольный байт в нем, все будет работать
если незнаешь какой мютекс примерно - дизасм проги и близко от то4ки входа будут апи-функци работы с мютексами CreateMutex или 4ето в этом роде. далее нужно подменить переход на противоположный и все будет опять таки работать как надо
NeXArmAor
08.08.2008, 13:54
ProTeuS , а по подробнее? Просто апишку поменять? Или сделать так чтобы в участке кода где происходит мьютексование заменить джамп на другой апи?
строку мьютекса подправь просто
NeXArmAor
08.08.2008, 14:06
А как ее узнать? Мне она неизвестна
я так понимаю, прога пытается создать именованый мютекс и проверяет получилось ли это.
Пример из Рихтера
HANDLE hMutex = CreateMutex(&sa, FALSE, "JeffObj");
if (GetLastError() == ERROR_ALREADY_EXISTS) {
// открыт описатель существующего объекта sa.lpSecurityDescriptor и второй параметр (FALSE) игнорируются
} else {
// создан совершенно новый объект sa.lpSecurityDescriptor и второй параметр (FALSE) используются при создании объекта
}
Ну и соответствено в проге будет реализован похожий алгоритм. И как сказал уже ProTeuS нужно изменить переход по if на обратный.
NeXArmAor
08.08.2008, 15:33
И как сказал уже ProTeuS нужно изменить переход по if на обратный
А как это осуществить?
NeXArmAor
08.08.2008, 15:44
http://img209.imageshack.us/img209/1975/screenup8.jpg
Вот участок кода отдизасменный,который создает мьютекс. Оно?
омфг, это ИДА? Я немогу ничего сказать без контекста ибо нуб пока ).
перевыложи прогу, с ссылки сверху не скачать, посмотрю.
NeXArmAor
08.08.2008, 16:17
Вот прога. 3 мб правда весит :) (http://webfile.ru/2146988)
neprovad
08.08.2008, 18:07
.text:0083923C E8 B7 F2 BC FF call CreateMutex
.text:00839241 A3 AC C3 86 00 mov ds:dword_86C3AC, eax
.text:00839246 83 3D AC C3 86 00+ cmp ds:dword_86C3AC, 0
.text:0083924D 74 79 jz short loc_8392C8
.text:0083924F E8 EC F3 BC FF call GetLastError_0
.text:00839254 85 C0 test eax, eax
.text:00839256 75 70 jnz short loc_8392C8
.text:00839258 8B 0D 88 56 86 00 mov ecx, off_865688
по адресу 0083924D меняем 74 79 на EB 09 и обходим, таким образом, проверку мутекса на существование.
NeXArmAor
08.08.2008, 18:45
neprovad, респект чел! Работает! ))))
2neprovad
объясни, если не трудно, как ты нашёл это место? меня вообще занесло в другой поток процесса. Там тоже мутная работа с мутексами шла ...
0verbreaK
08.08.2008, 20:21
NeXArmAor ты что, ида или оля! винасм не понимает устарел уже давно, к тому же ида способна идентифицировать множество компиляторов
neprovad
09.08.2008, 13:29
2neprovad
объясни, если не трудно, как ты нашёл это место? меня вообще занесло в другой поток процесса. Там тоже мутная работа с мутексами шла ...
Когда речь идет о коде, следует приводить выдежки на асме. Увы, я не телепат и понять куда тебя занесло не в силах :) Могу отметить только, что при старте процесса CreateMutexA вызывался сначала дважды из какой-то библиотеки, что можно было определить по адресу возврата из стека (адрес не совпадал с адресами процесса основного) Третий вызов (пишу по памяти) был уже из нашего процесса и наличие неподалеку GetLastError лишь укрепило мои догадки что мы в нужном месте, ведь именно GetLastError и возвращает код ошибки о том что уже существует мутекс. Остальное дело техники
BlackSun
09.08.2008, 14:19
2neprovad
объясни, если не трудно, как ты нашёл это место? меня вообще занесло в другой поток процесса. Там тоже мутная работа с мутексами шла ...
Запусти в оле, поставь бряк на CreateMutex, как ток брякнешся в основном потоке - нопишь (NOP) вызов, сохраняешь файл ..
Hellsp@wn
09.08.2008, 14:30
Запусти в оле, поставь бряк на CreateMutex, как ток брякнешся в основном потоке - нопишь (NOP) вызов, сохраняешь файл ..
3 push'a перед вызовом тоже нада занопить иначе стек не будет выровнен, и это
черевато дальнейшими ошибками.
NeXArmAor
10.08.2008, 14:52
Еще один вопрос по этой программе у меня. В ней есть чат, и некоторые модеры там слишком наглые и банят всех кого не попадя. И бан там довольно своеобразный,программа запрещает писать сообщения. Так вот как обойти этот бан? Или же обойти его не получится? Банят на время,и когда бан есть,в анкете пользователя показывается таймер. Может быть этот таймер можно как нибудь обнулять?
оперируй техни4еским языком, всем кто тут в разделе постит ни4его не говорят игровые термины 4аты, баны анкеты, то4но так же как никто не будет расбиратсья 4то за игры там у тебя и как 4то обходить. давай еще раз, напиши какой функционал есть в самой проге, каким образом реализован протокол общения с сервером нужной тебе функции (4ата) и как там бан реализовывается (если с серверной стророны, и если клиент коннектится к серверу, то ни4его сделать не выйдет априори)
NeXArmAor
10.08.2008, 15:45
Ну как я понял,там бан чисто программный,т.е при выдаче бана,тупо блокируется возможность писать в чате на определенное время,хотя хз. И Функционал там большой довольно.
neprovad
10.08.2008, 20:23
Для разнообразия попробуй самостоятельно сделать что-либо. Воспользуйся декомпилятором для Delphi - DeDe. Декомпилируешь и смотришь какие есть таймеры на форме чата. Обычно разработчики дают говорящие названия элементам форм хотя бывает и наооборот. Так вот, исследуешь все таймеры или один (как повезет) и бряк на обработчик (или на перекрестные ссылки, опять же как повезет), ждешь момента откуда оно вызывается ну и делаешь выводы.
Подводя итог - не надо ждать всегда готовых решений, покажи что сделано тобой самостоятельно.
Ну как я понял,там бан чисто программный,т.е при выдаче бана,тупо блокируется возможность писать в чате на определенное время,хотя хз. И Функционал там большой довольно.
проверить сможешь такой схемой, заодно и найти нужный код: находишь нужный обработ4ик. запускаешь или последовательно или паралельно 2 копии проги с двумя залогинеными аккаунтами, одним активным, другим - забаненым. трейсишь вглубь до тех пор, пока не заметишь разницы в прыжках и ходе алгоритма работы. на этом месте и будет код обработки бана(блокировки 4ат-сообщений), который нужно будет модицифировать для обхода бана
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot