目 录

Size: px
Start display at page:

Download "目 录"

Transcription

1 第 1 页 摘 要 随着计算机的发展, 越来越多人用上了个人计算机, 而主流的操作系统是 Microsoft 的 Windows 这种操作系统占据着 PC 操作系统市场的 90% 以上 但问题也随之而来, 越来越多的针对该平台的病毒 木马 黑客程序 恶意程序 流氓软件以及间谍程序盗窃和破坏用户数据 研究发现, 大多数上述非法程序是通过注册表来达到自启动的 那么只要我们拦截上述程序对注册表的访问, 便可禁止他们启动, 达到了保护用户数据的目的 在本次设计中, 使用了 SSDT Hook 这中技术对注册表的访问进行拦截 这种拦截技术通用, 功能强大 首先, 探讨了 SSDT Hook 这种技术的实现的机理 其次介绍了各个模块的实现 关键词 : 注册表 SSDT Hook 系统服务拦截

2 ABSTRACT 第 2 页 With the development of computers, more and more people use a personal computer, and the mainstream operating system is Microsoft Windows. This operating system to occupy the PC operating system market more than 90%. But the attendant problems, more and more against the platform of the virus, Trojan horse, hackers procedures, malicious procedures, rogue software, as well as theft and espionage procedures damage user data. The study found that while most of these illegal procedures adopted to achieve since the registry started. So long as we intercept these procedures on the visit to the registry can be initiated against them, to the protection of user data purposes. In this design, the use of the SSDT Hook this technical visit to the registry to intercept. Such generic interception technology, powerful functions. First, to explore the technology SSDT Hook the realization of the mechanism. Second of all modules in the system. Keywords:Registry,SSDT Hook, Interceptor system services

3 第 3 页 目录 摘要... 1 ABSTRACT 绪论 研究背景 论文内容概述 系统服务拦截技术 系统调用的定义 WINDOWS 下系统调用的流程 WINDOWS 平台下系统调用拦截技术 用户态下的系统调用拦截 [9] 内核态修改系统调用的拦截 各种拦截系统调用方案对比 注册表拦截系统的采用的技术方案 SSDT (SYSTEM SERVICE DISPATH TABLE) 概述 [7] SSDT HOOK 技术 系统结构及模块划分 本软件的系统结构 内核拦截模块 驱动程序的结构 对系统函数的挂接 工作流程 与上层程序的通信 驱动程序的调试 后台监控模块 控制中心模块 托盘模块 系统使用与系统测试 系统使用 系统测试 设计中遇到的问题 可改进之处 参考文献 HOOKING THE NATIVE API AND CONTROLLING PROCESS CREATION ON A SYSTEM-WIDE BASIS INTRODUCTION DEFINING OUR STRATEGY CONTROLLING PROCESS CREATION... 38

4 CONCLUSION 第 4 页 系统范围内挂钩本地 API 控制进程的创建 致谢 附加信息 : 凑页数的话 :... 50

5 1 绪论 第 5 页 1.1 研究背景 随着经济的发展, 越来越多的人用上了个人计算机, 并且连接了因特网 但也安全的问题随之而来 越来越多的病毒, 木马, 恶意软件, 流氓程序以及间谍程序进入个人电脑, 对用户造成巨大的损失 研究表明, 上述程序多数运行在 windows 平台, 并且通过修改注册表达到随机启动的目的 例如著名的冰河,BO2K 等木马 因此, 可以通过拦截对注册表的访问, 从根本上阻止上述程序的运行, 以此达到保护用户文件数据的目的 调查同时发现, 市场上已经出现了同类功能的产品, 如 : 瑞星 可见发展注册表保护技术是有很好的前景的 1.2 论文内容概述 本论文主要阐述了 Windows 下拦截注册表访问的方法

6 2 系统服务拦截技术 第 6 页 2.1 系统调用的定义 用户在程序中调用操作系统中的功能子模块 或操作系统核心中设置了一组用于实现各种系统功能的子程序, 提供用户程序调用 在 Windows 中, 系统调用有多套 最重要的是两套系统调用分别是内核例程 ( 提供给驱动程序 ) Win32 API( 提供给 Win32 应用程序 ). [1][3] 2.2 Windows 下系统调用的流程 下图是 Windows NT 系列操作系统的体系结构 : [4] 图 Windows 体系结构

7 第 7 页 处在 User mode 的是普通应用程序, 它们通过 Ntdll.dll 进入到 Kernel mode, 再由 System service dispatcher 调度完成所需的功能, 例如申请内存, 访问文件, 网络, 注册表, 以及硬件等等 下列以 explorer.exe(windows 外壳程序 ) 访问设置注册表键值为例来说明系统调用的流程 Windows 下访问注册表的 API 是 RegSetValueEx, 这个 API 是 Kernel32.dll 导出的函数, 但 Kernel32.dll 内部的 RegSetValueEx, 并不做什么, 它交给了 ntdll.dll 去实现, 反汇编 ntdll!zwregsetvalueex 可获得如下代码 (Win2K sp4): Mov eax,0d7h Lea edx,[esp+4] Int 2eH Ret 10H 可见, 它把 0d7H 送进 Eax 后通过 int 指令交给了 windows 内核 ntoskrnl 去完成对注册表的设置, 这是实现对应功能的是 ntoskrnl!ntregsetvalueex 图 系统调用流程 2.3 Windows 平台下系统调用拦截技术 [9] 用户态下的系统调用拦截 用户态拦截系统调用主要有两种技术 :IAT Hook 和 JMP Hook(inline Hook) IAT 即导入地址表, 包含了导入的相关信息和导入函数的地址 我们在调用 API 时, 通常是这部分起作用, 编译器并不直接把调用连接到模块, 而是用 jmp 指令连接调用到 IAT, IAT 在系统把进程调入内存时时会由进程载入器填满 这就是我们可以在两个不同版本的 Windows 里使用相同的二进制代码的原因, 虽然模块可能会加载到不同的地址 进程载入器会在程序代码里调用所使用的 IAT 里填入直接跳转的 jmp 指令 很明显, 只要我们修改模块的 IAT, 那么系统调用就会跳转到我们自定义的模块执行 这就达到了拦截系统调用的目的 下面是 IAT 钩子的工作流程 : [8]

8 第 8 页 图 IAT 钩子流程 JMP 钩子是在目标函数开始放置一条 JMP 指令来修改原系统调用执行流程的方法 下面是 JMP 钩子执行流程以及修改后的代码 ( 摘自 detours 帮助文档 ) 图 JMP 钩子执行流程

9 第 9 页 图 函数修改后 内核态修改系统调用的拦截 内核态主要有三种方法去拦截系统调用 :Hook SSDT( 挂钩系统服务调用表 ) Hook PE ( 即使用 IAT Hook 或 Jmp Hook 修改 ntoskrnl 等内核模块 ) 和挂接中断 各种拦截系统调用方案对比 在用户层拦截系统调用容易, 而且稳定, 但由于进程隔离, 不容易捕获到所有的进程活动 在内核层拦截系统调用强大, 但开发难度较大 而且可能会对系统造成一定的不良影响 在内核系统调用拦截方法中,SSDT Hook 实现起来就方便, 而且具有跨平台的特性 故在本设计中选用了该方法

10 3 注册表拦截系统的采用的技术方案 第 10 页 [7] 3.1 SSDT (System Service Dispath Table) 概述 Windows 系统服务调用是存在于 Windows 系统中的一个关键接口, 常常称作 System Call,Sysem Service Call 或 System Service Dispatching 等, 在此我们就权且称之为 Windows 系统服务调用, 它提供了操作系统环境由用户态切换到内核态的功能 并且完成应用程序的功能请求 这点可以达到保护系统资源的目的 Windows 2000 本机系统服务又称为 Windows 本机应用程序编程接口, 它是由执行体 (Executive) 为用户模式和内核模式的程序提供的系统服务集 它包含两种类型的函数 : Windows 执行系统服务的系统服务调度占位程序 ; 子系统, 子系统 DLL 和其他本机映像使用的内部支持函数 从用户模式调用本机系统服务是通过 NTDLL.dll 来实现的 表面上,Win32 函数为编程人员提供了很多接口来实现我们想要的功能, 但是这些 Win32 函数只不过是本机应用程序编程接口的一个包装器而已, 它们将本机 API 包装起来, 调用本机系统服务来实现用户期望的功能 也就是说 NTDLL.dll 只是系统服务调用接口在用户模式下的一个外壳 Windows 2000 的陷阱调度 (Trap Dispatching) 机制包括了 : 中断 (Interrupt), 延迟过程调用 (Deferred Procedure Call), 异步过程调用 (Asynchronous Procedure Call), 异常调度 (Exception Dispatching) 和系统服务调用 在 Intel x86 的 Windows 2000 系统中, 处理器执行 int 0x2e 指令来激活 Windows 系统服务调用 ; 在 Intel x86 的 Windows XP 系统中处理器却是通过执行 sysenter 指令使系统陷入系统服务调用程序中 ; 而在 AMD 的 Windows XP 中使用了指令 syscall 来实现同样的功能 我们暂时使用 x86 的 Windows 2000 为例来演示 我们先给出一个系统服务调用的模型 : mov eax, ServiceId lea edx, ParameterTable int 2eh ret ParamTableBytes 其中,ServiceId 清楚的说明了传递给系统服务调用的系统服务号, 内核使用这个标识符来查找系统服务调度表 (System Service Dispath Table) 中的对应系统服务信息 在系统服务调度表中的每一项包含了一个指向系统服务程序的指针, 我们 Hook 时就是修改这个指针使其指向我们自定义的系统服务的地址 ParameterTable 是传递的参数, 系统服务调用程序 KiSystemService 必须严格校验传递的每一个参数, 并将其参数从线程的用户堆栈中复制到系统的核心堆栈以备使用 由于执行 int 指令会导致陷阱发生, 所以在 Windows 2000 内的中断描述表 (IDT = Interrupt Descriptor Table) 中的 0x2e 项指向了系统服务调用程序 最后返回的 ParamTableBytes 是关于参数个数的信息 现在我们已经看得出来了, 系统服务调用只是一个接口, 它提供了将用户模式下的请求转发到 Windows 2000 内核的功能, 并引发处理器模式的切换 在用户看来, 系统服务调用接口就是 Windows 内核组件功能实现对外的一个界面 系统服务调用接口定义了 Windows 内核提供的大量服务 在 Windows 2000 中默认存在两个系统服务调度表, 它们对应了两类不同的系统服务 这两个系统服务调度表分别是 :KeServiceDescriptorTable 和 KeServiceDescriptorTableShadow

11 第 11 页 Windows 2000 执行程序服务对应于 NTDLL.dll 为我们提供的系统服务调用 子系统通过调用 NTDLL.dll 中的函数接口来实现它们需要的功能 系统服务调度表 KeServiceDescriptorTable 定义了在 ntoskrln.exe 中实现的系统服务, 通常在 kernel32.dll/advapi32.dll 中提供的函数接口均是调用的这个系统服务调度表中 同时存在于 Windows 2000 操作系统中还有在 Win32k.sys 中实现的相关 Win32USER 和 GDI 函数, 它们是属于另一类系统服务调用 与之对应的系统服务调度表为 KeServiceDescriptorTableShadow, 它提供了内核模式实现的 USER 和 GDI 服务 函数 KeAddSystemServiceTable 允许 Win32.sys 和其他设备驱动程序添加系统服务表 除了 Win32k.sys 服务表外, 使用 KeAddSystemServiceTable 添加的服务表会被同时复制到 KeServiceDescriptorTable 和 KeServiceDescriptorTableShadow 中去 我们可以看出这两类函数实现在服务调度上的区别 :Win32 内核 API 经过 Kernel32.dll/advapi32.dll 进入 NTDLL.dll 后使用 int 0x2e 中断进入内核, 最后在 Ntoskrnl.exe 中实现了真正的函数调用 ;Win32 USER/GDI API 直接通过 User32.dll/Gdi32.dll 进入了内核, 最后却是在 Win32k.sys 中实现了真正的函数调用 在此我们只讨论与 NTDLL.dll 相关的函数, 也就是我们例子中处理的函数 图 3-1 KeServiceDescriptorTable 的结构图

12 第 12 页 3.2 SSDT Hook 技术 图 3-2 KeServiceDescriptorTableShadow 的结构图 在此我们讨论 Hook 的对象仅限于由 Windows 2000 的 ntoskrnl.exe 提供的系统服务调用 Windows 2000 系统服务调用为内核模式的代码, 所以我们必须书写设备驱动程序来访问系统服务调度表 如果你对 Windows 2000 下基本设备驱动程序的书写不太清楚, 请查阅相关的书籍, 此处不做介绍 我们先回顾一下 Win32 内核 API 的实现流程 [1][15][16] Windows 2000 系统服务调用向用户提供了经过包装的用户模式的函数接口 ( 由 NTDLL.dll 提供 ) 当 Kernel32.dll/Advapi32.dll 中的函数执行时, 先调用 NTDLL.dll 中对应的相关接口, 经过参数检查后使用 int 0x2e 指令进入内核模式, 传递相关的服务号和参数列表 在 ntoskrnl.exe 中维护着两个表系统服务调度表 (System Service Dispath Table) 和系统服务参数表 (System Service Parameter Table), 其中 int 0x2e 指令就是通过服务号在 SSDT 中查询相关系统服务程序指针的 现在我们已经清楚了每个系统服务调用都对应一个服务号, 同时也对应一个服务程序的地址! 如果我们修改 SSDT 中的某个系统服务程序的入口地址为指向我们自定义的函数地址, 在执行完我们的代码后再执行原始系统服务地址处的代码, 这不就实现了对系统服务调用的了 Hook 吗? 对我们来说, 定位系统服务调度表是实现 Hook 的关键 在 Windows 2000 中有一个未公开的由 ntoskrnl.exe 导出的单元 :KeServiceDescriptorTable, 我们可以通过它来完成对 SSDT 的访问与修改 KeServiceDescriptorTable 对应于一个数据结构, 定义如下 : typedef struct SystemServiceDescriptorTable UINT *ServiceTableBase; UINT *ServiceCounterTableBase;

