-
-
[旧帖] [原创]Windows及Rootkit基本知识(申请邀请码) 0.00雪花
-
发表于: 2012-2-10 12:52 1324
-
1. Windows文件名是255字符,dos文件名不能超过8个字符,后缀名不能超过3个字符
Windows XP使用 NT 5.1.2600内核
Windows 7 使用 NT 6.1
Vista 使用 NT 6.0
Server 2008 R2 NT 6.1
Server 2008 其他 NT 6.0
2. Windows有线程池和服务,Unix没有
3. 预定义避免使用指针要通过LPTSTR 与LPCTSTR 进行区分
4. Windows Handle 不透明,不以顺序分配,Windows没有父子进程关系,以作业对象组织,以CR-LF表示换行
5. 路径分隔符是反斜杠\,但是在CreateFile等其他低级的API中正斜杠也可以用,最好避免造成不兼容性,目录和文件名大小不敏感,但是大小写保持,路径名最大为MAX_PATH 260长,但可以通过转义字符指定非常长的名称,如加上\ \ ?及使用Unicode字符避开这个限制,可以长达32K个字符的名称
6. UNIX的open函数返回的是整型文件.UNIX文件总是可以共享
7. Unicode 字符集,使用#define _UNICODE 必须在<windows.h>前语句给出,默认使用的是8位字符,L使用的是16位字符,_T使用通用文本字符,包含tchar.h
8. 控制台输入CONIN$ CONOUT$
进程终止的方法
1. 主线程的入口函数返回(采用这种方式,保证所有线程资源得到正确的释放
2. ExitProcess或ExitThread无法保证正确的清除对象,在入口函数中调用ExitThread只会使主线程停止,如果进程中还有其他线程运行,进程不会终止
3. TerminateProcess函数,这种方式终止不会得到任何有关终止运行的通知,终止之前不会将内存中它所拥有的任何东西写回磁盘。该函数是异步执行的,它会告诉系统需要某进程运行终止,但是函数返回时,无法保证这个进程已经终止。如果要确切知道是否已经终止运行要调用WaitForSingleObject函数。
4. 所有线程终止,会将进程的退出代码设为最后一个终止运行的线程的终止代码。
进程内核对象的存在时间可能大大超过进程的存在时间,即使进程已经终止运行,这些信息也可能还是有用的,可以通过GetExitCodeProcess获得目前已经销毁的进程退出代码
如果调用这个函数时进程尚未终止,返回一个STILL_ACTIVE标识符,否则返回数据退出代码值。值得注意的是调用CloseHandle会让系统停止维护进程的统计数据。
5 进程之间共享数据的最好方法是使用内存映射
Microsoft Office 2003-2007版本脆弱性
将MS08-014.mspx补丁卸载,允行执行远程代码
6 GetAsyncKeyState和GetForegroundWindow轮询键的状态,可能会造成CPU使用率过高
7 Windows 自动更新服务 wuauserv
Windows 安全中心服务 wscsvc
Windows Defender服务 WinDefend
Windows 错误报告服务 ERsvc
ERSvc 错误报告 WerSvc
8 Rootkit 嵌入到MBR,Mebroot利用rootkit下载一个450KB的文件,将自身存储在硬盘的最后几个扇区,将自举管理程序写入MBR,实现隐藏磁盘访问,内核中实现,覆盖DISK.sys,调用DISK.sys,创建看门狗线程,如果没有安装,进行安装.查找NDIS隐藏和文档中未出现的函数,与NDIS通信,构造TCP/IP协义栈。Rootkit一般有两种类型:用户模式和内核模式,用户模式的rootkit如HackerDefender100r容易被发现,但holy_father提供了HxDef的修改版本,命名为Silver andGold并开始销售,也能够防止系统级别的进程,内核模式的rootkit的运行级别与驱动程序是一个级别,内核rootkit不能工作于所有版本的Windows,增加了操作系统的不稳定性,每个rootkit都可以被探测到,但是准确探测的难度和时间超过了结果的价值
9 EasyHook可能是最稳定的钓子引擎,可绕过大多数杀软http://easyhook.codeplex.com/
Vanquishv0.2.1开源,但大部分都能查杀。
Windows XP使用 NT 5.1.2600内核
Windows 7 使用 NT 6.1
Vista 使用 NT 6.0
Server 2008 R2 NT 6.1
Server 2008 其他 NT 6.0
2. Windows有线程池和服务,Unix没有
3. 预定义避免使用指针要通过LPTSTR 与LPCTSTR 进行区分
4. Windows Handle 不透明,不以顺序分配,Windows没有父子进程关系,以作业对象组织,以CR-LF表示换行
5. 路径分隔符是反斜杠\,但是在CreateFile等其他低级的API中正斜杠也可以用,最好避免造成不兼容性,目录和文件名大小不敏感,但是大小写保持,路径名最大为MAX_PATH 260长,但可以通过转义字符指定非常长的名称,如加上\ \ ?及使用Unicode字符避开这个限制,可以长达32K个字符的名称
6. UNIX的open函数返回的是整型文件.UNIX文件总是可以共享
7. Unicode 字符集,使用#define _UNICODE 必须在<windows.h>前语句给出,默认使用的是8位字符,L使用的是16位字符,_T使用通用文本字符,包含tchar.h
8. 控制台输入CONIN$ CONOUT$
进程终止的方法
1. 主线程的入口函数返回(采用这种方式,保证所有线程资源得到正确的释放
2. ExitProcess或ExitThread无法保证正确的清除对象,在入口函数中调用ExitThread只会使主线程停止,如果进程中还有其他线程运行,进程不会终止
3. TerminateProcess函数,这种方式终止不会得到任何有关终止运行的通知,终止之前不会将内存中它所拥有的任何东西写回磁盘。该函数是异步执行的,它会告诉系统需要某进程运行终止,但是函数返回时,无法保证这个进程已经终止。如果要确切知道是否已经终止运行要调用WaitForSingleObject函数。
4. 所有线程终止,会将进程的退出代码设为最后一个终止运行的线程的终止代码。
进程内核对象的存在时间可能大大超过进程的存在时间,即使进程已经终止运行,这些信息也可能还是有用的,可以通过GetExitCodeProcess获得目前已经销毁的进程退出代码
如果调用这个函数时进程尚未终止,返回一个STILL_ACTIVE标识符,否则返回数据退出代码值。值得注意的是调用CloseHandle会让系统停止维护进程的统计数据。
5 进程之间共享数据的最好方法是使用内存映射
Microsoft Office 2003-2007版本脆弱性
将MS08-014.mspx补丁卸载,允行执行远程代码
6 GetAsyncKeyState和GetForegroundWindow轮询键的状态,可能会造成CPU使用率过高
7 Windows 自动更新服务 wuauserv
Windows 安全中心服务 wscsvc
Windows Defender服务 WinDefend
Windows 错误报告服务 ERsvc
ERSvc 错误报告 WerSvc
8 Rootkit 嵌入到MBR,Mebroot利用rootkit下载一个450KB的文件,将自身存储在硬盘的最后几个扇区,将自举管理程序写入MBR,实现隐藏磁盘访问,内核中实现,覆盖DISK.sys,调用DISK.sys,创建看门狗线程,如果没有安装,进行安装.查找NDIS隐藏和文档中未出现的函数,与NDIS通信,构造TCP/IP协义栈。Rootkit一般有两种类型:用户模式和内核模式,用户模式的rootkit如HackerDefender100r容易被发现,但holy_father提供了HxDef的修改版本,命名为Silver andGold并开始销售,也能够防止系统级别的进程,内核模式的rootkit的运行级别与驱动程序是一个级别,内核rootkit不能工作于所有版本的Windows,增加了操作系统的不稳定性,每个rootkit都可以被探测到,但是准确探测的难度和时间超过了结果的价值
9 EasyHook可能是最稳定的钓子引擎,可绕过大多数杀软http://easyhook.codeplex.com/
Vanquishv0.2.1开源,但大部分都能查杀。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
看原图
赞赏
雪币:
留言: