-
-
[原创]逆向分析某VT加持的三角洲行动外挂
-
发表于:
2025-3-26 08:03
4298
-
最近无意间打开之前的虚拟机,发现有个外挂。才想起来之前因为太忙给忘记了。


首先感谢Rog的大力支持
ROG!!!!!!一瞬间想到了[原创]逆向分析某VT加持的无畏契约纯内核挂
不会是之前ROG逆过之后又来三角洲起个名字ROG名字吧。哈哈哈。那么就直接用ROG打败ROG。call ROG
现在都直接让用户自己加载驱动了吗?太卷了,随便在C盘整个卡密,直接加载驱动,老规矩,先dump。go go


mapper,删除自身。记录那些都不用看,基本就是清理三件套
既然验证在内核上面,会访问“C:\1.txt”。直接inline hook NtReadFile


随便搜了下字符串即可看到。xrefs一下





这不是hv吗。clone一份hv编译合并下pdb。除key以外完全一模一样,logger都不带删的


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | NtProtectVirtualMemory
NtAllocateVirtualMemory
NtQueryInformationProcess
NtQuerySystemInformation
IopLoadDriverImage
NtMapViewOfSection
NtOpenSection
NtClose
NtDebugActiveProcess
NtDeviceIoControlFile
NtQueryValueKey
MmCopyMemory
MmMapIoSpace
NtCreateSection
MmGetPhysicalAddress
RtlWalkFrameChain
PsLookupProcessByProcessId
MmAllocateIndependentPages
MmFreeIndependentPages
MmCreateKernelStack
MmDeleteKernelStack
PspExitProcess
KiPreprocessFault
MouseClassServiceCallback
gafAsyncKeyState
gptCursorAsync
|
还有一些WSK相关的和其它的懒得贴了


分析前面的时候看到一些地址大概都在FFFF9D8100000000开始,IDA直接搜索
随便挑了一个0FFFF9D819186E000h 跳过去看一下。直接和去年腾讯游戏安全的一模一样

1 2 3 4 5 6 7 8 | oMouseClassServiceCallback
oPsLookupProcessByProcessId
oKiPreprocessFault
oPspExitProcess
oRtlWalkFrameChain
oMmCopyMemory
oNtCreateSection
oIopLoadDriverImage
|
初步怀疑就是抄的同一份
大致hook了KiPreprocessFault,MmCopyMemory,ZwMapViewOfSection,PspExitProcess
RtlWalkFrameChain怎么相比之前的还变少了。
一模一样

游戏退出 移除EptHook

同样判断当前mapper驱动和自己存放链表的数据范围

flags != MM_COPY_MEMORY_PHYSICAL 时并且在当前mapper驱动和自己存放链表的数据范围内return STATUS_SUCCESS


这部分被VM了 大概猜测就是游戏启动初始化hook 游戏的一些hook

无痕断点 dwm进程NtGdiDdDDIGetDeviceState保证自己在dwm上下文
内核DWM的具体分析参考 [原创]记一次仿写一个内核DWM绘制

初始化ImGui和DircetX相关的。FindDWMSwapChain




截断的部分

其中的用户模式调用类似DoubleCallBack

KiCallUserMode相比DoubleCallBack的基本一比一ntoskrnl的

因为没有卡密登录不了,所以不知道有什么功能,所以逆了下菜单。
上来就是字符串加密,写个简单脚本解密下


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | xor_key = 0x9DFE2A8A2F8FCF2C
en_str = [
0x756EB06300DC8165 ,
0x873CF16A06740BB ,
0xB18B202C9BE8977 ,
0xC071966F8E2729BB ,
]
for i in range ( len (en_str)):
en_str[i] ^ = xor_key
print ( "Decrypted values:" )
for i, value in enumerate (en_str):
print (f "en_str[{i}] = 0x{value:X}" )
byte_data = b""
for value in en_str:
byte_data + = value.to_bytes( 8 , byteorder = "little" )
try :
utf8_string = byte_data.decode( "utf-8" )
print ( "Decrypted string (UTF-8):" )
print (utf8_string)
except UnicodeDecodeError:
print ( "Failed to decode as UTF-8. Raw bytes:" )
print (byte_data)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | INS / 隐藏菜单[F1战斗模式]
[透视设置]
显示骨架
显示血量
显示方框
显示射线
显示昵称
显示人机
[物品设置]
基本就是品质过滤
[瞄准设置]
子弹追踪
障碍判断
漏打
调试信息
|
外挂的功能大概就这些
Hook游戏,获取关键数据。由于我自己电脑没有游戏,所有没有分析具体是什么

判断数据是否有效

寻找到人物以及物品的StaticClass并且从数组中过滤出来


Skeletal

漏打部分直接调用游戏LineTraceSingle自瞄算法大手子写法


一句话概括就是大杂烩,而且四不像。各种抄,VT照搬hv,内核DWM没有解决桌面分辨率改变失效问题(估计也没能力解决)。给我的感觉就是啥都会点儿。对比之前的就改了下hook点,字符串加密,初始化和机器码部分加了VMP,不再有任何R3的可执行文件。
最后说一句,收手吧阿祖们,外面全是ACE。
[注意]看雪招聘,专注安全领域的专业人才平台!
最后于 2025-3-26 08:08
被thisif编辑
,原因: