首页
社区
课程
招聘
[原创]第二阶段第二题答案
发表于: 2007-9-2 05:16 11040

[原创]第二阶段第二题答案

2007-9-2 05:16
11040
每个方法对应主程序中的一个按钮
第一种
使用SendMessage向目标窗口发送WM_CLOSE消息

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
第二种
使用PostMessage向目标窗口发送WM_CLOSE消息
2007-9-2 05:16
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
第三种
使用keybd_event向目标窗口发送VK_ESC按键
2007-9-2 05:17
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
第四种
使用mouse_event模拟点击目标窗口的关闭
2007-9-2 05:18
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第五种
使用Windows消息钩子注入dll到目标进程中,dll入口点判断是否是在CrackMe.exe中加载,如果是则调用ExitProcess
2007-9-2 05:20
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
第六种
使用CreateToolhelp32Snapshot函数枚举系统内所有线程,结束属于目标进程的全部线程
2007-9-2 05:22
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
之后的为使用到驱动的
第七种
使用驱动打开进程句柄,然后在ring3下调用TerminateProcess
2007-9-2 05:23
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
第八种
使用驱动打开目标进程句柄,构造一段代码(push 0,call [ExitProcess]) 使用VirtualAlloc,WriteProcess,CreateRemoteThread在目标进程中执行
2007-9-2 05:26
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
第九种
使用驱动打开目标进程句柄,构造一段代码在目标进程中完成加载注入DLL,注入DLL的入口点调用ExitProcess
2007-9-2 05:27
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
第十种
恢复系统SSDT后,使用OpenProcess(pid)打开进程后调用TerminateProcess结束进程
2007-9-2 05:29
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
第十一种
恢复SSDT后使用DebugApi附加进目标进程,然后退出宿主进程,则被调试进程结束
2007-9-2 05:31
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
第十二种
直接在驱动中结束目标进程
2007-9-2 05:31
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
Ring 3的忘了写一种
第十三种
调用EndTask函数直接使用窗口句柄结束目标进程
2007-9-2 05:32
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
ring3 增加一种
第十四种
Pid+1至Pid+3和原始Pid指向同一个进程,可以使用Pid+X打开进程并结束进程
上传的附件:
2007-9-2 05:44
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
第十五种 未用代码实现,但肯定可以的
使用驱动跳过目标程序驱动的Pid检测部分,之后在应用层可正常关闭。
目标程序驱动比较Pid部分代码如下
.text:00011741                 jz      short AllowAccess
.text:00011743                 mov     ecx, offset SpinLock ; SpinLock
.text:00011748                 call    ds:KfAcquireSpinLock
.text:0001174E                 mov     [ebp+NewIrql], al
.text:00011751                 mov     ecx, g_dwProtectPid
.text:00011757                 mov     [ebp+ProtectPid], ecx
.text:0001175A                 mov     dl, [ebp+NewIrql] ; NewIrql
.text:0001175D                 mov     ecx, offset SpinLock ; SpinLock
.text:00011762                 call    ds:KfReleaseSpinLock
.text:00011768                 mov     edx, [ebp+arg_C]
.text:0001176B                 mov     esi, [edx]
.text:0001176D                 and     esi, 0FFFFFFFCh
.text:00011770                 call    PsGetCurrentProcessId
.text:00011775                 cmp     esi, eax
.text:00011777                 jnz     short loc_1177D
.text:00011779                 jmp     short AllowAccess
.text:0001177B ; ---------------------------------------------------------------------------
.text:0001177B                 jmp     short AllowAccess
.text:0001177D ; ---------------------------------------------------------------------------
.text:0001177D
.text:0001177D loc_1177D:                              ; CODE XREF: sub_11700+77j
.text:0001177D                 mov     eax, [ebp+arg_C]
.text:00011780                 mov     ecx, [eax]
.text:00011782                 and     ecx, 0FFFFFFFCh
.text:00011785                 cmp     [ebp+ProtectPid], ecx
.text:00011788                 jnz     short AllowAccess
.text:0001178A                 jmp     short NotAllowAccess
.text:0001178C ; ---------------------------------------------------------------------------
.text:0001178C                 jmp     short NotAllowAccess
.text:0001178E ; ---------------------------------------------------------------------------
.text:0001178E
.text:0001178E AllowAccess:                            ; CODE XREF: sub_11700+32j
2007-9-2 05:49
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
第十六种 也没写代码
目标程序和配套驱动使用DeviceIoControl进行通信,设置需要保护的进程pid,注入目标进程后向驱动程序发送一个错误的pid即可去掉进程保护
程序和驱动交互的类的虚函数表如下
.rdata:00403590 off_403590      dd offset sub_4016F0    ; DATA XREF: sub_401600+A9o
.rdata:00403590                                         ; sub_401710+9o
.rdata:00403594                 dd offset CreatetCrackMeDriver
.rdata:00403598                 dd offset StartCrackMeDriver
.rdata:0040359C                 dd offset StopCrackMeDriver
.rdata:004035A0                 dd offset DeleteCrackMeDriver
.rdata:004035A4                 dd offset GethModNtdll
.rdata:004035A8                 dd offset IsDeviceHandleOk
.rdata:004035AC                 dd offset QueryCrackMeServiceStatus
.rdata:004035B0                 dd offset CrackMeDeviceIoControl
2007-9-2 05:54
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
第十七种
注入目标程序后关闭已经打开的设备句柄(ring 0和ring 3均可)后即可直接在自己的程序中打开设备句柄,之后无论是卸载驱动还是调用DeviceIoControl均可实现去除驱动保护
2007-9-2 05:56
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
不行了,还有很多种实在没精力写了,累死了,睡觉去了
2007-9-2 05:58
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
睡前添两种
使用PID+1的方法打开进程,可以把使用驱动打开句柄的(远程线程的那两个)重新实现一次
又多两种
2007-9-2 06:05
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
ring0添加一种
恢复SSDT后,直接修改ThreadContext的EIP指向目标程序的
.text:00402866                 push    eax             ; int
.text:00402867                 call    ds:exit
则程序在获得调度的时候自动退出
调用SetForeGroundWindow是为了让线程立刻得到调度
上传的附件:
2007-9-2 11:41
0
游客
登录 | 注册 方可回帖
返回
//