13 UINT NumberOfService; UCHAR *ParameterTableBase; SystemServiceDescriptorTable,*PSystemServiceDescriptorTable; 第 13 页 其中 ServiceTableBase 指向系统服务程序的地址,ParameterTableBase 则指向 SSPT 中的参数地址, 它们都包含了 NumberOfService 这么多个单元 我们只要由 KeServiceDescriptorTable 找到了我们关注的系统服务调用程序, 就可以修改它的 ServiceTableBase 参数来实现对相关系统服务调用的 Hook 了! 但是存在着一个问题, 对于同一个系统调用, 不同版本的 Windows 系统调用号都不同, 因此要解决此问题就要深入研究 一个方法就是进行操作系统版本的判断, 但 Windows 版本过多, 工作量太大 反汇编 Windows2000 和 WindowsXP 的 ZwSetValueKey 可以看到下面的代码 图 3-3 Windows2000(sp4)ZwSetValueKey 的反汇编代码 图 3-4 WindowsXP(sp2) ZwSetValueKey 的反汇编代码从上图我们可以知道 ZwSetValueKey 在开头的第二字节 ( 偏移一字节 ) 便是系统调用号 因此我们可以根据 ZwSetValueKey 的地址偏移一字节处取得系统调用号进行挂钩 为了编程的方便, 我们写成一个宏 :SYSCALL #define SYSCALL(_function) KeServiceDescriptorTable-> ServiceTableBase[*(PULONG)((PUCHAR)_function+1)] 另外一个问题是, 内核页面是只读的, 但可以通过修改 CR3 寄存器来达到可写的目的 下面的代码便可使内核页面可写 CLI MOV EAX, CR0 AND EAX, NOT 10000H MOV CR0, EAX

14 4 系统结构及模块划分 第 14 页 4.1 本软件的系统结构 本系统采用 SSDT Hook 技术, 所以使用驱动程序 另外, 考虑到无人登陆状态下也要进行注册表的拦截, 因此程序应该做成服务进行后台监控 但本系统应该有个人机界面, 就是监控中心来跟用户打交道 采用金山的所个进程协作模式, 本系统也分成多个模块 分别是 : 内核拦截模块 (KeHookReg.sys) 监控程序 (KeXRegSprX.exe) 控制中心 (KeXCenter.exe) 托盘程序 (KeXTray.exe) 和崩溃处理程序 (BugReport.dll) 结构示意如下图 : 颜色示意 : 浅蓝代表本程序模块黑色代表操作系统 (Windows) 淡紫代表其他程序 系统流程如下图所示 : 图 4-1 系统结构图

15 第 15 页 图 4-2 系统流程图 4.2 内核拦截模块 该模块完成对系统服务的拦截, 以及注册表键的过滤 是最核心的模块 驱动程序的结构 驱动程序 (Device Driver) 全称为 设备驱动程序, 是一种可以使计算机和设备通信的特殊程序, 可以说相当于硬件的接口, 操作系统只能通过这个接口, 才能控制硬件设备的工作, 假如某设备的驱动程序未能正确安装, 便不能正常工作 正因为这个原因, 驱动程序在系统中的所占的地位十分重要, 一般当操作系统安装完毕后, 首要的便是安装硬件设备的驱动程序 [2][5][6] 驱动程序从代码结构上讲应该包含三个例程 :DriverEntry DispatchIoctl 和 DriverUnload 一个驱动程序可以被多个类似的硬件使用, 但驱动程序的某些全局初始化操作只能在第一次被装入时执行一次 而 DriverEntry 例程就是用于这个目的 DriverEntry 是内核模式驱动程序主入口点常用的名字 I/O 管理器按下面方式调用该例程 : extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)

16 第 16 页... 当驱动程序被操作系统从内存中卸载时,IO 管理器便会调用 DriverUnload, 给驱动程序清理的机会 下面是该例程的原形 : VOID DriverUnload(IN PDRIVER_OBJECT pdrvobj); Windows 内部是使用包驱动的, 当驱动程序与其他用户程序交互时也使用 IRP( 输入 / 输出请求数据包 ) 下面是 IRP 的数据结构 : 图 4-3 IRP 的数据结构阴影部分代表不透明域,MdlAddress(PMDL) 域指向一个内存描述符表 (MDL), 该表描述了一个与该请求关联的用户模式缓冲区 Flags(ULONG) 域包含一些对驱动程序只读的标志 AssociatedIrp.SystemBuffer SystemBuffer 指针指向一个数据缓冲区, 该缓冲区位于内核模式的非分页内存中 对于 IRP_MJ_READ 和 IRP_MJ_WRITE 操作, 如果顶级设备指定 DO_BUFFERED_IO 标志, 则 I/O 管理器就创建这个数据缓冲区 对于 IRP_MJ_DEVICE_CONTROL 操作, 如果 I/O 控制功能代码指出需要缓冲区 ( 见第九章 ), 则 I/O 管理器就创建这个数据缓冲区 I/O 管理器把用户模式程序发送给驱动程序的数据复制到这个缓冲区, 这也是创建 IRP 过程的一部分 这些数据可以是与 WriteFile 调用有关的数据, 或者是 DeviceIoControl 调用中所谓的输入数据 对于读请求, 设备驱动程序把读出的数据填到这个缓冲区, 然后 I/O 管理器再把缓冲区的内容复制到用户模式缓冲区 对于指定了 METHOD_BUFFERED 的 I/O 控制操作, 驱动程序把所谓的输出数据放到这个缓冲区, 然后 I/O 管理器再把数据复制到用户模式的输出缓冲区 驱动程序通过 DispatchIoctl 来处理 IRP, 来达到交互的功能, 下面是该例程的原形 : NTSTATUS DispatchIoctl(PDEVICE_OBJECT pdevobj, PIRP pirp); 下图说明了驱动程序的代码结构 :

17 第 17 页 图 4-4 驱动程序的代码结构 Windows 驱动程序是分层的, 下面示意图说明了分层的驱动程序 图 4-5 WDM 分层驱动程序 IRP 从最顶层的 FiDO 传到最底层的 PDO, 处理完毕后再往上回传

18 4.2.2 对系统函数的挂接 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 第 18 页 首先要修改当前页属性, 使页 ( 内存 ) 可写, 然后再修改 SSDT, 最后恢复页属性 这个变完成了对系统函数的挂接, 为了方便使用, 写成了两个函数 AllHookOn( 挂接所有的要挂接的系统服务 ) 和 AllHookOff( 取消挂接 ) VOID AllHookOn() OldZwSetValueKey = (ZWSETVALUEKEY)SYSCALL(ZwSetValueKey); _asm CLI // 关中断, 这部很重要, 为了防止在修改 SSDT 被中断而产生错误 MOV EAX, CR0 AND EAX, NOT 10000H MOV CR0, EAX (ZWSETVALUEKEY)(SYSCALL(ZwSetValueKey)) = HookZwSetValueKey; _asm MOV EAX, CR0 OR EAX, 10000H MOV CR0, EAX STI bhookon = TRUE; AllHookOff() _asm CLI MOV EAX, CR0 AND EAX, NOT 10000H MOV CR0, EAX (ZWSETVALUEKEY)(SYSCALL(ZwSetValueKey))= (ZWSETVALUEKEY)OldZwSetValueKey; _asm MOV EAX, CR0 OR EAX, 10000H MOV CR0, EAX STI

19 bhookon = FALSE; 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 第 19 页 工作流程 图 4-6 工作流程 挂接函数的内部工作代码 :( 该代码便是上述工作流程的实例 ) NTSTATUS HookZwSetValueKey ( IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN ULONG TitleIndex OPTIONAL, IN ULONG Type,

20 IN PVOID Data, IN ULONG DataSize ) 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 第 20 页 char pch[1024]; ANSI_STRING astr; KeyList * pkey =NULL; GetFullName(KeyHandle,pch);// 获得键名 pkey = FindKey(pch);// 比较键名 if(pkey!=null) // 如果找到该键 if (pkey->cops==2)// 是否提示? return STATUS_ACCESS_DENIED; KeWaitForMutexObject(g_setValueKeyMutext,Executive,KernelMode,FALSE,0); // 在多个进程间同步, 因为会有多个进程访问注册表 RtlZeroMemory(g_visitData,sizeof(VisitData));// 设置好获得的信息 g_visitdata->upid = (ULONG)PsGetCurrentProcessId(); g_visitdata->utid = (ULONG)PsGetCurrentThreadId(); RtlUnicodeStringToAnsiString(&astr,ValueName,TRUE); strcpy(g_visitdata->subkey,astr.buffer); RtlFreeAnsiString(&astr); strcpy(g_visitdata->chkey,pch); g_visitdata->utype = Type; if (DataSize<1024) memcpy(g_visitdata->chdata,data,datasize); strcpy(g_visitdata->szdes,pkey->szdes); strcpy(g_visitdata->szop,pkey->szop); g_visitdata->idan=pkey->idan; KeSetEvent(NotifyEvent, 0, FALSE);// 通知上层应用程序 KeClearEvent(NotifyEvent); KeWaitForSingleObject(pDeteEvent,Executive,KernelMode,FALSE,0); // 等待上层应用程序的处理 KeClearEvent(pDeteEvent); if (g_detearray->crel==1) KeReleaseMutex(g_setValueKeyMutext,FALSE); return OldZwSetValueKey(KeyHandle,ValueName,TitleIndex, Type,Data,DataSize); DbgPrint("Find"); KeReleaseMutex(g_setValueKeyMutext,FALSE); return STATUS_ACCESS_DENIED;

21 else DbgPrint("not find"); 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 第 21 页 return OldZwSetValueKey(KeyHandle,ValueName,TitleIndex, Type,Data,DataSize); 所有的查找算法 :( 贴出该代码的原因是该代码体现出如何在多个进程和 CPU 之间同步, 怎么对比键值 ) 因为系统可能存在多个 CPU, 同步是必须的, 可以通过获得旋转锁来同步多个 CPU, 当然这时进程间的同步也就解决了 另外, 因为是通过请求旋转锁来进程同步的, 当前的 IRQL 会被提升到 DISPATCH_LEVEL 级, 这时如果使用 C 库函数 strcmp 之类的函数去进行键的对比就很可能会导致缺页错误, 从而导致系统蓝屏, 所以在程序中自己实现了键的对比, 是通过一个字节一个字节对比的, 没什么巧妙, 需要注意就是内存的使用, 必须在非分页内存中进行 KeyList * pretkey = NULL; ULONG uone,utwo,utwo2; char tmpkey[1024]; PLIST_ENTRY pentry; PLIST_ENTRY phead; KeyList * kl = NULL; BOOLEAN bfind; KIRQL oldirql; if (pch==null) return NULL; memset(tmpkey,0,1024); strcpy(tmpkey,pch); _strupr(tmpkey); utwo = strlen(tmpkey); KeAcquireSpinLock(&g_KeyLock,&oldirql);// 请求旋转锁 if (!IsListEmpty(&g_KeyListHead))// 如果链表不为空 pentry = NULL; phead = &g_keylisthead; for (pentry=phead->flink;pentry!=phead;pentry=pentry->flink) // 检查每个结点 kl = CONTAINING_RECORD(pEntry,KeyList,next);

22 // 求串长度 uone = 0; utwo2=utwo; bfind = TRUE;// 假设找到 while (kl->chkey[uone]!='\0') uone++; 第 22 页 if (utwo2<uone)//pch 较短 continue; while(uone>0) // 遍历对比整个字符串 if (kl->chkey[uone]!=tmpkey[utwo2]) // 发现不同 bfind = FALSE; break; uone--; utwo2--; if (bfind==true) KeReleaseSpinLock(&g_KeyLock,oldirql); return kl; KeReleaseSpinLock(&g_KeyLock,oldirql); return NULL; 上面还解决了一个问题, 那就是注册表键名的获取 在 Win32 API 中, 管理内核对象是通过 HANDLE, 而在内核内部是通过 Object 来管理内核对象的 下面是 Object 属性结构 : [10][11][12][18] typedef struct _OBJECT_ATTRIBUTES ULONG Length;// 结构长度 HANDLE RootDirectory;// 根目录 UNICODE_STRING *ObjectName;//Object 的名称 ULONG Attributes;// 属性 PSECURITY_DESCRIPTOR SecurityDescriptor;// 安全描述符 PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService; OBJECT_ATTRIBUTES,*POBJECT_ATTRIBUTES 我们感兴趣的是 ObjectName 成员, 因为它包含了注册表名 回到问题上, 我们拦截

23 第 23 页 ZwSetValueKey 后, 获得的是操作的注册表键的 Handle, 我们使用内核例程 ObReferenceObjectByHandle 便可以获得对应的 Object 的内存地址, 原则上可以直接取得 ObjectName, 但 OBJECT_ATTRIBUTES 是不公开的结构, 为了跨越不同的版本, 我们使用一个未公开的内核例程 ObQueryNameString 变可以获得 ObjectName 了 与上层程序的通信 本模块与上层程序通信是通过 IOCTL 完成的, 下面列出所有的 IOCTL: #define IOCTL_SETVALUEKEY \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x830, METHOD_BUFFERED, FILE_ANY_ACCESS) 读取访问信息 #define IOCTL_MGRVISIT \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x831, METHOD_BUFFERED, FILE_ANY_ACCESS) 裁决一个进程的访问 #define IOCTL_HOOKON \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x832, METHOD_BUFFERED, FILE_ANY_ACCESS) 开始拦截 #define IOCTL_HOOKOFF \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x833, METHOD_BUFFERED, FILE_ANY_ACCESS) 暂停拦截 #define IOCTL_ADDARUL \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x834, METHOD_BUFFERED, FILE_ANY_ACCESS) 添加一条规则 #define IOCTL_REMOVEARUL \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x835, METHOD_BUFFERED, FILE_ANY_ACCESS) 移除一条规则 #define IOCTL_DELALLRULS \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x836, METHOD_BUFFERED, FILE_ANY_ACCESS) 移除所有的规则

24 4.2.5 驱动程序的调试 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 第 24 页 调试驱动程序有多种方式, 包括日志输出调试, 使用内核调试器 因为 SoftICE 不再开发, 在本次开发中选用了 WinDBG 作为调试工具 使用 WinDBG 需要先安装符号文件, 并且必须使用两台机器进行调试 把驱动程序拷贝到目标机器, 重新启动, 然后使用 WinDBG 连接到目标机器即可 常用的命令如下 : bp/bu/bm 下断点, 例如 bp nt!zwsetvaluekey, 在 ntoskrnl 的 ZwSetValueKey 上下断点 t 单步执行 u 显示反汇编 dt 显示结构提 d 显示内存 r 显示或者修改寄存器 s 搜索内存 4.3 后台监控模块 后台监控模块主要完成拦截模块的载入, 处理拦截模块返回的信息 该模块是作为 Windows 后台服务工作的, 因为要在无人登陆的环境下工作 ( 为了方便在答辩上演示, 该版本只是一个普通的后台程序 ) 该模块的流程非常简单 下图说明 : 图 4-7 监控流程

