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

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

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

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (19)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:16
2
0
第二种
使用PostMessage向目标窗口发送WM_CLOSE消息
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:17
3
0
第三种
使用keybd_event向目标窗口发送VK_ESC按键
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:18
4
0
第四种
使用mouse_event模拟点击目标窗口的关闭
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:20
5
0
第五种
使用Windows消息钩子注入dll到目标进程中,dll入口点判断是否是在CrackMe.exe中加载,如果是则调用ExitProcess
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:22
6
0
第六种
使用CreateToolhelp32Snapshot函数枚举系统内所有线程,结束属于目标进程的全部线程
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:23
7
0
之后的为使用到驱动的
第七种
使用驱动打开进程句柄,然后在ring3下调用TerminateProcess
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:26
8
0
第八种
使用驱动打开目标进程句柄,构造一段代码(push 0,call [ExitProcess]) 使用VirtualAlloc,WriteProcess,CreateRemoteThread在目标进程中执行
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:27
9
0
第九种
使用驱动打开目标进程句柄,构造一段代码在目标进程中完成加载注入DLL,注入DLL的入口点调用ExitProcess
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:29
10
0
第十种
恢复系统SSDT后,使用OpenProcess(pid)打开进程后调用TerminateProcess结束进程
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:31
11
0
第十一种
恢复SSDT后使用DebugApi附加进目标进程,然后退出宿主进程,则被调试进程结束
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:31
12
0
第十二种
直接在驱动中结束目标进程
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:32
13
0
Ring 3的忘了写一种
第十三种
调用EndTask函数直接使用窗口句柄结束目标进程
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:44
14
0
ring3 增加一种
第十四种
Pid+1至Pid+3和原始Pid指向同一个进程,可以使用Pid+X打开进程并结束进程
上传的附件:
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:49
15
0
第十五种 未用代码实现,但肯定可以的
使用驱动跳过目标程序驱动的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
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:54
16
0
第十六种 也没写代码
目标程序和配套驱动使用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
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:56
17
0
第十七种
注入目标程序后关闭已经打开的设备句柄(ring 0和ring 3均可)后即可直接在自己的程序中打开设备句柄,之后无论是卸载驱动还是调用DeviceIoControl均可实现去除驱动保护
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 05:58
18
0
不行了,还有很多种实在没精力写了,累死了,睡觉去了
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 06:05
19
0
睡前添两种
使用PID+1的方法打开进程,可以把使用驱动打开句柄的(远程线程的那两个)重新实现一次
又多两种
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ytnb 2007-9-2 11:41
20
0
ring0添加一种
恢复SSDT后,直接修改ThreadContext的EIP指向目标程序的
.text:00402866                 push    eax             ; int
.text:00402867                 call    ds:exit
则程序在获得调度的时候自动退出
调用SetForeGroundWindow是为了让线程立刻得到调度
上传的附件:
游客
登录 | 注册 方可回帖
返回