首页
社区
课程
招聘
[下载][新人]刚做的R3杀进程^^
发表于: 2008-7-10 20:14 12195

[下载][新人]刚做的R3杀进程^^

2008-7-10 20:14
12195
我是刚刚学习编程(快四个月了)的新手,刚读了那本《Microsoft Windows Internals》,试着写个了R3下结束进程的小程序。里面用了两种方法,第一种只有10多行,是网上现有的方法。第二种我找了下,目前网上还没有,是我自己试探着做的。不过搜索算法比较笨拙,半天才能结束掉。它可以结束IS、360等等,比较烂,容我日后改进下^^
由于使用了些许硬编码,程序只能跑在32位的XP SP2下。

编译环境是vs2003,未加壳(也不会加 - -#)

对于360tray.exe和safeboxTray.exe这两个进程,有时能结束掉,有时又结束不掉。我正在改进,争取明天发一个始终能结束的^^ (有时候看上去没结束,但其实已经挂了,最好这两个都执行一次操作,然后鼠标放上去(托盘那)看看)

这里下载第二版和第三版^^ http://bbs.pediy.com/showthread.php?t=68304

2008-07-13 11:39:
    经历了若干次蓝屏重启,终于找到了第四种方法^^ 待偶完善一下,下午发上来

2008-07-13 18:54:
  版本4已出炉^^,链接:http://bbs.pediy.com/showthread.php?p=480447#post480447

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (23)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好东西,支持原创 !!
2008-7-10 20:21
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=;]...[/QUOTE]
谢谢支持,多提意见 ^^

刚试了下,把360的保护壳——safeboxTray.exe也结束掉了,咳。。貌似有时候能结束,有时候不能哎,我再研究下。。。 - -#
2008-7-10 20:33
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
第一种:注入远程线程,线程函数是ExitProcess。
第二种:如果以上方法失败,用了int 2E自陷,就是调用NtSystemDebugControl,SYSDBG_COMMAND使用的是SysDbgReadVirtualMemory,接下来,就计算****,好像是转化的,我太菜看不懂,麻烦楼主为菜鸟解释一下。
然后就用NtSystemDebugControl,SYSDBG_COMMAND是SysDbgWriteVirtualMemory,去清零,是吗~~~~

我太菜,就猜测成这样,如果有误,楼主莫怪。。
2008-7-10 21:50
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
试试谢谢分享
2008-7-10 22:04
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
咳,都被你跟踪到了,还谦虚。。 - -#

不过SYSDBG_COMMAND你怎么会弄错了呢?我没用你说那两个

typedef enum _SYSDBG_COMMAND {
    SysDbgQueryModuleInformation = 0,
    SysDbgQueryTraceInformation = 1,
    SysDbgSetTracepoint = 2,
    SysDbgSetSpecialCall = 3,
    SysDbgClearSpecialCalls = 4,
    SysDbgQuerySpecialCalls = 5,
    SysDbgBreakPoint = 6,
    SysDbgQueryVersion =7,
    SysDbgReadVirtual =8,
    SysDbgWriteVirtual = 9,
    SysDbgReadPhysical = 10,
    SysDbgWritePhysical =11,
    SysDbgReadControlSpace = 12,
    SysDbgWriteControlSpace = 13,
    SysDbgReadIoSpace = 14,
    SysDbgWriteIoSpace = 15,
    SysDbgReadMsr =16,
    SysDbgWriteMsr = 17,
    SysDbgReadBusData = 18,
    SysDbgWriteBusData = 19,
    SysDbgCheckLowMemory = 20,
    SysDbgEnableKernelDebugger,
    SysDbgDisableKernelDebugger,
    SysDbgGetAutoKdEnable,
    SysDbgSetAutoKdEnable,
    SysDbgGetPrintBufferSize,
    SysDbgSetPrintBufferSize,
    SysDbgGetKdUmExceptionEnable,
    SysDbgSetKdUmExceptionEnable,
    SysDbgGetTriageDump,
    SysDbgGetKdBlockEnable,
    SysDbgSetKdBlockEnable,
} SYSDBG_COMMAND, *PSYSDBG_COMMAND;

我用的是10号和11号,即SysDbgReadPhysical 和 SysDbgWritePhysical,没有用8号9号啊
网上没找到这两个的用法,自己反了下琢磨着用的,貌似应该有高效的速度快的办法。计算部分是很笨很土的,难怪你看着晕哈,嘿嘿。。。
2008-7-10 22:10
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
额。。。。
使用的枚举的名字不一样。。

跟踪的时候是0xA和0xB嘛~~~~
我没用过NtSystemDebugControl。
参考的是http://www.xfocus.net/articles/200408/721.html