25 系统使用类列表 : CIni CKeXHelper CRulHelper CDriver CKeXDriver KeXShareMEM 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) ini 文件操作类系统辅助类规则文件操作类驱动程序操作类核心驱动操作类共享内存操作类 第 25 页 图 4-8 监控模块顶级类图 规则数据 typedef struct _RulData char chkey[1024];// 键名 char szdes[256];// 规则描述 char szops[256];// 提示操作 unsigned int idan;// 风险度 #define KE_ASK 1// 询问 #define KE_HOLDUP 2// 拦截 char cops;// 当出发规则后的操作 RulData; 存储的规则数据 typedef struct _StoreRulData RulData rd; char szrulname[25];// 规则名称

26 #define RUL_USEING #define RUL_DISABLE char cstatus;// 规则状态 StoreRulData; 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 1// 规则启用 2// 规则禁用 第 26 页 拦截后的操作数据 typedef struct _VisitData ULONG upid;// 进程 ID ULONG utid;// 线程 ID char chkey[1024];// 主键 char subkey[256];// 子键 ULONG utype;// 键值类型 char chdata[1024];// 健值数据 char szdes[256];// 描述 char szop[256];// 提示操作 unsigned int idan;// 风险度 VisitData; // 操作 typedef struct _DeteData ULONG utid;// 线程 ID char crel;// 操作 DeteData; 进程相关信息 typedef struct _ProcInfo VisitData vd; char chpath[256];// 进程路径 // 状态 0: 正在处理 1: 通过 2: 拒绝 ULONG ustatus;// 状态 ProcInfo; 消息结构 typedef struct _KeXMsg #define KEX_NULL 0// 空消息 // 以下消息针对 KeXRegSprX 监控进程 #define KEX_QUIT 1// 退出程序 #define KEX_STARTUP 2// 程序启动 #define KEX_SUCC 3// 操作成功

27 #define KEX_FAIL 5// 操作失败 #define KEX_START_CTL 11// 开始监控 #define KEX_STOP_CTL 12// 停止监控 #define KEX_GET_CTLSTATUS 13// 获得当前状态 #define KEX_ADDARUL 21// 添加一条规则 #define KEX_REMOVEARUL 22// 移除一条规则 #define KEX_GETRULNUM 23// 获得规则总数 #define KEX_GETARUL 24// 获得一条规则 #define KEX_DISABLEARUL 25// 禁用一条规则 #define KEX_ENABLEARUL 26// 启用一条规则 #define KEX_RELOADRUL 27// 重新加载规则 #define KEX_LOAD 第 27 页 // 以下消息针对 KeXCenter #define KEX_STATUS_STARTCTL #define KEX_STATUS_STOPCTL #define KEX_CTRL_PASS #define KEX_CTRL_REF 101// 监控开启 102// 监控关闭 150// 进程通过裁决 151// 进程被拦截 DWORD dwmsg;// 消息类型 DWORD dwcookie;// 消息跟踪 char chdata[4* ];// 消息数据 KeXMsg; 日志结构 typedef struct _LogEntry #define KEX_LOG_WARN 1 #define KEX_LOG_COM 2 char clogtype;// 日志类型 SYSTEMTIME st;// 日志日期 char chdata[1024];// 日志内容 LogEntry; // 异常钩子函数 typedef LONG (WINAPI *KEXERRORFUN)(struct _EXCEPTION_POINTERS *); 规则存储结构图 :

28 第 28 页 图 4-9 规则存储结构图 4.4 控制中心模块 控制中心是与用户打交道的接口, 它主要提供的功能是日志查看, 规则的操作以及系统的配置 图 4-10 控制中心层次图

29 第 29 页 4.5 托盘模块 托盘程序主要是启动监控中心 图 4-11 托盘程序执行流程 5 系统使用与系统测试 5.1 系统使用 1: 程序的启动 : 双击目录中的 KeXTray.exe 便可启动程序, 并在系统托盘区显示一个控制图标, 如 : 图 5-1 2: 设置保护的注册表键 : 在控制图标上点右键, 然后选择显示监控中心便出现如下窗口 :

30 第 30 页 图 5-2 选择规则设置, 便切换到规则设置页, 如下图 : 图 5-3 通过选择列表中的规则便可以对规则进行相应的操作 该页上的功能包括 : 添加 : 添加一条规则

31 修改 : 修改一条规则 删除 : 删除一条规则 启用 : 起用一条规则 禁用 : 禁用一条规则 导入 : 从外部规则库文件导入规则 导出 : 把规则保存到另外一个文件中 添加规则操作 : 先点击添加规则, 出现如图所示的窗口 : 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 第 31 页 图 5-4 其中 : 规则名称 : 为方便区分规则而填写的资料 规则描述 : 对该规则的一个详细描述 注册表键 : 要保护的注册表键, 不应该包括根键 例子请见系统附带的三条规则 建议操作 : 当规则被触发时建议的采取的操作 起用规则 : 当规则被添加后是否立刻启用规则, 建议勾选此选项 询问 / 拦截 : 当规则被触发时采取的操作, 当选择询问时, 会出现一个对话框询问用户采取的措施 填写完上述资料便点确定保存规则 3: 监控开启和关闭 : 要开启或者关闭监控, 请使用监控中心的菜单或者控制图标的菜单 4: 拦截后的操作 : 当有应用程序修改被保护的键并且规则设置为询问时, 就会出现下面对话框 :

32 第 32 页 图 5-5 详细按钮包含详细信息, 同意修改表示同意程序修改, 拒绝修改表示拒绝应用程序修改注册表键 5: 系统的退出 : 使用控制图标的菜单便可退出系统 5.2 系统测试 下面提供两个黑盒测试用例 : 测试用例一 : 内容 : 单个进程访问受限注册表键 运行 msconfig, 切换到启动页, 随便钩选一个, 点应用按钮 结果 : 弹出询问对话框, 询问用户是否拒绝, 点击拒绝, 再运行 regedit, 查看相应的注册表键, 结果正确 测试用例二 : 内容 : 多个进程同时访问受限注册表键 运行 msconfig 切换到启动页, 随便钩选个, 再运行 regedit, 点开 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 键, 然后新建字符串值, 弹出询问对话框, 这是点击 msconfig 里的应用按钮, 并没有新的询问对话框, 在询问对话框里点拒绝,regedit 显示写入错误, 这时弹出新的询问对话框, 提示 msconfig 访问受限注册表键, 点同意, 写入成功, 结果正确

33 5.3 设计中遇到的问题 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 第 33 页 1 编写驱动程序中遇到的语法错误 驱动程序是使用纯 C 语言编写的, 但我学习的是 C++ 语言, 语法上很接近所以一开始编写驱动程序出现了这个低级的错误 C 语言的所有变量声明必须放在函数的开头, 而 C++ 则没这个规定 否则将产生编译错误 2 驱动程序中 IRQL 和内存问题导致系统崩溃 开始编写时, 并未注意到这个问题, 主要是第一次编写, 没有经验 在对比键值函数 FindKey 里使用 KeAcquireSpinLock 进行同步, 第一次完成时, 在运行一段时间后 ( 大概 10S) 系统蓝屏 后来在一本书看到了问题, 当使用 KeAcquireSpinLock 进行同步时, 当前 IRQL 会提升到 DISPATCH_LEVEL, 但链表却生存在分页内存中, 但这部分内存被换入硬盘后 ( 即不在物理内存 ) 而访问这部分内存, 将会产生一个缺页中断, 但页调度程序是运行在 APC_LEVEL, 这是因为无法执行页调度程序, 系统便执行 BugCheck(), 也就是蓝屏报错 将链表分配到非分页内存即可解决 图 5-5 系统蓝屏修正该错误的方法是把所有的内存分配方式改为 NonPagedPool, 即可 3 PSAPI.H 无法打开编译出现下面错误提示 :fatal error C1083: Cannot open include file: 'PSAPI.H': No such file or directory Error executing cl.exe. 因为 vc6 默认不包含该头文件, 安装 windows 2003 r2 sdk 即可 然后在 vc6 的 options 的 Directories 里填如 SDK 的安装路径 再编译即可 4 驱动程序驻留内存, 导致其它程序无限等待当监控程序意外退出时, 驱动程序会驻留内存继续工作, 这时当有其它程序访问受限制的注册表键时将会导致无限等待, 即使使用任务管理器也无法结束 解决方法是当监控程序意外退出时卸载掉驱动 而系统中独立出一个模块 BugReport 主要是调用 SetUnhandledExceptionFilter 设置未处理异常钩子回调函数

34 第 34 页 5 驱动程序移位再编译后加载失败把驱动工程移动到别的地方, 在编译后加载失败 运行 regedit, 搜索 KeHookReg, 把找到的键全部删除 5.4 可改进之处 1 该系统拦截的用户层的程序, 若在在驱动内部访问注册表则无法拦截, 可以使用 Hook PE 技术来拦截驱动访问注册表 2 附带更多的规则, 这样软件安装完毕不需要更多的设置便可使用 3 提供注册表优化 清理 备份和还原功能 4 兼容最新的 Windows 操作系统 Vista

35 第 35 页 参考文献 [1] Sven B.Schreiber Undocumented Windows 2000 Secrets. 美国,1999 [2] 沃尔特.oney Microsoft Windows 驱动程序模型设计. 美国, 微软出版社,1999 [3] Prasad Dabak,Milind Borate Sandeep Phadke.Undocumented_Windows_NT. 美国,1999 [4] David A. Solomon, Mark Russinovich.Inside Microsoft Windows 美国 Microsoft Press,2000 [5] Unknow.Windows2000 驱动程序设计指南. 美国,1998 [6] Chris Cant.Windows WMD 设备驱动程序开发指南. 美国,1999 [7] Brief. 剖析 Windows 系统服务调用机制.Internet, [8] SoBeIt. 挂钩 Windows API.Internet, [9] sinister. 内核级 HOOK 的几种实现与应用.Internet, [10] tombkeeper. 获取 Windows 系统的内核变量.Internet, [11] tombkeeper. 对 Native API NtSystemDebugControl 的分析.Internet, [12] MustBE. 获得进程的 EPROCESS.Internet, Internet, [13] Greg Hoglund. 一个修改 NT 内核的真实 RootKit.Internet, [14] crazylord.playing with Windows /dev/(k)mem.internet, [15] Refdom. 谈谈 WIN2K 的服务.Internet, [16] tombkeeper.the NT Insider:Stop Interrupting Me - Of PICs and APICs.Internet, [17] sunwear. 浅析本机 API.Internet, [18] WebCrazy. 剖析 Windows NT/2000 内核对象组织.Internet, [19] tomh.win2k 下的 Api 函数的拦截.Internet, [20] SoBeIt.Windows 异常处理流程.Internet,

36 第 36 页 英文原文 Hooking the native API and controlling process creation on a system-wide basis Introduction Recently I came across the description of a quite interesting security product, called Sanctuary. This product prevents execution of any program that does not appear on the list of software that is allowed to run on a particular machine. As a result, the PC user is protected against various add-on spyware, worms and trojans - even if some piece of malware finds its way to his/her computer, it has no chance of being executed, and, hence, has no chance of causing any damage to the machine. Certainly, I found this feature interesting, and, after a bit of thinking, came up with my own implementation of it. Therefore, this article describes how process creation can be programmatically monitored and controlled on a system-wide basis by means of hooking the native API. This article makes a "bold" assumption that the target process is being created by user-mode code (shell functions, CreateProcess(), manual process creation as a sequence of native API calls, etc). Although, theoretically, a process may be launched by kernel-mode code, such possibility is, for practical purposes, negligible, so we don't have to worry about it. Why??? Try to think logically - in order to launch a process from the kernel mode, one has to load a driver, which, in turn, implies execution of some user-mode code, in the first place. Therefore, in order to prevent execution of unauthorized programs, we can safely limit ourselves to controlling process creation by user-mode code on a system-wide basis. Defining our strategy First of all, let's decide what we have to do in order to monitor and control process creation on a system-wide basis. Process creation is a fairly complex thing, which involves quite a lot of work (if you don't believe me, you can disassemble CreateProcess(), so you will see it with your own eyes). In order to launch a process, the following steps have to be taken: 1. Executable file has to be opened for FILE_EXECUTE access. 2. Executable image has to be loaded into RAM. 3. Process Executive Object (EPROCESS, KPROCESS and PEB structures) has to be set up. 4. Address space for the newly created process has to be allocated.

37 第 37 页 5. Thread Executive Object for the primary thread of the process (ETHREAD, KTHREAD and TEB structures) has to be set up. 6. Stack for the primary thread has to be allocated. 7. Execution context for the primary thread of the process has to be set up. 8. Win32 subsystem has to be informed about the new process. In order for any of these steps to be successful, all previous steps have to be accomplished successfully (you cannot set up an Executive Process Object without a handle to the executable section; you cannot map an executable section without file handle, etc). Therefore, if we decide to abort any of these steps, all subsequent ones will fail as well, so that process creation will get aborted. It is understandable that all the above steps are taken by means of calling certain native API functions. Therefore, in order to monitor and control process creation, all we have to do is to hook those API functions that cannot be bypassed by the code that is about to launch a new process. Which native API functions should we hook? Although NtCreateProcess() seems to be the most obvious answer to the question, this answer is wrong - it is possible to create a process without calling this function. For example, CreateProcess() sets up process-related kernel-mode structures without calling NtCreateProcess(). Therefore, hooking NtCreateProcess() is of no help to us. In order to monitor process creation, we have to hook either NtCreateFile() and NtOpenFile(), or NtCreateSection() - there is absolutely no way to run any executable file without making these API calls. If we decide to monitor calls to NtCreateFile() and NtOpenFile(), we have to make a distinction between process creation and regular file IO operations. This task is not always easy. For example, what should we do if some executable file is being opened for FILE_ALL_ACCESS??? Is it just an IO operation or is it a part of a process creation??? It is hard to make any judgment at this point - we need to see what the calling thread is about to do next. Therefore, hooking NtCreateFile() and NtOpenFile() is not the best possible option. Hooking NtCreateSection() is a much more reasonable thing to do - if we intercept a call to NtCreateSection() with the request of mapping the executable file as an image (SEC_IMAGE attribute), combined with the request of page protection that allows execution, we can be sure that the process is about to be launched. At this point we are able to take a decision, and, in case if we don't want the process to be created, make NtCreateSection() return STATUS_ACCESS_DENIED. Therefore, in order to gain full control over process creation on the target machine, all we have to do is to hook NtCreateSection() on a system-wide basis. Like any other stub from ntdll.dll, NtCreateSection() loads EAX with the service index, makes EDX point to function parameters, and transfers execution to KiDispatchService() kernel-mode routine (this is done by the INT 0x2E instruction under Windows NT/2000 and SYSENTER instruction under Windows XP). After validating function parameters, KiDispatchService() transfers execution to the actual implementation of the service, the address of which is available from the Service Descriptor Table (pointer to this table is

38 第 38 页 exported by ntoskrnl.exe as the KeServiceDescriptorTable variable, so it is available to kernel-mode drivers). The Service Descriptor Table is described by the following structure: struct SYS_SERVICE_TABLE void **ServiceTable; unsigned long CounterTable; unsigned long ServiceLimit; void **ArgumentsTable; ; The ServiceTable field of this structure points to the array that holds addresses of all the functions that implement system services. Therefore, all we have to do in order to hook any native API function on a system-wide basis is to write the address of our proxy function to the i-th entry (i is the service index) of the array, pointed to by the ServiceTable field of KeServiceDescriptorTable. Looks like now we know everything we need to know in order to monitor and control process creation on a system-wide basis. Let's proceed to the actual work. Controlling process creation Our solution consists of a kernel-mode driver and a user-mode application. In order to start monitoring process creation, our application passes the service index, corresponding to NtCreateSection(), plus the address of the exchange buffer, to our driver. This is done by the following code: //open device device=createfile("\\\\.\\protector",generic_read GENERIC_WRITE, 0,0,OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM,0); // get index of NtCreateSection, and pass it to the driver, along with the //address of output buffer DWORD * addr=(dword *) (1+(DWORD)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtCreateSection")); ZeroMemory(outputbuff,256); controlbuff[0]=addr[0]; controlbuff[1]=(dword)&outputbuff[0]; DeviceIoControl(device,1000,controlbuff,256,controlbuff,256,&dw,0); The code is almost self-explanatory - the only thing that deserves a bit of attention is the way we get the service index. All stubs from ntdll.dll start with the line MOV EAX, ServiceIndex, which applies to any version and flavour of Windows NT. This is a 5-byte instruction, with MOV EAX opcode as the first byte and the service index as remaining 4 bytes. Therefore, in order to get the service index that corresponds to some particular native API

