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

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

2019-3-27 00:01
26818

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 完美运行无蓝屏

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

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

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

*****


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