今天又是emo的一天
竞赛官网
![](upload/attach/202404/878559_BZC8SYJFHYVAPNA.webp)
![](upload/attach/202404/878559_HSYV4M5DGNW5N6Z.webp)
![](upload/attach/202404/878559_5SDYV5KK942AY9G.webp)
沙箱分析hack.exe,有WriteProcessMemory,创建shellcode,PE文件.注入器八九不离十
![](upload/attach/202404/878559_YH4VRQDNWNY5E4X.webp)
hook NtWriteVirtualMemory以及CreateRemoteThread
![](upload/attach/202404/878559_DJGF4J53EB27UCW.webp)
![](upload/attach/202404/878559_TTZD84YWQ34ACEE.webp)
随坤找个宿主写入shellcode启动远线程把dll射进去,如果宿主进程意外去世,会重新物色一个继续射
远线程参数结构
shellcode base
操作完之后会把这块结构上的内存包括写入0x00-0xff的
![](upload/attach/202404/878559_2Q7MCAMHMW22CZW.webp)
启动远线程时直接把dll dump下来
![](upload/attach/202404/878559_EK83VKY4NE8HW3X.webp)
这里值得注意的是CreateFileA参数dwCreationDisposition == OPEN_EXISTING 修改为CREATE_ALWAYS即可写出文件得到token1,或者手动创建2024GameSafeRace.token1也会自动写入
在R3的调试中开启知名调试工具,如果没加载驱动,
![图片描述](upload/attach/202404/878559_Y43YUVCFF7UJZ4Z.webp)
如果加载了驱动直接蓝精灵 0xACE
然而它的驱动返回值为31,不是正常的返回值,这就说明无模块驱动,大概率可能就是有线程或者hook等等.题中是启动了一个线程
![图片描述](upload/attach/202404/878559_JGUSPUHU52NZC57.webp)
直接跳到入口看看
![图片描述](upload/attach/202404/878559_TNM7KCGBC7PZUDX.webp)
调用DbgPrintEx
![图片描述](upload/attach/202404/878559_7W5UEF3DBSMWEMW.webp)
token 就是它了
![图片描述](upload/attach/202404/878559_N6V6Y7H2RVDTN5U.webp)
![图片描述](upload/attach/202404/878559_BS75HCGBEU57569.webp)
大概就是这样
![图片描述](upload/attach/202404/878559_N5VC4NQRU84RDNQ.webp)
但是在windbg上面是没有输出的,这里值得注意的是DbgPrintEx参数Level = 5,直接改成0,windbg即可输出。或者打开DbgView也会直接输出,这是因为DbgPrintEx会进行一些判断
![图片描述](upload/attach/202404/878559_XVFN3P6BYSVYCTD.webp)
其中v2==Level ,v3 == ComponentId
Dbgview开启时写入KdComponentTable[ComponentId] = 0x3fffffff
关闭时还原为1,题中ComponentId = 0,那我们直接写index=0的就好
![图片描述](upload/attach/202404/878559_8Z3HYY8JTUA6Z26.webp)
token1:757F4749AEBB1891EF5AC2A9B5439CEA
token2:8b3f14a24d64f3e697957c252e3a5686
Struct
{
ULONG64 ShellcodeBase;
/
/
shellcode
ULONG64 HackDll;
/
/
PE文件
ULONG32 Size;
}
Struct
{
ULONG64 ShellcodeBase;
/
/
shellcode
ULONG64 HackDll;
/
/
PE文件
ULONG32 Size;
}
short token[
16
];
while
(
1
)
{
DbgPrintEx(
0
,
5
,
"token:"
);
for
(
int
i
=
0
; i <
16
;
+
+
i)
{
DbgPrintEx(
0
,
5
,
"%02x"
,token[i]);
}
LARGE_INTEGER timeout
=
{
0
};
time.QuadPart
=
-
10000
*
0xACE
;
KeDelayExecutionThread(KernelMode, FALSE, &time);
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课