Проблема в функции removeType
состоит в том, что вы не попадаете в тело if (isTag)
, когда вы только что проанализировали <
. Так что этот символ останется видимым до следующего таймера.
Исправьте это, изменив это условие if
на:
if (isTag || char === '<')
Не связано, но вы также должны изменить:
if(text == 0){
.... потому что это условие никогда не будет true (если только первый символ вашего полного текста не равен «0»). Измените его на:
if (!text.length){
Это не Открытый исходный код, но кроме того, что OllyDbg мог бы быть тем, что Вы ищете. Другие полезные инструменты и информация могут быть найдены на www.openrce.org.
Это, вероятно, использует отладку API и помещает рычаги отладки в ключевых пунктах в приложении к захватить события. Можно даже смочь сделать то, что Вы хотите использовать ollydbg.
Править: Я просто посмотрел на сайт и посмотрел демонстрационные видео, и я скажу, что они почти наверняка делают это посредством отладки API. Они, вероятно, помещают точки останова в цель в желаемых функциональных точках входа. Когда событие прерывания стреляет, похоже, что они используют вызов RPC, чтобы уведомить пользователя их API и позволить им смотреть на то, что произошло, и потенциально измените некоторые вещи. Передача обратно, что сделать затем также в вызове RPC. Хороший дизайн, но просто прославленный отладчик.
Можно использовать Deviare от той же компании, это разработало SpyStudio. Это позволяет Вам сцепить COM-интерфейсы. SpyStudio использует этот API для функций монитора. Это имеет базу данных типов, которая позволяет Вам получить/установить значения параметров любого типа.
Можно посмотреть на библиотеку Detours от Microsoft Research. Это - универсальная библиотека API Hooking.
Основное использование WinAPIOverride32 - мониторинг / регистрация вызовов функций других процессов. Он также имеет подключаемый модуль, так что вы можете написать свой собственный обработчик ловушек. И это открытый исходный код (GPL).