WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
阅读:11645回复:46

进程保护挑战 - 无HOOK无KDOM,微软标准函数

楼主#
更多 发布于:2008-04-03 19:03
看到有人诟病360的自我保护,又见江民、微点等一堆国内挫人使用一大堆HOOK对自己的进程做保护
导致系统不稳定还保护不住

于是放点东西出来给大家玩玩,欢迎挑战

测试程序没有使用任何HOOK,没有使用任何KDOM,没有修改任何未公开的数据结构或调用,完全是微软的标准接口和函数,却让无数进程结束,ARK工具望之兴叹,哈哈!

以下是无法结束本测试程序的程序列表,欢迎各位测试自己的工具,逐步更新此表

Icesword 1.22 ---  failed
RKU 3.7 ---  failed
gmer 1.14 ---  failed
SnipeSword 20080225 -- failed
Wsyscheck 20080223  --failed
墨者安全专家进程管理3.05 --- failed
DarkSpy 1.0.5 --- failed
SysProt 1.0.0.5 --- failed

挑战规则:

让进程退出

禁止:
不允许攻击窗口

不允许恢复驱动使用标准函数建立的接口等

不允许破坏驱动内部数据或代码流程(例如保护PID值)
不允许类似上面的技巧

测试程序见压缩包:


测试方法:使用Driver Monitor或DrvLoad等工具加载ppxx.sys
运行ppxx.exe

尝试将其结束
附件名称/大小 下载次数 最后更新
ppxx.rar (16KB)  411 2008-04-03 19:03
驱动开发者 呵呵
rhettxie
驱动牛犊
驱动牛犊
  • 注册日期2004-10-27
  • 最后登录2010-02-04
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望65点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-04-03 22:27
.text:000106DC                 call    PsSetCreateProcessNotifyRoutine
.text:000106E1                 push    offset sub_10560 ; NotifyRoutine
.text:000106E6                 call    PsSetCreateThreadNotifyRoutine

建立这样连个回调,然后在回调里判断是否自己的进程,不是的话就无限期
KeDelayExecutionThread

同志们不用反了,直接想办法吧
静水流深
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2008-04-03 22:29
老大,IDA也要给点专业精神啊,你反的不正确,这样会误导后来的同志们的
驱动开发者 呵呵
rhettxie
驱动牛犊
驱动牛犊
  • 注册日期2004-10-27
  • 最后登录2010-02-04
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望65点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-04-03 22:40
.text:000106DC                call    PsSetCreateProcessNotifyRoutine
.text:000106E1                push    offset sub_10560 ; NotifyRoutine
.text:000106E6                call    PsSetCreateThreadNotifyRoutine

建立这样连个回调,然后在回调里判断是否自己的进程,是的话就无限期
KeDelayExecutionThread

不好意思,我说反了
静水流深
linkin__park
驱动牛犊
驱动牛犊
  • 注册日期2006-03-12
  • 最后登录2009-09-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-04-04 00:01
安全结束进程需要在进程内线程执行代码,LZ又不让进程存在活动线程,2个条件完全冲突,也就是找出外部结束进程的办法...
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2008-04-04 00:08
啥呢,楼上也没搞清楚。。。
建议还是仔细IDA F5后再发言~
驱动开发者 呵呵
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2008-04-04 08:26
谁有兴趣就干下这个重体力活吧,哈哈.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
codez
驱动牛犊
驱动牛犊
  • 注册日期2005-06-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望73点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-04-04 17:58
好久没来了,刚来就发现这么好玩的东西哈。

我的想法:

1. 直接摘链,这个我就不说了,体力活而已; 或者 hook 那个KeDelayExecutionThread ;
2. 由于驱动设计的缺陷,因此我们可以以很容易的杀死目标进程(注意:偷懒方法,针对此程序设计而已,无任何技术,只是思路而已,呵呵)。

说说方法2:

