如何不加载 NTDLL 不读取 PEB 获取 SSN

一句话概括

“An easy way to get syscall indices, even if AV overwrites them, … simply enumerate all Zw* stubs and then sort them by address.”

翻译

通过获取 TEB 得到 PEB,然后找到 Ntdll,通过解析 EAT 找到所有 Zw 开头的函数,然后按地址排序

介绍

本来我是打算自己实现这个的,但是刚写个开头,然后发现 github 已经有老哥用 nim 写过了,直接拿来用。

NimWhispers

使用

参考 README.md

1
python3 nimwhispers.py -o nimwhispers -f NtOpenProcess,NtAllocateVirtualMemory,NtWriteVirtualMemory,NtProtectVirtualMemory,NtCreateThreadEx

这样就会在 out 里面生成一个 nim 文件

然后直接在你的项目里 import 后调用 Nt 函数就行了

实战

1
2
3
4
5
6
7
8
import winim
import osproc
import os
import base64
import sortcall

proc injectCreateRemoteThread(shellcode: openArray[byte]): HANDLE =
......

大致就这样的一个文件,这个马是远程注入的

然后生成 msf shellcode 的弹窗,简单加个编码 x64/xor_dynamic ​和 base64 编码一下

加进去之后呢,通过下面的命令在 windows 生成木马

1
nim c --app:gui -d:noRes test.nim

丢到装 360 的机器上运行

image

image


Bypassing User-Mode Hooks and Direct Invocation of System Calls for Red Teams