发布于:2016-5-13 15:31 | 154538次阅读 作者: 管理员 | 原作者: TP | 来自: 原创
第二阶段第一题. 题目: 检测程序多开。第二轮第1题_PC.zip 解题重点: 程序可能会异常退出,当程序正常或者异常退出的时候,都需要能正确的输出结果。有一些同学可能实现了很多种方式,但是程序异常退出的情况没考虑到,于是丢了不少的分数。可以利用和进程生命周期相关的内核对象进行检测。 解法及思路: 1.创建特定的窗口,然后枚举这种类型的窗口的个数 2.创建特定格式的共享内存,Event,WaitableTimer,Desktop,JobObject等 3.枚举相同路径的进程
第二阶段第二题. 题目: 检测虚拟机。第二轮第2题_PC.zip 解法及思路: 1.特权指令检测VMWare(in) 2.检测虚拟机的硬件信息。(MAC地址,显示设备,进程信息,注册表信息,硬盘信息等) 3.实际装一个虚拟机,观察它的各种系统信息,设备信息,容易找到方法
第二阶段第三题 题目: 检测调试器。第三轮第3题_PC.zip 解法及思路: 1.IsDebuggerPresent 2.CheckRemoteDebuggerPresent 3.NtGlobalFlags 4.HeapFlags 5.ForceFlags 6.检查调试器窗口 7.检查调试器进程 8.Guard Pages保护进行检测 9.利用NtQueryInformationPorcess() 函数查询DebugPort 10.利用软件断点(int3),根据中断的处理方,可以判断是否处于调试状态 11.设置标志寄存器中的陷阱标志(TF位),产生单步异常,如果调试器存在,该异常将会被调试器捕获,否则由程序自己捕获,依此可以判断进程是否被调试 12.根据OutputDebugString()进行判断.如果有调试器存在,OutputDebugString()后执行GetLastError(),其返回值为0;没有调试器时,返回值非0 |
最新评论
查看全部评论(1)
发表评论