39 第 39 页 function, all you have to do is to read 4 bytes from the address, located 1 byte away from the beginning of the stub. Now let's look at what our driver does when it receives IOCTL from our application: NTSTATUS DrvDispatch(IN PDEVICE_OBJECT device,in PIRP Irp) UCHAR*buff=0; ULONG a,base; PIO_STACK_LOCATION loc=iogetcurrentirpstacklocation(irp); if(loc->parameters.deviceiocontrol.iocontrolcode==1000) buff=(uchar*)irp->associatedirp.systembuffer; // hook service dispatch table memmove(&index,buff,4); a=4*index+(ulong)keservicedescriptortable->servicetable; base=(ulong)mmmapiospace(mmgetphysicaladdress((void*)a),4,0); a=(ulong)&proxy; _asm mov eax,base mov ebx,dword ptr[eax] mov RealCallee,ebx mov ebx,a mov dword ptr[eax],ebx MmUnmapIoSpace(base,4); memmove(&a,&buff[4],4); output=(char*)mmmapiospace(mmgetphysicaladdress((void*)a),256,0); Irp->IoStatus.Status=0; IoCompleteRequest(Irp,IO_NO_INCREMENT); return 0; As you can see, there is nothing special here either - we just map the exchange buffer into the kernel address space by MmMapIoSpace(), plus write the address of our proxy function to the Service Table (certainly, we do it after having saved the address of the actual service

40 第 40 页 implementation in the RealCallee global variable). In order to overwrite the appropriate entry of the Service Table, we map the target address with MmMapIoSpace(). Why do we do it? After all, we already have an access to the Service Table, don't we? The problem is that the Service Table may reside in read-only memory. Therefore, we have to check whether we have write access to the target page, and if we don't, we have to change page protection before overwriting the Service Table. Too much work, don't you think? Therefore, we just map our target address with MmMapIoSpace(), so we don't have to worry about page protection any more - from now on we can take write access to the target page for granted. Now let's look at our proxy function: //this function decides whether we should //allow NtCreateSection() call to be successfull ULONG stdcall check(pulong arg) HANDLE hand=0;pfile_object file=0; POBJECT_HANDLE_INFORMATION info;ulong a;char*buff; ANSI_STRING str; LARGE_INTEGER li;li.quadpart=-10000; //check the flags. If PAGE_EXECUTE access to the section is not requested, //it does not make sense to be bothered about it if((arg[4]&0xf0)==0)return 1; if((arg[5]&0x )==0)return 1; //get the file name via the file handle hand=(handle)arg[6]; ObReferenceObjectByHandle(hand,0,0,KernelMode,&file,&info); if(!file)return 1; RtlUnicodeStringToAnsiString(&str,&file->FileName,1); a=str.length;buff=str.buffer; while(1) if(buff[a]=='.')a++;break; a--; ObDereferenceObject(file); //if it is not executable, it does not make sense to be bothered about it //return 1 if(_stricmp(&buff[a],"exe"))rtlfreeansistring(&str);return 1; //now we are going to ask user's opinion.

41 //Write file name to the buffer, and wait until //the user indicates the response //(1 as a first DWORD means we can proceed) 第 41 页 //synchronize access to the buffer KeWaitForSingleObject(&event,Executive,KernelMode,0,0); // set first 2 DWORD of a buffer to zero, // copy the string into the buffer, and loop // until the user sets first DWORD to 1. // The value of the second DWORD indicates user's //response strcpy(&output[8],buff); RtlFreeAnsiString(&str); a=1; memmove(&output[0],&a,4); while(1) KeDelayExecutionThread(KernelMode,0,&li); memmove(&a,&output[0],4); if(!a)break; memmove(&a,&output[4],4); KeSetEvent(&event,0,0); return a; //just saves execution contect and calls check() _declspec(naked) Proxy() _asm //save execution contect and calls check() //-the rest depends upon the value check() returns // if it is 1, proceed to the actual callee. //Otherwise,return STATUS_ACCESS_DENIED pushfd pushad mov ebx,esp add ebx,40 push ebx

42 call check cmp eax,1 jne block 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 第 42 页 //proceed to the actual callee popad popfd jmp RealCallee //return STATUS_ACCESS_DENIED block:popad mov ebx, dword ptr[esp+8] mov dword ptr[ebx],0 mov eax,0xc l popfd ret 32 Proxy() saves registers and flags, pushes a pointer to the service parameters on the stack, and calls check(). The rest depends on the value check() returns. If check() returns TRUE (i.e. we want to proceed with the request), Proxy() restores registers and flags, and transfers control to the service implementation. Otherwise, Proxy() writes STATUS_ACCESS_DENIED to EAX, restores ESP and returns - from the caller's perspective it looks like NtCreateSection() call had failed with STATUS_ACCESS_DENIED error status. How does check() make its decision? Once it receives a pointer to the service parameters as an argument, it can examine these parameters. First of all, it checks flags and attributes - if a section is not requested to be mapped as an executable image, or if the requested page protection does not allow execution, we can be sure that NtCreateSection() call has nothing to do with process creation. In such a case check() returns TRUE straight away. Otherwise, it checks the extension of the underlying file - after all, the SEC_IMAGE attribute and the page protection that allows execution may be requested for mapping some DLL file. If the underlying file is not a.exe file, check() returns TRUE. Otherwise, it gives the user-mode code a chance to take its decision. Therefore, it just writes the file name and the path to the exchange buffer, and polls it until it gets the response. Before opening our driver, our application creates a thread that runs the following function: void thread() DWORD a,x; char msgbuff[512]; while(1)

43 memmove(&a,&outputbuff[0],4); 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 第 43 页 //if nothing is there, Sleep() 10 ms and check again if(!a)sleep(10);continue; // looks like our permission is asked. If the file // in question is already in the white list, // give a positive response char*name=(char*)&outputbuff[8]; for(x=0;x<stringcount;x++) if(!stricmp(name,strings[x]))a=1;goto skip; // ask user's permission to run the program strcpy(msgbuff, "Do you want to run "); strcat(msgbuff,&outputbuff[8]); // if user's reply is positive, add the program to the white list if(idyes==messagebox(0, msgbuff,"warning", MB_YESNO MB_ICONQUESTION 0x L)) a=1; strings[stringcount]=_strdup(name);stringcount++; else a=0; // write response to the buffer, and driver will get it skip:memmove(&outputbuff[4],&a,4); //tell the driver to go ahead a=0; memmove(&outputbuff[0],&a,4); This code is self-explanatory - our thread polls the exchange buffer every 10 ms. If it discovers that our driver has posted its request to the buffer, it checks the file name and path against the list of programs that are allowed to run on the machine. If the match is found, it gives an OK response straight away. Otherwise, it displays a message box, asking the user whether he allows the program in question to be executed. If the response is positive, we add the program in question to the list of software that is allowed to run on the machine. Finally, we write the user response to the buffer, i.e., pass it to our driver. Therefore, the user gets the full control of processes creation on his PC - as long as our program runs, there is absolutely no way to launch any process on the PC without asking user permission.

44 第 44 页 As you can see, we make the kernel-mode code wait for the user response. Is it really a wise thing to do??? In order to answer this question, you have to ask yourself whether you are blocking any critical system resources -everything depends on the situation. In our case everything happens at IRQL PASSIVE_LEVEL, dealing with IRPs is not involved, and the thread that has to wait for the user response is not of critical importance. Therefore, in our case everything works fine. However, this sample is written for demonstration purposes only. In order to make any practical use of it, it makes sense to rewrite our application as an auto-start service. In such a case, I suggest we should make an exemption for the LocalSystem account, and, in case if NtCreateSection() is called in the context of a thread with LocalSystem account privileges, proceed to the actual service implementation without performing any checks -after all, LocalSystem account runs only those executables that are specified in the Registry. Therefore, such an exemption is not going to compromise our security. Conclusion In conclusion I must say that hooking the native API is definitely one the most powerful programming techniques that ever existed. This article gives you just one example of what can be achieved by hooking the native API - as you can see, we managed to prevent execution of unauthorized programs by hooking a single(!!!) native API function. You can extend this approach further, and gain full control over hardware devices, file IO operation, network traffic, etc. However, our current solution is not going to work for kernel-mode API callers - once kernel-mode code is allowed to call ntoskrnl.exe's exports directly, these calls don't need to go via the the system service dispatcher. Therefore, in my next article we are going to hook ntoskrnl.exe itself. This sample has been successfully tested on several machines that run Windows XP SP2. Although I haven't yet tested it under any other environment, I believe that it should work fine everywhere - after all, it does not use any structure that may be system-specific. In order to run the sample, all you have to do is to place protector.exe and protector.sys to the same directory, and run protector.exe. Until protector.exe's application window is closed, you will be prompted every time you attempt running any executable. I would highly appreciate if you send me an with your comments and suggestions.

45 第 45 页 中文译文 系统范围内挂钩本地 API 控制进程的创建 最近我碰到的描述相当有趣的安全产品, 叫避难所. 这个产品不允许执行任何程式, 并没有出现在名单上的软件, 即允许运行在一个特定的程序. 这样电脑用户就可以免受各种间谍蠕虫和木马的侵袭 - 即使有一块恶意的认定方式, 以他 / 她的电脑, 它已没有机会再被执行, 因此, 没有机会造成任何破坏. 当然, 我发现这个有趣的特点, 并且经过一点思考, 提出了自己的实施方案. 因此, 这篇文章描述如何实现过程, 可以以编程的方式监测与控制系统的基础上, 挂钩本地 API. 这篇文章提出了 " 大胆 " 假设目标进程正在创建用户模式代码 ( 外壳函数, CreateProcess(), 最终结果还是调用本地 API 等 ). 虽然, 从理论上说, 一个进程可能调用内核模式代码, 这种可能性是出于实际目的, 微不足道的, 所以, 我们不用担心. 为什么??? 想想实际情况, 为启动程序, 由内核模式, 必须装载了驱动程序, 这反过来意味着, 应该先执行用户模式代码. 因此, 为了防止执行未经许可的程序, 我们可以安全地把自己局限在控制进程创建的用户模式代码一个系统范围内. 确定我们的策略 首先, 让我们决定我们要做的, 建立一个监测和控制过程, 在系统范围内. 创建进程是一个相当复杂的事, 其中涉及相当多的工作 ( 如果你不相信我, 你可以反汇编 CreateProcess( ) ). 为了启动一个进程, 之后必须采取步骤 : 可执行文件必须以 FILE_EXECUTE 方式打开 2 执行影象必须加载进 RAM 3 进程对象 (EPROCESS,KPROCESS 和 PEB 结构体 ) 被创建 4 分配进程的地址空间 5 主线程对象 (ETHREAD,KTHREAD 和 TEB 结构体 ) 被创建 6 分配主线程栈 7 进程的主线程的上下文被创建 8 win32 子系统记录新进程信息 为了使这些步骤, 要取得成功, 之前所有的步骤都必须成功地完成了 ( 你不能设立一个进程过程对象无效句柄可执行科 ; 你不能映射一个没有句柄的执行对象等 ). 因此, 如果我们决定退出任何这些步骤, 随后所有的失败一样, 使创建过程会胎死腹中. 这是可以理解的, 所有上述步骤, 采取的手段是修改某些本地 API 函数. 因此, 为了监测和控制进程创建, 我们所要做的是挂钩那些 API 函数, 不能绕开的代码, 即将创建一项新的进程. 那个本地 API 要挂钩? 虽然 NtCreateProcess ( ) 似乎是最明显的答案, 这个答案是错的, 创建一

