Indirect Syscalls


Posted Set 14, 2024. 1 min read


Indirect Syscalls

Neste projeto, eu apenas modifiquei o código que fiz no post Indirect-Syscalls. A diferença é que, na presença de um antivírus, é necessário realizar unhooking da ntdll, já que o antivírus realiza hooks nas APIs. Assim, o código não conseguirá obter o SSN correto, pois estará hooked pelo antivírus. Como realizar unhooking da ntdll pode ser mais barulhento, decidi obter o SSN de uma maneira bem simples.

1- Exemplo de hooks

Avast Premium


Avast


Malwarebytes Premium


MalwareBytes


Kaspersky


Kaspersky


Contra Avast/Malwarebytes



2- Exemplo de Hooks

Bitdefender


Bitdefender


Unhooked / hooked Bitdefender


unhooked-hooked


O que o código vai fazer

O código abaixo é usado para resolver o SSN que precisamos. O objetivo é encontrar o número correto para cada função. Dependendo da função, nós somamos ou subtraímos um número para chegar ao SSN certo.


code


Por exemplo verificamos se a função chamada é a NtOpenProcess. Se for, precisamos ajustar o SSN correto.
Para encontrar o SSN correto, pegamos o endereço da função ZwQueryInformationThread usando GetProcAddress.
Depois, somamos 1 a esse endereço. Por exemplo, se o SSN de ZwQueryInformationThread for 25,
resolvendo o SSN e somando +1, o SSN de NtOpenProcess será 26.
É importante garantir que a função ZwQueryInformationThread não esteja hookada.
Se ela estiver hookada, não conseguiremos obter o SSN correto.

Publiquei o código completo no meu GitHub.