1. 加载 ppxx.sys
2. 运行 ppxx.exe 另他处于被保护状态;
3. 运行我提供的 updatexxpp 程序,然后使用任意程序结束目标或者直接关闭 ppxx.exe 即可 :)
不过,这些方法有违规的嫌疑,和要求有些擦边了 :(
但是,话说话来了,本来方法就不多,如果都不让用了...

updatexxpp 的源代码如下:

===========================
// created by codez @2008

#include <stdio.h>
#include <stdarg.h>
#include <windows.h>

#define CODE    0x222000
#define DEVICE_NAME    "\\\\.\\xxpp"

void fatal (char * fmt, ...)
{
    va_list args;
    
    va_start(args, fmt);
    vfprintf(stderr, fmt, args);
    va_end(args);
}

int main(int argc, char * argv[])
{
    HANDLE hDevice = CreateFile(DEVICE_NAME, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    DWORD dwPid, dw;
    if (hDevice == INVALID_HANDLE_VALUE) {
        fatal ("No device found! Good luck!\n");
        return -1;
    }
    
    dwPid = 0;
    if (DeviceIoControl(hDevice, CODE, &dwPid, sizeof(dwPid), NULL, 0, &dw, NULL)) {
        printf ("OK! You could use taskmgr program to kill the target file now!\n");
    } else {
        fatal ("Failed to set process id!!! Error=0x%lX\n", GetLastError());
    }
    
    CloseHandle(hDevice);
    return 0;
}
// end
codez
驱动牛犊
驱动牛犊
  • 注册日期2005-06-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望73点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-04-04 18:10
不知道  Hook KeDelayExecutionThread 这个算不算作弊。
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
9楼#
发布于:2008-04-04 22:56
楼上的两个办法都算是作弊

1.hook kexxx,实际是干扰了保护驱动程序本身的工作流程,试想,如果我不用kedelay呢?这只能算只针对性的攻击


2.给DEVICE发请求改PID,是修改了保护驱动本身的数据,试想,我换一个IOCTL,或者干脆用随机的呢?
驱动开发者 呵呵
Yanky
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2021-09-08
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望95点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2008-04-05 04:15
EP_X0FF
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
11楼#
发布于:2008-04-05 16:19
越来越发现内核不好玩了;—<
jACKNI
驱动牛犊
驱动牛犊
  • 注册日期2005-07-18
  • 最后登录2008-07-29
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望19点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2008-04-06 00:13
日啊,xpsp2虚拟机,sys无法加载,拜托mj你下次别弄残废版来消遣我等啊
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
13楼#
发布于:2008-04-06 01:27
都是标准函数,有啥不能加载的,仔细看好了,你要先手动加载驱动!偷懒没写加载代码,什么残废版,说话小心点
驱动开发者 呵呵
codez
驱动牛犊
驱动牛犊
  • 注册日期2005-06-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望73点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2008-04-06 10:27
说实话,这个程序本身就存在类似于恶意软件的行为,所以,如果非要用某种通用的方法去实现针对某种特定的方法的确意义不大。

不管摘练是否犯规,但是这是一个很通用的方法,基本上你的驱动只要没有根本性的机制改变,也可以被杀掉。

如果说有更通用的方法,那么就是通过其他系统引导本身硬盘,删除程序而已。
MoveFileEx 或者类似的方法可以轻松搞定,呵呵。
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
15楼#
发布于:2008-04-06 11:06
本身这就是个保护挑战,恶意不恶意,不知道从哪里说起
摘链无疑不现实,因为如果这是个恶意程序,那么它可能根本不用这种一眼就能出来的钩子,试问你怎么摘?

至于什么删除程序,更是可笑,这是进程保护挑战,与文件何干?
驱动开发者 呵呵
powerboot
驱动牛犊
驱动牛犊
  • 注册日期2007-12-15
  • 最后登录2009-12-26
  • 粉丝0
  • 关注0
  • 积分92分
  • 威望46点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2008-04-06 11:21
给点提示....
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
17楼#
发布于:2008-04-06 11:27
PsNotifyMrg.zip 放个测试程序,环境是XPSP2
用法是先加载驱动,然后执行PsNotifyMrgApp.exe选择\\.\PsNotifyMrgDevice,open handle
Operation Type,选择IOCT_800
Input Size :4  Input Pattern:你进程的PID
点击Execute Transfer,以后你指定的PID就可以避开所有的PROCESS, THREAD CALLBACK的监视,不过其他的调用还是会经过所有的CALLBACK。主要是针对特定进程避开监视而又不影响其他进程的监视。不过也只是个想法而已。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
powerboot
驱动牛犊
驱动牛犊
  • 注册日期2007-12-15
  • 最后登录2009-12-26
  • 粉丝0
  • 关注0
  • 积分92分
  • 威望46点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2008-04-06 13:38
引用第17楼wowocock于2008-04-06 11:27发表的  :
放个测试程序,环境是XPSP2
用法是先加载驱动,然后执行PsNotifyMrgApp.exe选择\.PsNotifyMrgDevice,open handle
Operation Type,选择IOCT_800
Input Size :4  Input Pattern:你进程的PID
点击Execute Transfer,以后你指定的PID就可以避开所有的PROCESS, THREAD CALLBACK的监视,不过其他的调用还是会经过所有的CALLBACK。主要是针对特定进程避开监视而又不影响其他进程的监视。不过也只是个想法而已。

wowo老大的驱动是拿什么编译的,这么大?
他的意思是根本不让你干扰他的routine,必须让它执行...
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
19楼#
发布于:2008-04-06 13:49
WOW老牛出手了 :)  膜拜先


方法似乎是先取到所有的notify,然后把他们保存下来,最后都干掉
然后自己注册一个,替他们来执行,所以就可以过滤掉指定的PID了(或者TID~)

但是似乎只能执行在XP下 ,首先2K没有REMOVE那个函数,其次2k上就是一张地址表,而XP后则是CallBackObject了
PS:终于看到WOW牛发出的SYS没有CV了,F5好开心~~~

- - !不过大家为啥都只盯着可怜的notify不放呢。。。
 
驱动开发者 呵呵
上一页
游客

返回顶部