46 第 46 页 个进程可能不会调用此函数. 例如, CreateProcess( ) 设置与进程相关的内核模式结构, 而不需要 NtCreateProcess ( ). 因此, 挂钩 NtCreateProcess ( ) 对我们没有帮助. 为了监视进程的创建, 我们要么挂钩 NtCreateFile ( ) 和 NtOpenFile ( ), 或者 NtCreateSection ( ), 创建进程是绝对要调用上述 API 的. 如果我们决定要挂钩 NtCreateFile ( ) 和 NtOpenFile ( ), 那我们要区分, 创建进程和普通的文件 IO 的行动. 这项任务并不容易. 举例来说, 我们应该怎样做, 如果一些可执行文件正以 file_all_access 打开呢??? 只是一个 IO 的操作还是一个进程创建??? 很难作出判断, 在这一点我们必须清楚地看到哪些调用线程即将做什么. 因此, 挂钩 NtCreateFile ( ) 和 NtOpenFile ( ) 不是最佳的选择. 挂钩 NtCreateSection ( ) 是一个更为合理的事情, 如果我们拦截 NtCreateSection( ) 掉用请求映射可执行文件作为图像 ( sec_image 属性 ), 结合请求页面保护, 使执行我们可以肯定, 这一进程即将执行. 在这点上我们是能够作出判断的, 并如果, 如果我们不希望这一进程创造, 使 NtCreateSection( ) 返回 status_access_denied. 因此, 为了充分控制进程在目标机器上创建, 我们所要做的是在全局范围内钩钩 NtCreateSection( ). 象 ntdll.dll 其它调用代理那样 NtCreateSection ( ) 使用 EAX 加载系统服务索引号,EDX 指向函数参数, 然后转换到内核模式执行 KiDiSpatchService ( ) 内核模式例程 ( 在 windows2000 中由 int 2eH 实现, 在 WindowsXP 则由 sysenter 实现 ). 经过验证功能参数后, KiDiSpatchService ( ) 的执行转移到实际执行的服务, 地势可从服务描述表 ( 指向这个表是作为 ntoskrnl.exe keservicedescriptortable 的导出变量, 因此它是提供给内核模式驱动 ). 服务描述表的结构如下 : servicetable 这个结构体的地址数组完成的全部功能, 系统服务的实现. 因此, 我们要做的, 任何在全局范围内挂钩本地 API 函数基础是改写 KeServiceDescriptorTable 的 servicetable 地址使之转向我们的代理函数 像现在, 我们知道我们需要知道的一切, 在全局范围内监控进程的创建. 让我们开始实际工作. 我们的解决方案包含了内核模式驱动程序和用户模式程序. 为了开始监测过程中创造, 我们的程序过滤掉 ntcreatesection ( ) 相应的服务索引, 再加上地址的交换缓冲区, 我们的驱动. 这是由以下代码 : 代码不需要太多的注释, 唯一值得有点注意的是, 我们得到服务索引的方式.ntdll.dll 里面的所有服务代理的开头都是 mov eax, serviceindex, 它适用于任何版本 Windows NT. 这是一个 5 字节的指令, 其中 MOV EAX opcode 作为第一字节和服务索引作为剩余的 4 个字节. 因此, 为了得到服务索引号, 定位与本地 API, 取得后四个字节. 现在让我们看看, 我们的驱动程序处理我们的应用程序发出的 ioctl: 如你所见, 没有什么特别到这里, 我们只映射交换缓冲到内核地址空间通过调用 MmMapIoSpace ( ), 再加上写的地址是我们的代理函数的服务表 ( 当然, 我们这样做是经过储存地址中的实际执行的服务, 在全局 RealCallee 变量 ). 为了改写服务表, 我们的映射目标地址通过 MmMapIoSpace ( ). 我们为什么要这样做? 毕竟, 我们已访问一个以服务表, 不就? 目前的问题是, 服务表可能放在只读存储器. 因此, 我们要检查是否有写权限在目标页面上, 如果我们不这样做, 我们要改变页保护之前, 改写的服务表. 太多的工作, 你难道不好吗? 因此, 我们只是映射目标地址通过 MmMapIoSpace ( ), 所以不用担心更多的页保护, 从现在开始我

47 们理所当然的可以采取写的方式对目标页面. 现在让我们看看我们代理函数的功能 : 第 47 页 Proxy( ) 保存寄存器和标志, 把一个指向服务参数的指针入栈, 并调用 check( ). 剩余的工作由 check( ) 返回. 如果 check( ) 返回 TRUE ( 即要着手处理请求 ),Proxy( ) 恢复寄存器和标志并将控制权转让给系统服务完成. 否则,Proxy( ) 向 EAX 写入 STATUS_ACCESS_DENIED, 恢复 ESP 并返回, 从调用者的角度看来 NtCreateSection ( ) 调用失败返回 STATUS_ACCESS_DENIED 错误状态. check( ) 如何作出决定? 一旦它收到一个指向服务参数, 可以检查这些参数. 首先, 它检查标志位和参数, 如果区域对象不要求将其映射为一个可执行的形象, 或者如果被请求页面保护不允许执行, 我们可以肯定地说 ntcreatesection ( ) 调用与创建进程无关. 在这种情况下检查 ( ) 返回 TRUE. 否则, 它会检查扩展名, sec_image 的属性和页面保护, 使运行的时间可能会要求载入一些映射的 DLL 文件. 如果扩展名不是. exe 文件, 检查 ( ) 返回 TRUE. 否则, 它给用户模式代码一个机会做出决定. 因此, 它只是写到档案名称和路径交换缓冲区由用户决定, 直到得到回应. 在打开我们的驱动之前, 我们的应用开启了一个线程完成下列功能 : 这个代码不需要太多的说明 -- 我们的线程每 10ms 便检查一次缓冲. 如果发现我们的驱动已将其请求的缓冲区, 它检查扩展名称和路径, 如果匹配, 它立刻返回一个 OK. 否则, 它显示一个对话框, 询问用户是否允程序执行. 如果运行程序, 我们把程序添加到安全程序列表. 最后, 我们写用户回应缓冲, 通知我们的驱动程序. 现在, 我们已经完全控制了进程的创建, 如果没有用户的许可, 进程是不可能被创建的. 如你所见, 我们让内核方式代码等待用户响应. 这是一件好事呢??? 为了回答这个问题, 你要问自己到底是什么阻塞关键系统资源 - 一切视情况而定. 在我们的情况一切都发生 irql passive_level 上, 等待用户的反应并非至关重要的. 因此, 在我们的情况一切都运行良好. 然而, 这样写示范仅供参考. 为了使任何实际使用它, 是有道理的, 改写了我们的程序, 作为自启动服务. 在这种情况下, 我认为我们应该让程序运行在 localsystem 下, 但 ntcreatesection ( ) 调用环境中的 localsystem 帐户特权从实际执行服务不进行任何检查毕竟, localsystem 帐户挤提只有那些可执行文件. 因此, 这种做法是不太安全的. 结论 最后, 我不得不说挂钩本地 API 绝对是一个最强大的编程技术. 这篇文章给你, 只是一个例子, 我们能够做到的挂钩本地 API, 你可以看到, 我们设法阻止并决定本地 API 的执行结果. 你领会一做法的同时, 充分控制硬件设备, 文件 IO 的操作, 网络流量, 等等 但是, 我们目前的解决方法是行不通的内核模式下可以直接调用 ntoskrnl.exe 的到处函数, 这些调用没有必要去通过系统调度服务. 因此, 在接下来的文章里我们将挂钩 ntoskrnl.exe 本身. 这个样品已经成功地测试了几个运行在 windows xp sp2 的机器. 虽然我还未测试, 它应该可以在任何环境下, 我相信能运行在任何环境下 为了能够正常运行, 请把 protector.exe 和 protector.sys 放在同一目录下 我也非常欣赏, 如果你送我一个电子邮件与你的意见和建议.

48 第 48 页 致 谢 在本次毕业设计中学到很多新知识, 例如驱动程序的编写,Windows 的内部机制, 驱动程序的调试等等 更累积了不少开发经验, 例如驱动编写中常见容易犯的错误 多层软件的开发 这些都是在课本上学习不到的 非常感谢我的毕业设计指导老师, 以及在设计中帮助过我的各位朋友

49 附加信息 : 中国矿业大学 2007 届本科生毕业设计 ( 论文 ) 第 49 页 CSDN ID:KeSummer BLOG( 不喜欢写 ):

50 第 50 页 凑页数的话 : 喜欢一个人旅行, 喜欢天文观测, 喜欢新奇的东西等等

Windows XP

Windows XP Windows XP What is Windows XP Windows is an Operating System An Operating System is the program that controls the hardware of your computer, and gives you an interface that allows you and other programs

More information

1.ai

1.ai HDMI camera ARTRAY CO,. LTD Introduction Thank you for purchasing the ARTCAM HDMI camera series. This manual shows the direction how to use the viewer software. Please refer other instructions or contact

More information

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

A Preliminary Implementation of Linux Kernel Virus and Process Hiding 邵 俊 儒 翁 健 吉 妍 年 月 日 学 号 学 号 学 号 摘 要 结 合 课 堂 知 识 我 们 设 计 了 一 个 内 核 病 毒 该 病 毒 同 时 具 有 木 马 的 自 动 性 的 隐 蔽 性 和 蠕 虫 的 感 染 能 力 该 病 毒 获 得 权 限 后 会 自 动 将 自 身 加 入 内 核 模 块 中 劫 持 的 系 统 调 用 并 通 过 简 单 的 方 法 实 现 自 身 的

More information

C o n t e n t s...7... 15 1. Acceptance... 17 2. Allow Love... 19 3. Apologize... 21 4. Archangel Metatron... 23 5. Archangel Michael... 25 6. Ask for

C o n t e n t s...7... 15 1. Acceptance... 17 2. Allow Love... 19 3. Apologize... 21 4. Archangel Metatron... 23 5. Archangel Michael... 25 6. Ask for Doreen Virtue, Ph.D. Charles Virtue C o n t e n t s...7... 15 1. Acceptance... 17 2. Allow Love... 19 3. Apologize... 21 4. Archangel Metatron... 23 5. Archangel Michael... 25 6. Ask for a Sign... 27 7.

More information

Microsoft Word - template.doc

Microsoft Word - template.doc HGC efax Service User Guide I. Getting Started Page 1 II. Fax Forward Page 2 4 III. Web Viewing Page 5 7 IV. General Management Page 8 12 V. Help Desk Page 13 VI. Logout Page 13 Page 0 I. Getting Started

More information

<4D6963726F736F667420576F7264202D2032303130C4EAC0EDB9A4C0E04142BCB6D4C4B6C1C5D0B6CFC0FDCCE2BEABD1A15F325F2E646F63>

<4D6963726F736F667420576F7264202D2032303130C4EAC0EDB9A4C0E04142BCB6D4C4B6C1C5D0B6CFC0FDCCE2BEABD1A15F325F2E646F63> 2010 年 理 工 类 AB 级 阅 读 判 断 例 题 精 选 (2) Computer mouse How does the mouse work? We have to start at the bottom, so think upside down for now. It all starts with mouse ball. As the mouse ball in the bottom

More information

Microsoft Word - 11月電子報1130.doc

Microsoft Word - 11月電子報1130.doc 發 行 人 : 楊 進 成 出 刊 日 期 2008 年 12 月 1 日, 第 38 期 第 1 頁 / 共 16 頁 封 面 圖 話 來 來 來, 來 葳 格 ; 玩 玩 玩, 玩 數 學 在 11 月 17 到 21 日 這 5 天 裡 每 天 一 個 題 目, 孩 子 們 依 據 不 同 年 段, 尋 找 屬 於 自 己 的 解 答, 這 些 數 學 題 目 和 校 園 情 境 緊 緊 結

More information

Lorem ipsum dolor sit amet, consectetuer adipiscing elit

Lorem ipsum dolor sit amet, consectetuer adipiscing elit English for Study in Australia 留 学 澳 洲 英 语 讲 座 Lesson 3: Make yourself at home 第 三 课 : 宾 至 如 归 L1 Male: 各 位 朋 友 好, 欢 迎 您 收 听 留 学 澳 洲 英 语 讲 座 节 目, 我 是 澳 大 利 亚 澳 洲 广 播 电 台 的 节 目 主 持 人 陈 昊 L1 Female: 各 位

More information

參 加 第 二 次 pesta 的 我, 在 是 次 交 流 營 上 除 了, 與 兩 年 沒 有 見 面 的 朋 友 再 次 相 聚, 加 深 友 誼 外, 更 獲 得 與 上 屆 不 同 的 體 驗 和 經 歴 比 較 起 香 港 和 馬 來 西 亞 的 活 動 模 式, 確 是 有 不 同 特

參 加 第 二 次 pesta 的 我, 在 是 次 交 流 營 上 除 了, 與 兩 年 沒 有 見 面 的 朋 友 再 次 相 聚, 加 深 友 誼 外, 更 獲 得 與 上 屆 不 同 的 體 驗 和 經 歴 比 較 起 香 港 和 馬 來 西 亞 的 活 動 模 式, 確 是 有 不 同 特 WE ARE BOY S BRIGADE 參 加 第 二 次 pesta 的 我, 在 是 次 交 流 營 上 除 了, 與 兩 年 沒 有 見 面 的 朋 友 再 次 相 聚, 加 深 友 誼 外, 更 獲 得 與 上 屆 不 同 的 體 驗 和 經 歴 比 較 起 香 港 和 馬 來 西 亞 的 活 動 模 式, 確 是 有 不 同 特 別 之 處 如 控 制 時 間 及 人 流 方 面, 香

More information

提纲 1 2 OS Examples for 3

提纲 1 2 OS Examples for 3 第 4 章 Threads2( 线程 2) 中国科学技术大学计算机学院 October 28, 2009 提纲 1 2 OS Examples for 3 Outline 1 2 OS Examples for 3 Windows XP Threads I An Windows XP application runs as a seperate process, and each process may

More information

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO Car DVD New GUI IR Flow User Manual V0.1 Jan 25, 2008 19, Innovation First Road Science Park Hsin-Chu Taiwan 300 R.O.C. Tel: 886-3-578-6005 Fax: 886-3-578-4418 Web: www.sunplus.com Important Notice SUNPLUS

More information

Microsoft Word - 第四組心得.doc

