Ребята, подскажите пожайлуста как можно убить счетчик таймера в программе. Вот костяк программы: Код (Text): 00411D79 MOV EAX, DWORD PTR DS:[515E0C] 00411D7E TEST EAX, EAX 00411D80 JE SHORT fxbox.00411D8B 00411D82 PUSH EAX ; /TimerID = 0 00411D83 PUSH 0 ; |hWnd = NULL 00411D85 CALL NEAR DWORD PTR DS:[<&USER32.Kill>; \KillTimer 00411D8B MOV EDX, DWORD PTR DS:[45BDE4] 00411D91 PUSH fxbox.00411B60 ; /Timerproc = fxbox.00411B60 00411D96 PUSH EDX ; |Timeout = 800. ms 00411D97 PUSH 0 ; |TimerID = 0 00411D99 PUSH 0 ; |hWnd = NULL 00411D9B CALL NEAR DWORD PTR DS:[<&USER32.SetT>; \SetTimer Менял: 00411D80 je 00411d8b на jne и jmp - не помогло. 00411D8B mov edx,dword ptr ds:[45bde4] на mov edx,0 - закрывается программа Нопил вызовы процедуры KillTimer и SetTimer - закрывается программа Подскажите что можно зделать И если можно опишите прощедуру работы таймера, читал KillTimer и SetTimer, так и не понял как его можно остановить.
123dragon понятно, если прога шатится, значит прога делает подсчёт контрольной суммы своего кода. По правилам, API SetTimer должна вернуть в eax код успешности вызова функции, тебе в данном случае его надо будет если нопами делать установить в eax самостоятельно. Другой вариант, найти код, который сверяет контрольную сумму по данному участку кода и поправить его как надо. Вариант три, горячий патч, после запуска программы, в том случае, если проверяется контрольная сумма самого exe-шника непосредственно в дисковом файле а не в памяти, если 3-е не так, то выполнить 2-е. Вот и всё
123dragon с jne/jmp и не должно помочь, mov edx, 0 - на байт короче, ты это учёл ? и 4 пуша перед вызовом SetTimer ты нопил ? А чтобы удалить существующий, нужно знать его id, который возвращает функция SetTimer. Передав этот id в функцию KillTimer ты его и уничтожишь.
значит проверки контрольной суммы нет но таким образом ты обходишь только kill timer, а settimer не обходишь длина команд разная и сбою программы стек разрушается, если ты не нопил push'ы товарищ Funbit всё верно сказал я бы процедуру таймера переписал 00411B60 RET 10h ; тут не уверен,но вроде 4*4 =16->коррекция 4 push да и всё или 00411D79 закодил jmp на после SetTimer
123dragon Что PUSH'и при этом коцать тоже надо, не забыл? А то при нарушении очередности покладывания/снятия со стека оно нередко примерно так и валится. Поробуй mov edx,АХРЕНЕТЬ_КАК_МНОГО (пары миллиардов миллисекунд, пожалуй, будет достаточно). Если проверка контрольной суммы - тогда BPM и давить ее, падлу!Но я бы прежде всего поковырял, что творится в процедуре, вызываемой по таймеру (конкретно - где там тикает западлянский счетчик). И вообще, почему этот банальный вопрос все еще у кого-то стоИт? Вроде в соответствующих главах "Теоретических основ..." я подобный вопрос и так уже разжевал до состояния невыносимой пошлости.
нет, это FXBOX, но там ограничения вроде такие же. С NOP`ами не прокатило,00411D79 закодил jmp на после SetTimer тоже,00411B60 RET 10h тоже. НО ВСЁ РАВНО ВСЕМ СПАСИБО!!! Все что хотел - узнал. Программа взломана WarrioR`ом (топ Cracklab). Тему закрываю