首页
社区
课程
招聘
[分享] 某总$KProtect 价值3000元的公司级反调试产品 还原复现开源
发表于: 2019-3-27 00:01 28066

[分享] 某总$KProtect 价值3000元的公司级反调试产品 还原复现开源

2019-3-27 00:01
28066

0x00 前言

首先开头,感谢一波小伙伴。

@xiaofu:感谢逆向分析 Demo 提供原理

@刘铠文:感谢负责 Ring3 反调试代码

@BDBig:感谢答疑

@SingleKice:感谢答疑


该项目仅仅只是对 某总口中价值3000元/月公司级反调试产品 $KProtect 的还原复现
加上少量的代码优化 减少了很多硬编码 整个项目 Ring0+Ring3 实际功能代码不超过400行


某总:这是我们公司级别的产品,谁能成功调试下断的,奖励1w元

A few days later......

某总:那怎么可能兑现呢,扯几把蛋呢


0x01 隐藏进程

原理没什么多说的,基本就是 @xiaofu 所分析的
将 EPROCESS->InheritedFromUniqueProcessId 置为 System
将 EPROCESS->UniqueProcessId 置为 winlogon.exe(其他系统进程皆可)
通过动态获取 InheritedFromUniqueProcessId 和 UniqueProcessId 偏移 提高兼容性
值得注意的是,此方法会在 低版本 Win7系统 任务管理器 出现 Bug
现象是 winlogon 的进程会疯狂增加 且增加的进程 Pid 为 -1
(仅仅只是任务管理器表项增加 实际进程只有一个)
在高版本 Win7 和 Win10 没有此现象

0x02 回调保护

通过 ObRegisterCallbacks 注册 Process 和 Thread 回调

当目标进程为被保护进程时,进行降权处理

在使用了隐藏进程后,回调貌似并没有什么作用

在 CheatEngine 通过进程名所找到的 Demo 实为 winlogon.exe 的进程

所访问的内存也是属于 winlogon.exe 进程

所以回调的作用也仅仅在隐藏进程被攻破后才有作用


0x03 全局调试权限 调试端口 清零

通过 NtCreateDebugObject 函数地址 往后遍历特征码 计算得出 DbgkDebugObjectType 的指针
然后通过结构体 对 ValidAccessMask 标识置 0
如果要防止被还原,可在线程中循环对此标识置 0 或监控,再对线程做 crc

动态取出 DebugPort 的偏移 在用线程循环判断是否有值

0x04 HOOK DBG API

Hook DbgUiRemoteBreakin

Hook DbgBreakPoint
这里学习某眼睛的操作,比某总多 Hook 了一个 DbgBreakPoint

将 DbgUiRemoteBreakin Jmp到 LdrShutdownProcess 实现调用此 Api 程序直接退出

而 DbgBreakPoint 则直接对其 int3 写 ret 即可


0x05 检查标识位

调用 ZwQuerySystemInformation
检查 SystemKernelDebuggerInformation 中的 KernelDebuggerEnabled 是否为 true
检查 SystemKernelDebuggerInformation 中的 KernelDebuggerNotPresent 是否为 false

调用 ZwQueryInformationProcess

检查 ProcessDebugPort 是否有值

检查 ProcessDebugObjectHandle 是否有值

检查 ProcessDebugFlags 是否为 0

取得 PEB 指针

检查 BeingDebugged 是否为 1

扫描 Ldr 指向的内存是否填充 0xFEEEFEEE

检查 ProcessHeap->Flags 标识

检查 NtGlobalFlag 标识

附件项目里的只是通过 __readfsdword 取得的 Peb 指针
仅支持在 x86 编译环境下使用,x64 的自己想办法
标志位只是简单输出了一下 请自行写判断
(算是留的 2 个小坑 防止伸手党)

0x06 断下崩溃

调用 ZwSetInformationThread 对 ThreadHideFromDebugger 置 NULL 使线程对调试器隐藏 阻止调试事件发往调试器
参数一为线程句柄,由于附件中的 Demo 是直接创建的线程来循环操作的
如果直接 GetCurrentThread() 调用一次,则在主线程内断下不会崩溃
所以通过线程参数,将主线程句柄也传递过来调用 2 次

