Нужно обойти взаимоисключение(Mutex) в одной программе,а как это сделать не пойму. Программа при запуске создает мутекс,для того что бы не допустить запуска копии,а мне нужно как раз обойти этот мутекс. У кого какие мысли?
быстрый выход - открываешь бинарник проги хекс-редактором в поисках мютекса и меняешь произвольный байт в нем, все будет работать если незнаешь какой мютекс примерно - дизасм проги и близко от то4ки входа будут апи-функци работы с мютексами CreateMutex или 4ето в этом роде. далее нужно подменить переход на противоположный и все будет опять таки работать как надо
ProTeuS , а по подробнее? Просто апишку поменять? Или сделать так чтобы в участке кода где происходит мьютексование заменить джамп на другой апи?
я так понимаю, прога пытается создать именованый мютекс и проверяет получилось ли это. Пример из Рихтера Code: HANDLE hMutex = CreateMutex(&sa, FALSE, "JeffObj"); if (GetLastError() == ERROR_ALREADY_EXISTS) { // открыт описатель существующего объекта sa.lpSecurityDescriptor и второй параметр (FALSE) игнорируются } else { // создан совершенно новый объект sa.lpSecurityDescriptor и второй параметр (FALSE) используются при создании объекта } Ну и соответствено в проге будет реализован похожий алгоритм. И как сказал уже ProTeuS нужно изменить переход по if на обратный.
омфг, это ИДА? Я немогу ничего сказать без контекста ибо нуб пока ). перевыложи прогу, с ссылки сверху не скачать, посмотрю.
Code: .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 и обходим, таким образом, проверку мутекса на существование.
2neprovad объясни, если не трудно, как ты нашёл это место? меня вообще занесло в другой поток процесса. Там тоже мутная работа с мутексами шла ...
NeXArmAor ты что, ида или оля! винасм не понимает устарел уже давно, к тому же ида способна идентифицировать множество компиляторов
Когда речь идет о коде, следует приводить выдежки на асме. Увы, я не телепат и понять куда тебя занесло не в силах Могу отметить только, что при старте процесса CreateMutexA вызывался сначала дважды из какой-то библиотеки, что можно было определить по адресу возврата из стека (адрес не совпадал с адресами процесса основного) Третий вызов (пишу по памяти) был уже из нашего процесса и наличие неподалеку GetLastError лишь укрепило мои догадки что мы в нужном месте, ведь именно GetLastError и возвращает код ошибки о том что уже существует мутекс. Остальное дело техники
Запусти в оле, поставь бряк на CreateMutex, как ток брякнешся в основном потоке - нопишь (NOP) вызов, сохраняешь файл ..
3 push'a перед вызовом тоже нада занопить иначе стек не будет выровнен, и это черевато дальнейшими ошибками.
Еще один вопрос по этой программе у меня. В ней есть чат, и некоторые модеры там слишком наглые и банят всех кого не попадя. И бан там довольно своеобразный,программа запрещает писать сообщения. Так вот как обойти этот бан? Или же обойти его не получится? Банят на время,и когда бан есть,в анкете пользователя показывается таймер. Может быть этот таймер можно как нибудь обнулять?