那里枚举的声明是(Nt5.1貌似是XP吧):
typedef enum _SYSDBG_COMMAND {
//以下5个在Windows NT各个版本上都有
    SysDbgGetTraceInformation = 1,
    SysDbgSetInternalBreakpoint = 2,
    SysDbgSetSpecialCall = 3,
    SysDbgClearSpecialCalls = 4,
    SysDbgQuerySpecialCalls = 5,

// 以下是NT 5.1 新增的
    SysDbgDbgBreakPointWithStatus = 6,

    //获取KdVersionBlock
    SysDbgSysGetVersion = 7,

    //从内核空间拷贝到用户空间,或者从用户空间拷贝到用户空间
    //但是不能从用户空间拷贝到内核空间
    SysDbgCopyMemoryChunks_0 = 8,
  //SysDbgReadVirtualMemory = 8,

    //从用户空间拷贝到内核空间,或者从用户空间拷贝到用户空间
    //但是不能从内核空间拷贝到用户空间
    SysDbgCopyMemoryChunks_1 = 9,
  //SysDbgWriteVirtualMemory = 9,

    //从物理地址拷贝到用户空间,不能写到内核空间
    SysDbgCopyMemoryChunks_2 = 10,
  //SysDbgReadVirtualMemory = 10,

    //从用户空间拷贝到物理地址,不能读取内核空间
    SysDbgCopyMemoryChunks_3 = 11,
  //SysDbgWriteVirtualMemory = 11,

    //读写处理器相关控制块
    SysDbgSysReadControlSpace = 12,
    SysDbgSysWriteControlSpace = 13,

    //读写端口
    SysDbgSysReadIoSpace = 14,
    SysDbgSysWriteIoSpace = 15,

    //分别调用RDMSR@4和_WRMSR@12
    SysDbgSysReadMsr = 16,
    SysDbgSysWriteMsr = 17,

    //读写总线数据
    SysDbgSysReadBusData = 18,
    SysDbgSysWriteBusData = 19,

    SysDbgSysCheckLowMemory = 20,

// 以下是NT 5.2 新增的

    //分别调用_KdEnableDebugger@0和_KdDisableDebugger@0
    SysDbgEnableDebugger = 21,
    SysDbgDisableDebugger = 22,
   
    //获取和设置一些调试相关的变量
    SysDbgGetAutoEnableOnEvent = 23,
    SysDbgSetAutoEnableOnEvent = 24,
    SysDbgGetPitchDebugger = 25,
    SysDbgSetDbgPrintBufferSize = 26,
    SysDbgGetIgnoreUmExceptions = 27,
    SysDbgSetIgnoreUmExceptions = 28
} SYSDBG_COMMAND, *PSYSDBG_COMMAND;

呵呵~~~

看到第一次看到int 2E而且是0xFF的函数就去看了一下是哪个函数结果发现是NtSystemDebugControl,之前知道这个东西可以写内存,其他就不知道了。
2008-7-10 22:18
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
因为新的保护箱又改变了一些东西,所以才这样。。。。
2008-7-10 22:48
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
那篇我也看了,达人真多啊 ^^
我windbg初学(还是跟着那本厚书学的),还不太会动态的跟踪程序 - -#

本来我用的sysenter,结果编译不通过,说什么“****newline*****”,只好改作int 2eh啦,嘿嘿,没想到居然一下子成功了~
2008-7-11 08:36
0
雪    币: 232
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
第二个NtSystemDebugControl没有看过。不过还有种方法:
注射一个进程,然后写一个不能写的空间,引起访问违规,比如这样:
asm
  xor eax, eax
  mov [eax], 0
end;
然后目标就因为写 0x00000000 地址的内存而被系统给中止了。

具体的看这里,其中有一个方法就是利用ExitProcess(直接在ExitProcess上CreateRemoteThread)。
http://www.delphibbs.com/keylife/iblog_show.asp?xid=23375

ps: ExitProcess对很多杀毒软件都无效,估计挂了钩子。
    利用访问违规杀进程就比较强悍了,ring3级的程序基本都能冲突掉。
2008-7-11 17:22
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
用GetProcAddress弄函数的地址不行吗~~~~~
2008-7-11 18:26
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
貌似可以,嘿嘿^^ 在ntdll.dll里

To 10楼:
4楼都说啦,我第一种方法就是先注入远程线程,结束不掉才会执行第二段代码 - -#
2008-7-11 20:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学4个月 强啊 。。
2008-7-12 00:28
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
14
我还是对那种算法比较感兴趣。。。

楼主解释一下吧。。

供菜鸟学习一下。
2008-7-12 11:44
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
哈,算法真的很老土的,在物理内存中暴力搜索定位_EPROCESS块,所以速度才会像蜗牛一样:(
2008-7-12 18:24
0
雪    币: 224
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
想必编程前有过其他的学习,比如Crack.
如果真是四个月,只能说
兄台,天赋异禀,骨骼精奇,日后必是武学奇才!
2008-7-12 21:26
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
咳,以前一直和硬件打交道,我的专业是搞那些电路板,弄弄放大器、滤波器、陷波器、调制于解调、电源……什么的。然后碰到可编程逻辑器件CPLD什么的,才开始接触编程,用的语言是verlog(应该是类C的吧)。CPLD是个很吃力的东西,在它之后用到现场可编程逻辑门阵列(FPGA)的片子,才开始重视编程。然后就发现,哇,原来硬件和软件某种程度上居然是相通的。之后很弄了本很老旧的C书,很粗糙的学了遍,写了几个课后题目程序。现在VC用起来还很吃力,只会弄对话框(似乎这个+按钮测试最方便)。
2008-7-13 01:57
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
PS:
硬件竟然可以通过软件来控制,人类可以发展到这一步,真是太神奇了~
无限的吸引力,澎湃的好奇心,偶对此完全0免疫力哇~
日下对编程,尤其是底层,甚有兴趣。无奈时间有限,感慨精力有限,唉。。。。
2008-7-13 02:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
暴力找EPROCESS不需要那么长时间吧。。。。
2008-7-19 21:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
只学四个月。。。牛人啊。
2008-7-19 21:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
SYSENTER可以这样写:
_asm{
                _EMIT        0FH        // SYSENTER
                _EMIT        34H       
}
2008-7-19 21:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
360在KiSystemService上下手脚。只要你传入驱动的不是明文的EPROCESS或者PID,就可以结束它。
2008-7-19 21:28
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
弓虽就一个字
2008-7-20 23:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
呵呵 学习了哦。。。。。。。。
2008-7-21 00:10
0
游客
登录 | 注册 方可回帖
返回
//