ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Race condition via anti-anti-debug tool bypass (https://forum.antichat.xyz/showthread.php?t=1467772)

Ahora57 11.02.2023 22:12

Всем привет.

Помимо обычным злоупотреблением багов для обхода anti-anti-debug tool можно просто использовать состояние гонки, чтобы просто обойти их!

Объяснение:

Многие anti-anti-debug tool's вызывают оригинальную функцию и потом с ней что-то делают.

Вот пример кода TitanHide с ProcessDebugPort:

Цитата:

Сообщение от Спойлер


C++:





Код:

static
NTSTATUS NTAPI
HookNtQueryInformationProcess
(
IN HANDLE ProcessHandle
,
IN PROCESSINFOCLASS ProcessInformationClass
,
OUT PVOID ProcessInformation
,
IN ULONG ProcessInformationLength
,
OUT PULONG ReturnLength
)
{
NTSTATUS ret
=
Undocumented
::
NtQueryInformationProcess
(
ProcessHandle
,
ProcessInformationClass
,
ProcessInformation
,
ProcessInformationLength
,
ReturnLength
)
;
{
if
(
NT_SUCCESS
(
ret
)
&&
ProcessInformation
&&
ProcessInformationClass
!=
ProcessBasicInformation
)
//prevent stack overflow
{
else
if
(
ProcessInformationClass
==
ProcessDebugPort
)
{
if
(
Hider
::
IsHidden
(
pid
,
HideProcessDebugPort
)
)
{
Log
(
"[TITANHIDE] ProcessDebugPort by %d\r\n"
,
pid
)
;
__try
{
BACKUP_RETURNLENGTH
(
)
;
*
(
ULONG_PTR
*
)
ProcessInformation
=
0
;
RESTORE_RETURNLENGTH
(
)
;
}
__except
(
EXCEPTION_EXECUTE_HANDLER
)
{
ret
=
GetExceptionCode
(
)
;
}
}
}
}
}
return
ret
;
}




Однако, есть маленький промежуток времени, благодаря которому мы может просто узнать реальный результат функции и мы злоупотребляем этим!

Единственное требование и недостаток :создать поток/потоки, постоянно вызывать функцию и смотреть был ли изменён наш входной буфер на интересующий нас результат.

Пример обнаружение TitanHide(DebugPort & HideThreadHideFromDebugger):

Code


Время: 06:50