首页
论坛
课程
招聘
[调试逆向] [原创]某南极动物厂新版XX分析——系统线程部分(新瓶旧酒)
2020-6-27 11:29 5492

[调试逆向] [原创]某南极动物厂新版XX分析——系统线程部分(新瓶旧酒)

2020-6-27 11:29
5492

这里分析的是6月18号的版本,由于某些原因这里隐去敏感内容


目前静态分析跟踪到7个系统线程创建,线程创建过程如下:


先判断hv是否存在


如果hv不存在则搜索SeSetAuditParameter中的FF E1特征码

根据如果成功搜索到上述fake thread entry则把线程入口指向上述entry,线程参数指向原真实线程入口(也就是rcx=真实线程入口,并且jmp rcx)

然后调用pscreatesysthrd创建系统线程


目前分析到的7个线程分别是:


CheckKSharedUserDataKdDebuggerEnabledThread

AntiKdDebuggerThread

CheckGameProcessDebuggedThread

CheckKeTimeAcceleratedThread

GameCommonCheckThread

sub_xxxxxxxx(作用不明,可能代码被注释或功能暂未实装)


CheckKSharedUserDataKdDebuggerEnabledThread:


判断KSHARED_USER_DATA->KdDebuggerEnabled & 1或 & 2 ?


每5秒检测一次,如果判断为true则蓝屏


AntiKdDebuggerThread:


如果系统版本大于等于win7则执行int2D指令触发SEH(由于静态分析无法分析SEH所以exception之后不知道发生了什么)

否则调用KdDisableDebugger

每5秒执行一次上述功能


CheckGameProcessDebuggedThread:


ExecuteForGameProcess(AntiProcessDebug);对所有受XX保护的GameProcess执行AntiProcessDebug回调


如果EPROCESS.DebugPort != 0则触发蓝屏


上述检测每10秒执行一次


CheckKeTimeAcceleratedThread:


检测系统时间是否被加速,导致KeDelayExecutionThread的等待时间结果跟HalQueryRealTimeClock时间差不一致



如果时间不一致:


如果某开关开启,则上报服务器,否则蓝屏


上述检测每1秒执行一次


GameCommonCheckThread:


检测cr4.tsd bit是否为1


如果为1:


如果某开关开启,则上报服务器,否则强制结束游戏(对g_game_process数组里的所有进程ZwTerminateProcess)


除此之外还对所有游戏进程检测SHARED_USER_DATA


ExecuteForGameProcess(CheckSharedUserData);


检测如下:



判断R3和R0的KSHARED_USER_DATA的物理地址是否一致


如果物理地址不一致:


如果某开关开启,则上报服务器,否则强制结束游戏


上述检测每10秒执行一次


AllProcessCommonCheckThread:

对PID为16~0x40000的所有进程枚举句柄表

如果句柄ObjectType==*PsProcessType且 拥有该句柄的进程不是受保护的游戏进程 且 进程句柄指向的进程是受保护的游戏进程

则进行句柄降权


遍历PID为16~0x40000的所有进程,遍历其内部的从8~0x2000的所有句柄,如果是SECTION类型且名称包含

L"\\TX_SSO_SHARE_INFO_SIZE"

L"\\TENPROTECT3_SHARE_DATA_"

L"\\TENPROTECT6_SHARE_DATA_"



如果该进程是受保护的游戏进程,则什么都不做


如果该进程不是受保护的游戏进程,且该进程仍然存活(未退出),则上报服务器


如果上述条件都不满足,则强制蓝屏


(猜测:此举可能是为了防止有人强制清空受保护的游戏数组g_game_process)


上述检测每10秒执行一次


[培训]12月3日2020京麒网络安全大会《物联网安全攻防实战》训练营,正在火热报名中!