Microsoft Word - 第四組心得.doc 徐 婉 真 這 四 天 的 綠 島 人 權 體 驗 營 令 我 印 象 深 刻, 尤 其 第 三 天 晚 上 吳 豪 人 教 授 的 那 堂 課, 他 讓 我 聽 到 不 同 於 以 往 的 正 義 之 聲 轉 型 正 義, 透 過 他 幽 默 熱 情 的 語 調 激 起 了 我 對 政 治 的 興 趣, 願 意 在 未 來 多 關 心 社 會 多 了 解 政 治 第 一 天 抵 達 綠 島 不 久,

More information

WTO

WTO 10384 200015128 UDC Exploration on Design of CIB s Human Resources System in the New Stage (MBA) 2004 2004 2 3 2004 3 2 0 0 4 2 WTO Abstract Abstract With the rapid development of the high and new technique

More information

Microsoft Word doc

Microsoft Word doc 中 考 英 语 科 考 试 标 准 及 试 卷 结 构 技 术 指 标 构 想 1 王 后 雄 童 祥 林 ( 华 中 师 范 大 学 考 试 研 究 院, 武 汉,430079, 湖 北 ) 提 要 : 本 文 从 结 构 模 式 内 容 要 素 能 力 要 素 题 型 要 素 难 度 要 素 分 数 要 素 时 限 要 素 等 方 面 细 致 分 析 了 中 考 英 语 科 试 卷 结 构 的

More information

中国人民大学商学院本科学年论文

中国人民大学商学院本科学年论文 RUC-BK-113-110204-11271374 2001 11271374 1 Nowadays, an enterprise could survive even without gaining any profit. However, once its operating cash flow stands, it is a threat to the enterprise. So, operating

More information

2009.05

2009.05 2009 05 2009.05 2009.05 璆 2009.05 1 亿 平 方 米 6 万 套 10 名 20 亿 元 5 个 月 30 万 亿 60 万 平 方 米 Data 围 观 CCDI 公 司 内 刊 企 业 版 P08 围 观 CCDI 管 理 学 上 有 句 名 言 : 做 正 确 的 事, 比 正 确 地 做 事 更 重 要 方 向 的 对 错 于 大 局 的 意 义 而 言,

More information

BC04 Module_antenna__ doc

BC04 Module_antenna__ doc http://www.infobluetooth.com TEL:+86-23-68798999 Fax: +86-23-68889515 Page 1 of 10 http://www.infobluetooth.com TEL:+86-23-68798999 Fax: +86-23-68889515 Page 2 of 10 http://www.infobluetooth.com TEL:+86-23-68798999

More information

Panaboard Overlayer help

Panaboard Overlayer help Panaboard Overlayer Image Capture Software for Electronic Whiteboard (Panaboard) ... 3... 5... 6... 13...14 Panaboard Overlayer 1. 2. 3. 4. 4-1. 4-2. [ / ] ( ) 4-3. 5. 6. 6-1. 6-2. [ / ] ( ) 7. Panaboard

More information

Microsoft Word - 武術合併

Microsoft Word - 武術合併 11/13 醫 學 系 一 年 級 張 雲 筑 武 術 課 開 始, 老 師 並 不 急 著 帶 我 們 舞 弄 起 來, 而 是 解 說 著 支 配 氣 的 流 動 為 何 構 成 中 國 武 術 的 追 求 目 標 武 術, 名 之 為 武 恐 怕 與 其 原 本 的 精 義 有 所 偏 差 其 實 武 術 是 為 了 讓 學 習 者 能 夠 掌 握 身 體, 保 養 身 體 而 發 展, 並

More information

We are now living happily. We are now living a happy life. He is very healthy. He is in good health. I am sure that he will succeed. I am sure of his success. I am busy now. I am not free now. May I borrow

More information

Microsoft PowerPoint - AWOL - Acrobat Windows Outlook.ppt [Compatibility Mode]

Microsoft PowerPoint - AWOL - Acrobat Windows Outlook.ppt [Compatibility Mode] AWOL Windows - Tips & Tricks Resolution, color depth & refresh rate Background color Service packs Disk cleanup (cleanmgr) Disk defragmentation AWOL Windows Resolution, Color Depth & Refresh Rate The main

More information

星河33期.FIT)

星河33期.FIT) 大 事 记 渊 2011.11 要 要 2011.12 冤 1 尧 11 月 25 日 下 午 袁 白 银 区 首 届 中 小 学 校 长 论 坛 在 我 校 举 行 遥 2 尧 在 甘 肃 省 2011 年 野 十 一 五 冶 规 划 课 题 集 中 鉴 定 中 袁 我 校 教 师 郝 香 梅 负 责 的 课 题 叶 英 语 课 堂 的 艺 术 性 研 究 曳 袁 张 宏 林 负 责 的 叶 白

More information

IP505SM_manual_cn.doc

IP505SM_manual_cn.doc IP505SM 1 Introduction 1...4...4...4...5 LAN...5...5...6...6...7 LED...7...7 2...9...9...9 3...11...11...12...12...12...14...18 LAN...19 DHCP...20...21 4 PC...22...22 Windows...22 TCP/IP -...22 TCP/IP

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

2-7.FIT)

2-7.FIT) 文 化 园 地 8 2009 年 8 月 18 日 星 期 二 E-mail:liuliyuan@qunlitimes.com 群 立 文 化 感 受 今 天 你 开 心 了 吗? 周 传 喜 群 雄 争 立 竞 争 意 识 ; 傲 立 群 雄 奋 斗 目 标, 这 几 句 话 一 直 是 群 立 的 文 化 和 方 针, 也 同 样 是 我 很 喜 欢 的 座 右 铭 我 想 这 几 句 话 生

More information

<4D6963726F736F667420576F7264202D205F4230365FB942A5CEA668B443C5E9BB73A740B5D8A4E5B8C9A552B1D0A7F75FA6BFB1A4ACFC2E646F63>

<4D6963726F736F667420576F7264202D205F4230365FB942A5CEA668B443C5E9BB73A740B5D8A4E5B8C9A552B1D0A7F75FA6BFB1A4ACFC2E646F63> 運 用 多 媒 體 製 作 華 文 補 充 教 材 江 惜 美 銘 傳 大 學 應 用 中 文 系 chm248@gmail.com 摘 要 : 本 文 旨 在 探 究 如 何 運 用 多 媒 體, 結 合 文 字 聲 音 圖 畫, 製 作 華 文 補 充 教 材 當 我 們 在 進 行 華 文 教 學 時, 往 往 必 須 透 過 教 案 設 計, 並 製 作 補 充 教 材, 方 能 使 教 學

More information

Bus Hound 5

Bus Hound 5 Bus Hound 5.0 ( 1.0) 21IC 2007 7 BusHound perisoft PC hound Bus Hound 6.0 5.0 5.0 Bus Hound, IDE SCSI USB 1394 DVD Windows9X,WindowsMe,NT4.0,2000,2003,XP XP IRP Html ZIP SCSI sense USB Bus Hound 1 Bus

More information

徐汇教育214/3月刊 重 点 关 注 高中生异性交往的小团体辅导 及效果研究 颜静红 摘 要 采用人际关系综合诊断量表 郑日昌编制并 与同性交往所不能带来的好处 带来稳定感和安全感 能 修订 对我校高一学生进行问卷测量 实验组前后测 在 够度过更快乐的时光 获得与别人友好相处的经验 宽容 量表总分和第 4 项因子分 异性交往困扰 上均有显著差 大度和理解力得到发展 得到掌握社会技术的机会 得到 异

More information

穨control.PDF

穨control.PDF TCP congestion control yhmiu Outline Congestion control algorithms Purpose of RFC2581 Purpose of RFC2582 TCP SS-DR 1998 TCP Extensions RFC1072 1988 SACK RFC2018 1996 FACK 1996 Rate-Halving 1997 OldTahoe

More information

99 學年度班群總介紹 第 370 期 班群總導 陳怡靜 G45 班群總導 陳怡靜(河馬) A 家 惠如 家浩 T 格 宜蓁 小 霖 怡 家 M 璇 均 蓁 雴 家 數學領域 珈玲 國燈 370-2 英領域 Kent

99 學年度班群總介紹 第 370 期 班群總導 陳怡靜 G45 班群總導 陳怡靜(河馬) A 家 惠如 家浩 T 格 宜蓁 小 霖 怡 家 M 璇 均 蓁 雴 家 數學領域 珈玲 國燈 370-2 英領域 Kent 2010 年 8 月 27 日 出 刊 精 緻 教 育 宜 蘭 縣 公 辦 民 營 人 國 民 中 小 學 財 團 法 人 人 適 性 教 育 基 金 會 承 辦 地 址 : 宜 蘭 縣 26141 頭 城 鎮 雅 路 150 號 (03)977-3396 http://www.jwps.ilc.edu.tw 健 康 VS. 學 習 各 位 合 夥 人 其 實 都 知 道, 我 是 個 胖 子, 而

More information

入學考試網上報名指南

入學考試網上報名指南 入 學 考 試 網 上 報 名 指 南 On-line Application Guide for Admission Examination 16/01/2015 University of Macau Table of Contents Table of Contents... 1 A. 新 申 請 網 上 登 記 帳 戶 /Register for New Account... 2 B. 填

More information

Microsoft Word - TIP006SCH Uni-edit Writing Tip - Presentperfecttenseandpasttenseinyourintroduction readytopublish

Microsoft Word - TIP006SCH Uni-edit Writing Tip - Presentperfecttenseandpasttenseinyourintroduction readytopublish 我 难 度 : 高 级 对 们 现 不 在 知 仍 道 有 听 影 过 响 多 少 那 次 么 : 研 英 究 过 文 论 去 写 文 时 作 的 表 技 引 示 巧 言 事 : 部 情 引 分 发 言 该 生 使 在 中 用 过 去, 而 现 在 完 成 时 仅 表 示 事 情 发 生 在 过 去, 并 的 哪 现 种 在 时 完 态 成 呢 时? 和 难 过 道 去 不 时 相 关? 是 所 有

More information

Logitech Wireless Combo MK45 English

Logitech Wireless Combo MK45 English Logitech Wireless Combo MK45 Setup Guide Logitech Wireless Combo MK45 English................................................................................... 7..........................................

More information

软件测试(TA07)第一学期考试

软件测试(TA07)第一学期考试 一 判 断 题 ( 每 题 1 分, 正 确 的, 错 误 的,20 道 ) 1. 软 件 测 试 按 照 测 试 过 程 分 类 为 黑 盒 白 盒 测 试 ( ) 2. 在 设 计 测 试 用 例 时, 应 包 括 合 理 的 输 入 条 件 和 不 合 理 的 输 入 条 件 ( ) 3. 集 成 测 试 计 划 在 需 求 分 析 阶 段 末 提 交 ( ) 4. 单 元 测 试 属 于 动

More information

川 外 250 人, 上 外 222 人, 广 外 209 人, 西 外 195 人, 北 外 168 人, 中 南 大 学 135 人, 西 南 大 学 120 人, 湖 南 大 学 115 人, 天 外 110 人, 大 连 外 国 语 学 院 110 人, 上 海 外 事 学 院 110 人,

川 外 250 人, 上 外 222 人, 广 外 209 人, 西 外 195 人, 北 外 168 人, 中 南 大 学 135 人, 西 南 大 学 120 人, 湖 南 大 学 115 人, 天 外 110 人, 大 连 外 国 语 学 院 110 人, 上 海 外 事 学 院 110 人, 关 于 考 研 准 备 的 几 点 建 议 主 讲 : 张 伯 香 如 何 选 择 学 校 和 专 业 一. 按 招 生 性 质, 全 国 高 校 大 致 可 分 为 以 下 几 类 : 1. 综 合 类 院 校 比 较 知 名 的 有 北 大 南 大 复 旦 武 大 中 大 南 开 厦 大 等 这 类 院 校 重 视 科 研 能 力, 考 试 有 一 定 的 难 度, 比 较 适 合 于 那 些

More information

ebook140-8

ebook140-8 8 Microsoft VPN Windows NT 4 V P N Windows 98 Client 7 Vintage Air V P N 7 Wi n d o w s NT V P N 7 VPN ( ) 7 Novell NetWare VPN 8.1 PPTP NT4 VPN Q 154091 M i c r o s o f t Windows NT RAS [ ] Windows NT4

More information

Improved Preimage Attacks on AES-like Hash Functions: Applications to Whirlpool and Grøstl

Improved Preimage Attacks on AES-like Hash Functions: Applications to Whirlpool and Grøstl SKLOIS (Pseudo) Preimage Attack on Reduced-Round Grøstl Hash Function and Others Shuang Wu, Dengguo Feng, Wenling Wu, Jian Guo, Le Dong, Jian Zou March 20, 2012 Institute. of Software, Chinese Academy

More information

ebook140-9

ebook140-9 9 VPN VPN Novell BorderManager Windows NT PPTP V P N L A V P N V N P I n t e r n e t V P N 9.1 V P N Windows 98 Windows PPTP VPN Novell BorderManager T M I P s e c Wi n d o w s I n t e r n e t I S P I

More information

LH_Series_Rev2014.pdf

LH_Series_Rev2014.pdf REMINDERS Product information in this catalog is as of October 2013. All of the contents specified herein are subject to change without notice due to technical improvements, etc. Therefore, please check

More information

Your Field Guide to More Effective Global Video Conferencing As a global expert in video conferencing, and a geographically dispersed company that uses video conferencing in virtually every aspect of its

More information

Lorem ipsum dolor sit amet, consectetuer adipiscing elit

Lorem ipsum dolor sit amet, consectetuer adipiscing elit 留 学 澳 洲 英 语 讲 座 English for Study in Australia 第 十 三 课 : 与 同 学 一 起 做 功 课 Lesson 13: Working together L1 Male 各 位 听 众 朋 友 好, 我 是 澳 大 利 亚 澳 洲 广 播 电 台 的 节 目 主 持 人 陈 昊 L1 Female 各 位 好, 我 是 马 健 媛 L1 Male L1

More information

國立桃園高中96學年度新生始業輔導新生手冊目錄

國立桃園高中96學年度新生始業輔導新生手冊目錄 彰 化 考 區 104 年 國 中 教 育 會 考 簡 章 簡 章 核 定 文 號 : 彰 化 縣 政 府 104 年 01 月 27 日 府 教 學 字 第 1040027611 號 函 中 華 民 國 104 年 2 月 9 日 彰 化 考 區 104 年 國 中 教 育 會 考 試 務 會 編 印 主 辦 學 校 : 國 立 鹿 港 高 級 中 學 地 址 :50546 彰 化 縣 鹿 港 鎮