0x07 疯狂抛异常

异常肯定还有更好用的,不过try肯定是最简单的

0x08 结尾

至此,已是 $KProtect 的大部分主要功能实现

编译环境:VS 2017、WDK 10.0、SDK 10.0.16299.0
测试环境:Win7 x64、Win10 1709 完美运行无蓝屏

附件中部分基础函数没有提供实现,防止伸手党
如果发现文章内容或源码内有任何错误,欢迎评论区提出。
源码已上传至附件,感谢阅读!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-7-24 03:01 被Sprite雪碧编辑 ,原因:
上传的附件:
收藏
免费 10
支持
分享
最新回复 (51)
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
2
彳亍 口巴
2019-3-27 00:02
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
一个个干掉,体力活
2019-3-27 00:07
0
雪    币: 665
活跃值: (1051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
小心山总的杀手.
2019-3-27 00:08
0
雪    币: 1431
活跃值: (4418)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2019-3-27 00:20
0
雪    币: 2435
活跃值: (750)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
山总的杀手已经在路上了
2019-3-27 00:23
0
雪    币: 102
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最喜欢看大佬打架
2019-3-27 00:28
0
雪    币: 212
活跃值: (102)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
雪碧大佬
2019-3-27 00:31
0
雪    币: 149
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
垃圾一个。缺失很多文件。大家无视吧
2019-3-27 00:32
0
雪    币: 1310
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
山总的杀手已经在路上了
2019-3-27 00:39
0
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
11
xiaxiansheng 垃圾一个。缺失很多文件。大家无视吧
莫非你就是帖子里说的伸手党?出现了吗?!
2019-3-27 00:42
0
雪    币: 149
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
抱歉。我不是伸手党。是傻逼   先搞事情的  误伤楼主 。

*****


最后于 2019-3-27 09:29 被kanxue编辑 ,原因:
2019-3-27 01:31
0
雪    币: 26
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
我 mfc42.dll.山总 打钱
2019-3-27 02:24
0
雪    币: 668
活跃值: (1165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
说实话,我是一个小白,但是山总这原理,我点开看了一下就不想看了= =
2019-3-27 06:04
0
雪    币: 24
活跃值: (1353)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
山总的杀手已经在路上了 
2019-3-27 08:21
0
雪    币: 4191
活跃值: (862)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
山总的杀手已经在路上了 
2019-3-27 09:51
0
雪    币: 181
活跃值: (621)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
有的时候1W块是1W块,与兑现无关
2019-3-27 09:51
0
雪    币: 12
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
话说新win10改InheritedFromUniqueProcessId pg不扫么
2019-3-27 09:59
0
雪    币: 159
活跃值: (80)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
请问楼主,山总这个梗是怎么回事,或者有大佬给指点下
2019-3-27 11:01
0
雪    币: 6977
活跃值: (1786)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
20
感谢楼主分享
2019-3-27 11:30
0
雪    币: 12502
活跃值: (3058)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
crackJ 请问楼主,山总这个梗是怎么回事,或者有大佬给指点下
逆向mfc的大手子,《mfc深入出不来》的作者。
2019-3-27 11:51
0
雪    币: 9626
活跃值: (1838)
能力值: ( LV5,RANK:73 )
在线值:
发帖
回帖
粉丝
22
MaMy 话说新win10改InheritedFromUniqueProcessId pg不扫么
刚刚用 1809 试了下 直接安装了驱动是会蓝屏 但是具体原因不清楚
因为最近我 Win10 的双机调试一直有问题 没法查找问题所在
1709 我又试了下 确定没蓝 (VM自动装的教育版)
2019-3-27 12:14
0
雪    币: 159
活跃值: (80)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
23
白菜大哥 逆向mfc的大手子,《mfc深入出不来》的作者。
他是侯俊杰?
2019-3-27 13:04
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
作为伸手党的我,表示不开心啊
2019-3-27 20:05
0
雪    币: 576
活跃值: (1163)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
25
没加VMP?
2019-3-27 20:40
0
游客
登录 | 注册 方可回帖
返回
//