Если у тебя без дебагера лоадер работает исправно,а под дебагером выдает exception то вывод один тебя детектит.Нужно протрасировать код и посмотреть почему это происходит.Самый простой пример это IsDebuggerPresent(тебя так детектит не может потому что у тебя титанхайд но просто как пример).Вот так будет выглядить ассемблерный код к примеру(если нету виртуализации и других методов обфускации).
call IsDebuggerPresent
cmp eax,1
jne label
ExitProcess
label:
продолжает выполнение
В случае если дебагер обнаружен IsDebuggerPresent вернет 1.Дальше cmp,eax 1 установит ZF флаг в 1 и прыжок JNE не совершится так как ZF = 1,и у тебя закроется процесс(как пример он может выдавать исключение как у тебя).Твоя задача пропатчить чтобы jne всегда совершал прыжок поэтому ты меняешь jne на jmp и получается следующий код
call IsDebuggerPresent
cmp eax,1
jmp label//процесс всегда продолжит выполнение и не выдаст ни искдючения не закроет его как в данном случае.
ExitProcess
label:
продолжает выполнение.
Это самый простой пример ,и точно это не тот пример который подходит под твой случай(у тебя титанхайд законтрит это).Но суть такая же.Если там вмпротект или темида то все намгого усложняется.Вот как то так ,но ты должен найти эту функцию или шеллкод который детектит тебя.