More information

4. 每 组 学 生 将 写 有 习 语 和 含 义 的 两 组 卡 片 分 别 洗 牌, 将 顺 序 打 乱, 然 后 将 两 组 卡 片 反 面 朝 上 置 于 课 桌 上 5. 学 生 依 次 从 两 组 卡 片 中 各 抽 取 一 张, 展 示 给 小 组 成 员, 并 大 声 朗 读 卡

4. 每 组 学 生 将 写 有 习 语 和 含 义 的 两 组 卡 片 分 别 洗 牌, 将 顺 序 打 乱, 然 后 将 两 组 卡 片 反 面 朝 上 置 于 课 桌 上 5. 学 生 依 次 从 两 组 卡 片 中 各 抽 取 一 张, 展 示 给 小 组 成 员, 并 大 声 朗 读 卡 Tips of the Week 课 堂 上 的 英 语 习 语 教 学 ( 二 ) 2015-04-19 吴 倩 MarriottCHEI 大 家 好! 欢 迎 来 到 Tips of the Week! 这 周 我 想 和 老 师 们 分 享 另 外 两 个 课 堂 上 可 以 开 展 的 英 语 习 语 教 学 活 动 其 中 一 个 活 动 是 一 个 充 满 趣 味 的 游 戏, 另 外

More information

Microsoft Word - ChineseSATII .doc

Microsoft Word - ChineseSATII .doc 中 文 SAT II 冯 瑶 一 什 么 是 SAT II 中 文 (SAT Subject Test in Chinese with Listening)? SAT Subject Test 是 美 国 大 学 理 事 会 (College Board) 为 美 国 高 中 生 举 办 的 全 国 性 专 科 标 准 测 试 考 生 的 成 绩 是 美 国 大 学 录 取 新 生 的 重 要 依

More information

