
Windows を標的としたカスタマイズ可能なドロッパーツール。
欠点: スレッドが再開されると、イベントロガーの一時停止中に発生したすべてのイベントが再度ログに記録されます。
そこで、代わりにそれらを殺すことを考えました!
「中断よりも侵襲的ですが、判断は常にオペレーター次第です。それに、スレッドの殺害はカーネルレベルでログに記録されます」 - @SEKTOR7net
Directly via VS compiler:


./compile.bat
PS C:> .\x64\Release\indirect.exe
[!] Wrong!
[->] Syntax: .\x64\Release\indirect.exe <PPID to spoof>
https://github.com/reveng007/DarkWidow/assets/61424547/62a90c5b-84af-4389-8ddc-9f7926debdcf

TIB:
GSおよびFSレジスタ:
PEB LDR構造:
BlackHat - What Malware Authors Don't Want You to Know - Evasive Hollow Process Injection by @monnappa22
上記リンクからのプロセスメモリの画像:

labs.cognisys.group、@D1rkMtr のブログより:

TIB -> TEB -> PEB -> Nt APIの解決とAPIハッシュ化
https://stackoverflow.com/questions/41277888/iterating-over-peb-dllname-shows-only-exe-name
https://doxygen.reactos.org/d7/d55/ldrapi_8c_source.html#l01124
labs.cognisys.group、@D1rkMtr のブログより
上記リンクからのスニペット画像(オフセットをハードコーディングせずにAPIを動的に解決するためにここで使用):

適用したAPIハッシュ化コード:
#include <stdint.h>
#include <stdio.h>
#include <Windows.h>
DWORD64 djb2(const char* str)
{
DWORD64 dwHash = 0x7734773477347734;
int c;
while (c = *str++)
dwHash = ((dwHash << 0x5) + dwHash) + c;
return dwHash;
}
int main(int argc, char** argv)
{
if (argc < 2)
{
printf("[!] Wrong!\n");
printf("[->] Syntax: .\\%s <NTFuncName>\n\n", argv[0]);
return 1;
}
const char* string = argv[1];
DWORD64 hashvalue = djb2(string);
printf("Hash Value: 0x%llX\n", hashvalue);
return 0;
}
ACG(任意コードガード)/BlockDll緩和ポリシー:

PPIDスプーフィング検出:
Moneta検出とPESieve検出:\
Moneta:

PESieve:

Capaスキャン:

インプラントプロセスのスレッドスタックの見え方:
| インプラントプロセス | 正規のCmdプロセス |
|---|---|
![]() | ![]() |
間接システムコールPOCでntdll.dllのメモリ内でreturn命令を実行することにより、リターンアドレスを正常にスプーフィングでき、ntdll.dllをコールスタックの最上部に配置し、EDRに高い正当性と解釈させることができます。 - @VirtualAllocEx の DirectSyscall Vs Indirect Syscall より
また、@peterwintrsmith に感謝!


先:
