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
Malwarebytes Premium
Kaspersky
Contra Avast/Malwarebytes
2- Exemplo de Hooks
Bitdefender
Unhooked / hooked Bitdefender
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.
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.