[ 13 年 12 月 06 日, 下 午 6 点 24 分 ] Intel Hosts 新 加 入 的 同 学 们, 快 去 听 听 在 线 宣 讲 会 哦, 同 时 完 成 页 面 下 方 有 奖 调 查, 就 有 资 格 参 与 大 奖 抽 取 啦! [ 13 年 12 月 06 日, 下 午

[ 13 年 12 月 06 日, 下 午 6 点 24 分 ] Intel Hosts 新 加 入 的 同 学 们, 快 去 听 听 在 线 宣 讲 会 哦, 同 时 完 成 页 面 下 方 有 奖 调 查, 就 有 资 格 参 与 大 奖 抽 取 啦! [ 13 年 12 月 06 日, 下 午 China Career Fair: To Know a Different Intel Time Participants Chat Transcript [ 13 年 12 月 06 日, 下 午 6 点 00 分 ] Participant Hi [ 13 年 12 月 06 日, 下 午 6 点 00 分 ] Intel Hosts 大 家 好! [ 13 年 12 月 06 日, 下 午

More information

ch_code_infoaccess

ch_code_infoaccess 地 產 代 理 監 管 局 公 開 資 料 守 則 2014 年 5 月 目 錄 引 言 第 1 部 段 數 適 用 範 圍 1.1-1.2 監 管 局 部 門 1.1 紀 律 研 訊 1.2 提 供 資 料 1.3-1.6 按 慣 例 公 布 或 供 查 閱 的 資 料 1.3-1.4 應 要 求 提 供 的 資 料 1.5 法 定 義 務 及 限 制 1.6 程 序 1.7-1.19 公 開 資

More information

國立中山大學學位論文典藏.PDF

國立中山大學學位論文典藏.PDF I II III The Study of Factors to the Failure or Success of Applying to Holding International Sport Games Abstract For years, holding international sport games has been Taiwan s goal and we are on the way

More information

CANVIO_AEROCAST_CS_EN.indd

CANVIO_AEROCAST_CS_EN.indd 简 体 中 文...2 English...4 SC5151-A0 简 体 中 文 步 骤 2: 了 解 您 的 CANVIO AeroCast CANVIO AeroCast 无 线 移 动 硬 盘 快 速 入 门 指 南 欢 迎 并 感 谢 您 选 择 TOSHIBA 产 品 有 关 您 的 TOSHIBA 产 品 的 详 情, 请 参 阅 包 含 更 多 信 息 的 用 户 手 册 () 安

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

ΧΧΧΧ课程教学大纲(黑体,三号,段后1行)

ΧΧΧΧ课程教学大纲(黑体,三号,段后1行) 为 适 应 我 国 高 等 教 育 发 展 的 需 要, 提 高 大 学 英 语 教 学 质 量, 满 足 社 会 对 人 才 培 养 的 需 要, 按 照 教 育 部 深 化 大 学 英 语 教 学 改 革 的 精 神 和 要 求, 参 照 2007 年 教 育 部 高 教 司 修 订 颁 布 的 大 学 英 语 课 程 教 学 要 求, 针 对 我 校 的 实 际 情 况, 制 定 上 海 商

More information

202 The Sending Back of The Japanese People in Taiwan in The Beginning Years After the World War II Abstract Su-ying Ou* In August 1945, Japan lost th

202 The Sending Back of The Japanese People in Taiwan in The Beginning Years After the World War II Abstract Su-ying Ou* In August 1945, Japan lost th 201 1945 8 1945 202 The Sending Back of The Japanese People in Taiwan in The Beginning Years After the World War II Abstract Su-ying Ou* In August 1945, Japan lost the war and had to retreat from Taiwan.

More information

ABSTRACT ABSTRACT As we know the Sinology has a long history. As earily as 19 th century some works have already been done in this field. And among this the studies of lineages and folk beliefs in Southeast

More information

(Microsoft Word - 10\246~\253\327\262\304\244@\264\301\256\325\260T_Version4)

(Microsoft Word - 10\246~\253\327\262\304\244@\264\301\256\325\260T_Version4) 聖 公 會 仁 立 紀 念 小 學 聖 公 會 仁 立 紀 念 小 學 校 園 通 訊 2010 年 度 第 一 期 第 1 頁 \\\\ 校 園 通 訊 2010-2011 年 度 第 一 期 鄭 秀 薇 總 校 長 在 日 本, 有 一 個 傳 說 故 事 是 這 樣 說 的 : 有 一 對 仁 慈 的 老 夫 婦, 生 活 窮 困, 靠 賣 木 柴 過 活 一 天 老 人 在 同 情 心 的

More information

1505.indd

1505.indd 上 海 市 孙 中 山 宋 庆 龄 文 物 管 理 委 员 会 上 海 宋 庆 龄 研 究 会 主 办 2015.05 总 第 148 期 图 片 新 闻 2015 年 9 月 22 日, 由 上 海 孙 中 山 故 居 纪 念 馆 台 湾 辅 仁 大 学 和 台 湾 图 书 馆 联 合 举 办 的 世 纪 姻 缘 纪 念 孙 中 山 先 生 逝 世 九 十 周 年 及 其 革 命 历 程 特 展

More information

untitled

untitled LBS Research and Application of Location Information Management Technology in LBS TP319 10290 UDC LBS Research and Application of Location Information Management Technology in LBS , LBS PDA LBS

More information

Microsoft Word - Final Exam Review Packet.docx

Microsoft Word - Final Exam Review Packet.docx Do you know these words?... 3.1 3.5 Can you do the following?... Ask for and say the date. Use the adverbial of time correctly. Use Use to ask a tag question. Form a yes/no question with the verb / not

More information

第六章

第六章 Reflection and Serving Learning 長 庚 科 技 大 學 護 理 系 劉 杏 元 一 服 務 學 習 為 何 要 反 思 All those things that we had to do for the service-learning, each one, successively helped me pull together what I d learned.

More information

03施琅「棄留臺灣議」探索.doc

03施琅「棄留臺灣議」探索.doc 38 93 43 59 43 44 1 2 1621 1645 1646 3 1647 1649 4 1 1996 12 121 2 1988 1 54---79 3 1990 2 39 4 1987 8 16 19 1649 27---28 45 1651 5 1656 1662 1664 1667 1668 6 1681 1683 7 13 1958 2 1651 2002 11 67 1961

More information

新竹市建華國民中學九十四學年度課程計畫

新竹市建華國民中學九十四學年度課程計畫 目 錄 壹 依 據... 3 貳 目 的... 3 參 學 校 背 景 簡 述 與 課 程 發 展 條 件 分 析... 3 一 學 校 基 本 資 料... 3 二 學 校 課 程 發 展 條 件 分 析 (SWOTS)... 4 肆 學 校 教 育 目 標 與 願 景... 5 ㄧ 學 校 願 景... 5 二 學 校 願 景 圖 像... 5 三 學 校 發 展 方 向 與 展 望... 5

More information

-------------------------------------------------------------------------------- Pekinger in NewYork -------------------------------------------------------------------------------- 1011 121314 151617

More information

TX-NR3030_BAS_Cs_ indd

TX-NR3030_BAS_Cs_ indd TX-NR3030 http://www.onkyo.com/manual/txnr3030/adv/cs.html Cs 1 2 3 Speaker Cable 2 HDMI OUT HDMI IN HDMI OUT HDMI OUT HDMI OUT HDMI OUT 1 DIGITAL OPTICAL OUT AUDIO OUT TV 3 1 5 4 6 1 2 3 3 2 2 4 3 2 5

More information

高中英文科教師甄試心得

高中英文科教師甄試心得 高 中 英 文 科 教 師 甄 試 心 得 英 語 學 系 碩 士 班 林 俊 呈 高 雄 市 立 高 雄 高 級 中 學 今 年 第 一 次 參 加 教 師 甄 試, 能 夠 在 尚 未 服 兵 役 前 便 考 上 高 雄 市 立 高 雄 高 級 中 學 專 任 教 師, 自 己 覺 得 很 意 外, 也 很 幸 運 考 上 後 不 久 在 與 雄 中 校 長 的 會 談 中, 校 長 的 一 句

More information

A Community Guide to Environmental Health

A Community Guide to Environmental Health 102 7 建 造 厕 所 本 章 内 容 宣 传 推 广 卫 生 设 施 104 人 们 需 要 什 么 样 的 厕 所 105 规 划 厕 所 106 男 女 对 厕 所 的 不 同 需 求 108 活 动 : 给 妇 女 带 来 方 便 110 让 厕 所 更 便 于 使 用 111 儿 童 厕 所 112 应 急 厕 所 113 城 镇 公 共 卫 生 设 施 114 故 事 : 城 市 社

More information

TLLFDEC2013.indd

TLLFDEC2013.indd GOOD PEOPLE MANAGEMENT AWARD 2 學教卓越 行政長官卓越教學獎 2010 / 2011 本校重視學生全人發展 致力提供具專業的教學環 6. 通識科的閱讀課藉報章及時事影片與同學進行課堂討 境 營造純樸良好的校風 建立優良的班級文化 積極提 論 提升學生的批判思考及高階思維能力 並藉不同形 升教學效能 善用資源為學生提供分組教學及各種增潤課 程 並成功為學生創造多元化的成功學習經驗

More information

Chapter 2

Chapter 2 2 (Setup) ETAP PowerStation ETAP ETAP PowerStation PowerStation PowerPlot ODBC SQL Server Oracle SQL Server Oracle Windows SQL Server Oracle PowerStation PowerStation PowerStation PowerStation ETAP PowerStation

More information

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor 1 4.1.1.1 (Load) 14 1.1 1 4.1.1.2 (Save) 14 1.1.1 1 4.1.2 (Buffer) 16 1.1.2 1 4.1.3 (Device) 16 1.1.3 1 4.1.3.1 (Select Device) 16 2 4.1.3.2 (Device Info) 16 2.1 2 4.1.3.3 (Adapter) 17 2.1.1 CD-ROM 2 4.1.4

More information

124 第十三期 Conflicts in the Takeover of the Land in Taiwan after the Sino-Japanese War A Case in the Change of the Japanese Names of the Taiwanese Peopl

124 第十三期 Conflicts in the Takeover of the Land in Taiwan after the Sino-Japanese War A Case in the Change of the Japanese Names of the Taiwanese Peopl 123 戰後初期臺灣土地接收的糾紛 以更改日式姓名的臺人遭遇為例 124 第十三期 Conflicts in the Takeover of the Land in Taiwan after the Sino-Japanese War A Case in the Change of the Japanese Names of the Taiwanese People Abstract By Ho Fung-jiao

More information

可 愛 的 動 物 小 五 雷 雅 理 第 一 次 小 六 甲 黃 駿 朗 今 年 暑 假 發 生 了 一 件 令 人 非 常 難 忘 的 事 情, 我 第 一 次 參 加 宿 營, 離 開 父 母, 自 己 照 顧 自 己, 出 發 前, 我 的 心 情 十 分 緊 張 當 到 達 目 的 地 後

可 愛 的 動 物 小 五 雷 雅 理 第 一 次 小 六 甲 黃 駿 朗 今 年 暑 假 發 生 了 一 件 令 人 非 常 難 忘 的 事 情, 我 第 一 次 參 加 宿 營, 離 開 父 母, 自 己 照 顧 自 己, 出 發 前, 我 的 心 情 十 分 緊 張 當 到 達 目 的 地 後 郭家朗 許鈞嵐 劉振迪 樊偉賢 林洛鋒 第 36 期 出版日期 28-3-2014 出版日期 28-3-2014 可 愛 的 動 物 小 五 雷 雅 理 第 一 次 小 六 甲 黃 駿 朗 今 年 暑 假 發 生 了 一 件 令 人 非 常 難 忘 的 事 情, 我 第 一 次 參 加 宿 營, 離 開 父 母, 自 己 照 顧 自 己, 出 發 前, 我 的 心 情 十 分 緊 張 當 到 達 目

More information

國家圖書館典藏電子全文

國家圖書館典藏電子全文 i ii Abstract The most important task in human resource management is to encourage and help employees to develop their potential so that they can fully contribute to the organization s goals. The main

More information

Some experiences in working with Madagascar: installa7on & development Tengfei Wang, Peng Zou Tongji university

Some experiences in working with Madagascar: installa7on & development Tengfei Wang, Peng Zou Tongji university Some experiences in working with Madagascar: installa7on & development Tengfei Wang, Peng Zou Tongji university Map data @ Google Reproducible research in Madagascar How to conduct a successful installation

More information

從詩歌的鑒賞談生命價值的建構

從詩歌的鑒賞談生命價值的建構 Viktor E. Frankl (logotherapy) (will-to-meaning) (creative values) Ture (Good) (Beauty) (experiential values) (attitudinal values) 1 2 (logotherapy) (biological) (2) (psychological) (3) (noölogical) (4)

More information

A dissertation for Master s degree Metro Indoor Coverage Systems Analysis And Design Author s Name: Sheng Hailiang speciality: Supervisor:Prof.Li Hui,

A dissertation for Master s degree Metro Indoor Coverage Systems Analysis And Design Author s Name: Sheng Hailiang speciality: Supervisor:Prof.Li Hui, 中 国 科 学 技 术 大 学 工 程 硕 士 学 位 论 文 地 铁 内 移 动 通 信 室 内 覆 盖 分 析 及 应 用 作 者 姓 名 : 学 科 专 业 : 盛 海 亮 电 子 与 通 信 导 师 姓 名 : 李 辉 副 教 授 赵 红 媛 高 工 完 成 时 间 : 二 八 年 三 月 十 日 University of Science and Technology of Ch A dissertation

More information

1

1 Activity- based Cost Management: A New Mode of Medical cost Management () 1 Activity - based Cost Management A New Mode of Medical cost Management Abstract With the development of medical market, the defects

More information

K301Q-D VRT中英文说明书141009

K301Q-D VRT中英文说明书141009 THE INSTALLING INSTRUCTION FOR CONCEALED TANK Important instuction:.. Please confirm the structure and shape before installing the toilet bowl. Meanwhile measure the exact size H between outfall and infall

More information

AL-M200 Series

AL-M200 Series NPD4754-00 TC ( ) Windows 7 1. [Start ( )] [Control Panel ()] [Network and Internet ( )] 2. [Network and Sharing Center ( )] 3. [Change adapter settings ( )] 4. 3 Windows XP 1. [Start ( )] [Control Panel

More information

Microsoft Word - 0000000673_4.doc

Microsoft Word - 0000000673_4.doc 香 港 特 別 行 政 區 政 府 知 識 產 權 署 商 標 註 冊 處 Trade Marks Registry, Intellectual Property Department The Government of the Hong Kong Special Administrative Region 在 註 冊 申 請 詳 情 公 布 後 要 求 修 訂 貨 品 / 服 務 說 明 商 標

More information

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM Oracle Solaris Studio 12.2 DLight 2010 9 2 2 3 DLight 3 3 6 13 CPU 16 18 21 I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AMP Apache MySQL

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

K7VT2_QIG_v3

K7VT2_QIG_v3 ............ 1 2 3 4 5 [R] : Enter Raid setup utility 6 Press[A]keytocreateRAID RAID Type: JBOD RAID 0 RAID 1: 2 7 RAID 0 Auto Create Manual Create: 2 RAID 0 Block Size: 16K 32K

More information

<4D6963726F736F667420576F7264202D203033BDD7A16DA576B04FA145A4ADABD2A5BBACF6A16EADBAB6C0ABD2A4A7B74EB8712E646F63>

<4D6963726F736F667420576F7264202D203033BDD7A16DA576B04FA145A4ADABD2A5BBACF6A16EADBAB6C0ABD2A4A7B74EB8712E646F63> 論 史 記 五 帝 本 紀 首 黃 帝 之 意 義 林 立 仁 明 志 科 技 大 學 通 識 教 育 中 心 副 教 授 摘 要 太 史 公 司 馬 遷 承 父 著 史 遺 志, 並 以 身 膺 五 百 年 大 運, 上 繼 孔 子 春 秋 之 史 學 文 化 道 統 為 其 職 志, 著 史 記 欲 達 究 天 人 之 際, 通 古 今 之 變, 成 一 家 之 言 之 境 界 然 史 記 百

More information

The Development of Color Constancy and Calibration System

The Development of Color Constancy and Calibration System The Development of Color Constancy and Calibration System The Development of Color Constancy and Calibration System LabVIEW CCD BMP ii Abstract The modern technologies develop more and more faster, and

More information

摘 要 互 联 网 的 勃 兴 为 草 根 阶 层 书 写 自 我 和 他 人 提 供 了 契 机, 通 过 网 络 自 由 开 放 的 平 台, 网 络 红 人 风 靡 于 虚 拟 世 界 近 年 来, 或 无 心 插 柳, 或 有 意 噱 头, 或 自 我 表 达, 或 幕 后 操 纵, 网 络

摘 要 互 联 网 的 勃 兴 为 草 根 阶 层 书 写 自 我 和 他 人 提 供 了 契 机, 通 过 网 络 自 由 开 放 的 平 台, 网 络 红 人 风 靡 于 虚 拟 世 界 近 年 来, 或 无 心 插 柳, 或 有 意 噱 头, 或 自 我 表 达, 或 幕 后 操 纵, 网 络 上 海 外 国 语 大 学 硕 士 学 位 论 文 论 文 题 目 从 偶 像 符 号 的 消 解 到 消 费 符 号 的 建 构 网 络 红 人 的 形 象 变 迁 研 究 学 科 专 业 传 播 学 届 别 2013 届 姓 名 孙 清 导 师 王 玲 宁 I 摘 要 互 联 网 的 勃 兴 为 草 根 阶 层 书 写 自 我 和 他 人 提 供 了 契 机, 通 过 网 络 自 由 开 放 的

More information

Progress Report of BESIII Slow Control Software Development

Progress Report of BESIII Slow Control Software Development BESIII 慢控制系统高压和 VME 监控 系统的设计和实现 陈锡辉 BESIII 慢控制组 2006-4-27 Outline Design and implementation of HV system Features Implementation Brief introduction to VME system Features Implementation of a demo Tasks

More information

Microsoft Word - 0405

Microsoft Word - 0405 附 件 二 之 4 十 二 年 國 民 基 本 教 育 國 中 教 師 有 效 教 學 深 耕 推 廣 計 畫 優 良 教 案 甄 選 比 賽 教 學 計 畫 ( 教 案 ) 主 題 名 稱 問 路 / 方 向 指 示 教 學 節 數 5 節 教 材 來 源 改 編 教 科 書 ( 康 軒 翰 林 南 一 其 他 主 題 Book4 Unit9: How Do We Get to the Night

More information

ebook

ebook 3 3 3.1 3.1.1 ( ) 90 3 1966 B e r n s t e i n P ( i ) R ( i ) W ( i P ( i P ( j ) 1) R( i) W( j)=φ 2) W( i) R( j)=φ 3) W( i) W( j)=φ 3.1.2 ( p r o c e s s ) 91 Wi n d o w s Process Control Bl o c k P C

More information

目 錄 實 施 計 畫 1 專 題 演 講 因 應 十 二 年 國 民 基 本 教 育 課 程 綱 要 學 校 本 位 課 程 的 整 體 布 局 A-1 推 動 十 二 年 國 民 基 本 教 育 課 程 綱 要 相 關 配 套 措 施 A-10 分 組 研 討 法 規 研 修 B-1 課 程 教

目 錄 實 施 計 畫 1 專 題 演 講 因 應 十 二 年 國 民 基 本 教 育 課 程 綱 要 學 校 本 位 課 程 的 整 體 布 局 A-1 推 動 十 二 年 國 民 基 本 教 育 課 程 綱 要 相 關 配 套 措 施 A-10 分 組 研 討 法 規 研 修 B-1 課 程 教 高 級 中 等 學 校 學 科 中 心 105 年 度 研 討 會 會 議 手 冊 時 間 :105 年 5 月 18-19 日 地 點 : 明 湖 水 漾 會 館 ( 苗 栗 縣 頭 屋 鄉 ) 指 導 單 位 : 教 育 部 國 民 及 學 前 教 育 署 主 辦 單 位 : 普 通 型 高 級 中 等 學 校 課 程 推 動 工 作 圈 ( 國 立 宜 蘭 高 級 中 學 ) 協 辦 單 位

More information

中山大學學位論文典藏

中山大學學位論文典藏 -- IEMBA 3 ii 4W2H Who( ) When( ) What( ) Why( ) How much( ) How to do( ) iii Abstract Pharmaceutical industry can be regard as one of the knowledge-intensive industries. Designing a sales promotion for

More information

Guide to Install SATA Hard Disks

Guide to Install SATA Hard Disks SATA RAID 1. SATA. 2 1.1 SATA. 2 1.2 SATA 2 2. RAID (RAID 0 / RAID 1 / JBOD).. 4 2.1 RAID. 4 2.2 RAID 5 2.3 RAID 0 6 2.4 RAID 1.. 10 2.5 JBOD.. 16 3. Windows 2000 / Windows XP 20 1. SATA 1.1 SATA Serial

More information

前 言 一 場 交 換 學 生 的 夢, 夢 想 不 只 是 敢 夢, 而 是 也 要 敢 去 實 踐 為 期 一 年 的 交 換 學 生 生 涯, 說 長 不 長, 說 短 不 短 再 長 的 路, 一 步 步 也 能 走 完 ; 再 短 的 路, 不 踏 出 起 步 就 無 法 到 達 這 次

前 言 一 場 交 換 學 生 的 夢, 夢 想 不 只 是 敢 夢, 而 是 也 要 敢 去 實 踐 為 期 一 年 的 交 換 學 生 生 涯, 說 長 不 長, 說 短 不 短 再 長 的 路, 一 步 步 也 能 走 完 ; 再 短 的 路, 不 踏 出 起 步 就 無 法 到 達 這 次 壹 教 育 部 獎 助 國 內 大 學 校 院 選 送 優 秀 學 生 出 國 研 修 之 留 學 生 成 果 報 告 書 奧 地 利 約 翰 克 卜 勒 大 學 (JKU) 留 學 心 得 原 就 讀 學 校 / 科 系 / 年 級 : 長 榮 大 學 / 財 務 金 融 學 系 / 四 年 級 獲 獎 生 姓 名 : 賴 欣 怡 研 修 國 家 : 奧 地 利 研 修 學 校 : 約 翰 克 普

More information

2015年4月11日雅思阅读预测机经(新东方版)

2015年4月11日雅思阅读预测机经(新东方版) 剑 桥 雅 思 10 第 一 时 间 解 析 阅 读 部 分 1 剑 桥 雅 思 10 整 体 内 容 统 计 2 剑 桥 雅 思 10 话 题 类 型 从 以 上 统 计 可 以 看 出, 雅 思 阅 读 的 考 试 话 题 一 直 广 泛 多 样 而 题 型 则 稳 中 有 变 以 剑 桥 10 的 test 4 为 例 出 现 的 三 篇 文 章 分 别 是 自 然 类, 心 理 研 究 类,

More information

UDC The Policy Risk and Prevention in Chinese Securities Market

UDC The Policy Risk and Prevention in Chinese Securities Market 10384 200106013 UDC The Policy Risk and Prevention in Chinese Securities Market 2004 5 2004 2004 2004 5 : Abstract Many scholars have discussed the question about the influence of the policy on Chinese

More information

第一章 緒論

第一章 緒論 (informed consent) 6 . (Informed 23 Consent) 24 (Informed Consent) informed consent 1. 2. 7 3. 4. 5. 6.. 26 1. 8 2. 3. 4. 5. 6.. Braddock 1993 59 65 1057 (discussion of the patient s role in decision making)

More information

Open topic Bellman-Ford算法与负环

Open topic   Bellman-Ford算法与负环 Open topic Bellman-Ford 2018 11 5 171860508@smail.nju.edu.cn 1/15 Contents 1. G s BF 2. BF 3. BF 2/15 BF G Bellman-Ford false 3/15 BF G Bellman-Ford false G c = v 0, v 1,..., v k (v 0 = v k ) k w(v i 1,

More information

< F5FB77CB6BCBD672028B0B6A46AABE4B751A874A643295F5FB8D5C5AA28A668ADB6292E706466>

< F5FB77CB6BCBD672028B0B6A46AABE4B751A874A643295F5FB8D5C5AA28A668ADB6292E706466> A A A A A i A A A A A A A ii Introduction to the Chinese Editions of Great Ideas Penguin s Great Ideas series began publication in 2004. A somewhat smaller list is published in the USA and a related, even

More information

VASP应用运行优化

VASP应用运行优化 1 VASP wszhang@ustc.edu.cn April 8, 2018 Contents 1 2 2 2 3 2 4 2 4.1........................................................ 2 4.2..................................................... 3 5 4 5.1..........................................................

More information

快乐蜂(Jollibee)快餐连锁店 的国际扩张历程

快乐蜂(Jollibee)快餐连锁店 的国际扩张历程 Case6 Jollibee Foods Corporation Jollibee FAN Libo Case Synopsis (1) The case opens with a trigger issue focused on three investment decisions facing the international division new manager, Noli Tingzon.

More information

目 录

目 录 1 Quick51...1 1.1 SmartSOPC Quick51...1 1.2 Quick51...1 1.3 Quick51...2 2 Keil C51 Quick51...4 2.1 Keil C51...4 2.2 Keil C51...4 2.3 1 Keil C51...4 2.4 Flash Magic...9 2.5 ISP...9 2.6...10 2.7 Keil C51...12

More information

錫安教會2015年11月29日分享

錫安教會2015年11月29日分享 錫 安 教 會 2015 年 11 月 29 日 分 享 第 一 章 : 天 馬 座 行 動 答 問 篇 (2) 問 題 (1): 信 息 中 曾 提 及, 有 一 群 忠 良 的 皇 者 和 精 英 製 造 共 同 信 息, 但 亦 有 一 群 奸 惡 的 如 果 將 來 他 們 來 尋 找 我 們, 顯 示 他 們 是 製 造 共 同 信 息 的 人 這 樣, 我 們 有 沒 有 需 要 或 者

More information

2005 5,,,,,,,,,,,,,,,,, , , 2174, 7014 %, % 4, 1961, ,30, 30,, 4,1976,627,,,,, 3 (1993,12 ),, 2

2005 5,,,,,,,,,,,,,,,,, , , 2174, 7014 %, % 4, 1961, ,30, 30,, 4,1976,627,,,,, 3 (1993,12 ),, 2 3,,,,,, 1872,,,, 3 2004 ( 04BZS030),, 1 2005 5,,,,,,,,,,,,,,,,, 1928 716,1935 6 2682 1928 2 1935 6 1966, 2174, 7014 %, 94137 % 4, 1961, 59 1929,30, 30,, 4,1976,627,,,,, 3 (1993,12 ),, 2 , :,,,, :,,,,,,

More information