收藏
点赞5
打赏
分享
最新回复 (25)
雪    币: 1250
活跃值: 活跃值 (267)
能力值: ( LV3,RANK:10 )
在线值:
发帖
回帖
粉丝
のばら 活跃值 2020-6-27 11:37
2
0
他强制蓝屏一直可以的
雪    币: 424
活跃值: 活跃值 (553)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
萌克力 活跃值 2020-6-27 17:10
3
0
UtilGetObjectType是怎么实现的呀
雪    币: 9193
活跃值: 活跃值 (1637)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
hzqst 活跃值 3 2020-6-27 18:46
4
0
萌克力 UtilGetObjectType是怎么实现的呀
if(g_pObGetObjectType) g_pObGetObjectType(Object)
雪    币: 5836
活跃值: 活跃值 (536)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
黑洛 活跃值 1 2020-6-27 18:58
5
0
他蓝屏真的有一手的
雪    币: 66
活跃值: 活跃值 (162)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmflxw 活跃值 2020-6-27 20:17
6
0
cr4.tsd bit   这个位表示什么含义?
雪    币: 1283
活跃值: 活跃值 (270)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
provence 活跃值 2020-6-27 21:16
7
0
表哥脱壳一直可以的
雪    币: 424
活跃值: 活跃值 (553)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
萌克力 活跃值 2020-6-27 21:57
8
0
hzqst if(g_pObGetObjectType) g_pObGetObjectType(Object)
感谢
雪    币: 1725
活跃值: 活跃值 (182)
能力值: ( LV3,RANK:32 )
在线值:
发帖
回帖
粉丝
蜜蜂啊 活跃值 2020-6-28 04:15
9
0
tmflxw cr4.tsd bit 这个位表示什么含义?
CR4.TSD
Time Stamp Disable (bit 2 of CR4) — Restricts the execution of the RDTSC instruction to procedures
running at privilege level 0 when set; allows RDTSC instruction to be executed at any privilege level when
clear. This bit also applies to the RDTSCP instruction if supported (if CPUID.80000001H:EDX[27] = 1).
雪    币: 1007
活跃值: 活跃值 (134)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hekes 活跃值 2020-6-28 06:24
10
0
mark
雪    币: 6116
活跃值: 活跃值 (264)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
万剑归宗 活跃值 1 2020-6-28 09:23
11
0
666
雪    币: 1283
活跃值: 活跃值 (270)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
provence 活跃值 2020-6-28 10:27
12
0
萌克力 感谢

能不能说下,更具体一点吗  还是不太懂那个UtilGetObjectType是怎么实现的呀

最后于 2020-6-28 10:28 被provence编辑 ,原因:
雪    币: 9193
活跃值: 活跃值 (1637)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
hzqst 活跃值 3 2020-6-28 11:36
13
0
provence 萌克力 感谢 能不能说下,更具体一点吗  还是不太懂那个UtilGetObjectType是怎么实现的呀
直接call ntoskrnl.ObGetObjectType
雪    币: 9193
活跃值: 活跃值 (1637)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
hzqst 活跃值 3 2020-6-28 11:36
14
0
provence 萌克力 感谢 能不能说下,更具体一点吗  还是不太懂那个UtilGetObjectType是怎么实现的呀
直接call ntoskrnl的ObGetObjectType
雪    币: 1283
活跃值: 活跃值 (270)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
provence 活跃值 2020-6-28 16:18
15
0
hzqst 直接call ntoskrnl的ObGetObjectType
谢谢大表哥
雪    币: 760
活跃值: 活跃值 (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whathhh 活跃值 2020-6-28 16:24
16
0
大表哥,再分析下反双机调试
雪    币: 641
活跃值: 活跃值 (120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mydvdf 活跃值 2020-6-29 09:05
17
0
大表哥牛皮
雪    币: 268
活跃值: 活跃值 (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wbflike 活跃值 2020-6-29 09:34
18
0
大表哥牛批 我的偶像大表哥。
雪    币: 456
活跃值: 活跃值 (102)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
青丝梦 活跃值 2020-6-29 10:00
19
0
表哥 牛逼 
雪    币: 222
活跃值: 活跃值 (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
唔Wydy 活跃值 2020-7-2 13:04
20
0
大表哥牛批
雪    币: 28
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shenyuming 活跃值 2020-7-3 14:57
21
0



这里应该是  检测KdDebuggerNotPresent   如果为0  触发int2D--> 则调用KdCommandString   参数deatch   强制分离调试器

雪    币: 170
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
星辰无大海 活跃值 2020-7-14 05:08
22
0
大佬  想向你请教一下  刚入门  需要怎么学习好点  望指点迷津,让孤独的道路不再迷茫
雪    币: 610
活跃值: 活跃值 (118)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
ugvjewxf 活跃值 2020-7-15 09:13
23
0
雪    币: 1438
活跃值: 活跃值 (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Mr.hack 活跃值 2020-7-21 19:35
24
0
很不巧,你就是记错了,r3模式的代码段选择子0x1b对应的描述符limit 是0xFFFFFFFF
游客
登录 | 注册 方可回帖
返回