/*********************************************************************************************
特别警告：如果您当前已经运行了旧版本的WIN64AST，请重启后再运行新版本，否则可能会造成蓝屏死机。
*********************************************************************************************/


软件说明＆免责声明
==================
本软件能查看并管理64位WINDOWS系统的各种内核信息，可用于手工杀毒、辅助调试、内核研究等。
本软件的设计思想是：底层优先，兼顾安全。如果本软件因各种原因引发了蓝屏而导致您受到经济损失，本人恕不负责。


软件功能
========
1.进程/内存/线程/模块/句柄/窗口管理
2.内核模块查看
3.网络连接查看和禁止
4.查看/恢复SSDT和Shadow SSDT
5.扫描/恢复RING3和RING0的内联钩子
6.查看并删除消息钩子
7.查看/恢复重要驱动程序分发函数
8.查看/恢复内核对象例程钩子
9.枚举通告和回调
10.枚举I/O定时器
11.枚举DPC定时器
12.枚举MiniFilter/失效MiniFilter的回调函数
13.枚举/摘除过滤驱动
14.查看/备份/恢复/自动修复主引导记录(MBR)
15.进程行为监视（创建进程/创建线程/加载驱动/修改注册表/改动文件系统/连接网络/修改时间）
16.内核内存编辑
17.在驱动里枚举文件、强制新建/解锁/删除/破坏文件
18.在驱动里枚举注册表、强制删除/新建/重命名注册表键(KEY)和注册表值(VALUE)
19.禁止创建进程/禁止创建文件/禁止创建注册表键(KEY)和注册表值(VALUE)/禁止加载驱动
20.校验文件签名
21.枚举/恢复中断描述符表钩子
22.枚举全局描述符表
23.显示特殊寄存器的值
24.检测进程的IAT钩子和EAT钩子
25.查看/备份/恢复/自动修复卷引导记录(VBR)
26.网络防火墙
27.枚举/删除SPI、BHO、IE右键菜单
28.DLL/驱动加载器
29.动态开启/关闭LKD（本地内核调试）和DSE（数字签名强制）【警告：此功能会触发PatchGuard导致蓝屏，仅限“内核开发人员”使用。】
30.隐藏进程【警告：此功能会触发PatchGuard导致蓝屏，仅限“内核开发人员”使用。】


软件需求
========
1.Win7x64/Win2008R2/Win8x64/Win2012/Win8.1x64/Win2012R2（7600/7601/9200/9600）
2.Win7x64和Win2008R2需要安装Microsoft .NET Framework 4才能运行（WIN8/WIM8.1不用）【官方下载地址：http://www.microsoft.com/zh-cn/download/details.aspx?id=17718】
3.运行时需要管理员权限（对Win64AST.exe按下右键，选择“以管理员身份运行”）
4.如果长时间使用“行为监视器”功能，推荐四核CPU和8GB以上的内存


初始设置
========
1.命令行参数：-cn（显示中文界面）、-cn（显示英文界面）、-protect（开启进程自我保护）。
2.第一次运行时，强烈建议先打开“杂项”选项卡，然后点击“下载符号文件”按钮，把需要的符号文件下载下来（大约20MB）。


更新历史
========
2014-02-22：1.04[稳定版]
1.新增查看自启动项
2.新增检查系统关键部位
3.新增定位内核模块到对应的注册表
4.新增枚举内核模块时扫描可疑驱动对象
5.新增全局禁止联网
6.新增禁止写MBR
7.增强“程序员功能”中的驱动加载（可以直接加载无签名驱动）
8.修正禁用MINIFILTER过滤函数时可能导致蓝屏的BUG
9.修正注册表编辑器的一个隐性蓝屏BUG
10.修正枚举/删除超多层畸形目录时蓝屏的BUG
11.修正“行为监视器”中获取注册表信息不正确的BUG
12.修正某些电脑上“强制关机”不起作用的BUG

2013-11-29：1.03B[正式版]
1.监控访问网络
2.监视系统时间改变
3.检测/备份/恢复VBR
4.简易防火墙
5.枚举/删除SPI、BHO、IE右键菜单
6.驱动和DLL加载器
7.动态开启关闭LKD（本地内核调试）
8.增强显示枚举句柄的信息
9.增强动态开启关闭DSE（驱动签名强制）
10.恢复隐藏进程功能（增加会触发PG的警告）
11.按照WINDBG的格式修改eb/ew/ed/eq的用法
12.修复存在恶意minifilter的情况下枚举文件蓝屏、无法复制/重命名文件的BUG
13.增强底层方式读写文件/磁盘功能
14.修复一些小BUG和更加界面友好性（比如支持拖放文件）

2013-09-15：1.03A[正式版]
1.修复各种BUG，增加在WIN8.1上的稳定性
2.窗体大小可以任意调节

2013-09-08：1.03[测试版]
1.[+]支持Windows 8.1
2.[+]动态禁用Driver Signature Enforcement（驱动签名强制）
3.[*]完善了底层方式读写磁盘的逻辑（解决部分电脑上无法读写MBR的问题，遇到GPT分区会提示）
4.[*]完善了句柄的枚举

2013-08-07：1.02[正式版]
01.删除：“隐藏进程”功能
02.修复：某些listview复制信息不全的问题
03.修复：内核模块定位错误
04.修复：注册表某些项目显示不全
05.修复：解锁文件的BUG
06.修复：卸载DLL的BUG
07.新增：进程『启动时间』、『启动参数』数据
08.新增：注入DLL到系统进程（SMSS.EXE和CSRSS.EXE除外）
09.新增：简单识别工作队列线程（信息不保证正确）
10.新增：读写进程内存时禁用COPY-ON-WRITE
11.新增：内核探索者命令（虚拟地址转换、物理地址映射等）
12.新增：文件管理器功能（设置文件权限、创建硬链接、查看句柄占用信息、查看重启删除列表）

2013-02-21：1.01[正式版]
01.兼容：可以在“带网络连接的安全模式”下运行（但部分和minifilter驱动有关的功能无法使用）
02.兼容：修正了与某HIPS共用时导致获取SSDT原始地址错误的问题
03.修改：手动检测MBR Rootkit改为自动检测
04.修改：高亮非微软项目（多个相关列表）
05.增强：使用“随机驱动文件名”防止某些软件根据文件名来阻止驱动加载
06.增强：结束进程
07.增强：枚举进程模块
08.增强：INLINE HOOK检测新增一些重要的未导出函数（如KiSystemCall64等）
09.新增：窗口探测器、消息洪水攻击
10.新增：自动修复MBR（穿部分还原，测试能过『雨过天晴20130111』）
11.新增：文件扇区清零（穿部分还原，测试能过『雨过天晴20130111』、『冰点7.51.20.4170』、『影子卫士1.2.0.355』、『Returnil 2011(1.0.5.5400)』）
12.新增：导出注册表项
13.新增：定位到文件/注册表（行为监视器）
14.新增：命令行参数nosafecheck（启动时不进行安全检查加快启动速度）
15.新增：显示驱动服务名、删除驱动文件以及相关注册表项目、卸载驱动
16.新增：枚举/申请/释放/转储/反汇编进程内存、修改进程内存属性、内存内容查找
17.新增：当行为监视器拦截到驱动加载时，把驱动文件复制到C盘根目录
18.新增：根据进程名保护进程
19.新增：显示指定类型文件、给文件和文件夹加上/去除“只读/隐藏/系统属性”
20.其他：图标换成了戴尔ALIENWARE品牌的图标

2013-01-22：1.00[正式版]
1.新增文件管理功能
2.新增注册表编辑功能

2013-01-01：1.00[BETA6]
1.新增“废除回调函数”功能
2.新增枚举/恢复IDT钩子
3.新增扫描/恢复进程的IAT钩子和EAT钩子
4.新增枚举/恢复ClassPNP.sys、ATAPI.sys、NDIS.sys、TCPIP.sys的分发函数
5.新增查看特殊寄存器的值
6.新增枚举全局描述符表
7.内核探索者新增10条命令
8.行为监视器新增“排除指定PID”功能，信息显示上更加详细

2012-12-10：1.00[BETA5]
1.新增枚举FSD分发函数
2.新增枚举内核对象
3.新增枚举I/O定时器和DPC定时器
4.新增枚举MiniFilter和过滤驱动
5.新增枚举Object回调
6.新增网络连接远程IP地理地址检测
7.新增检测MBR ROOTKIT(目前还很弱，以后慢慢增强)

2012-11-10：1.00[BETA4]
1.新增支持WINDOWS 8 X64(9200)

2012-11-04：1.00[BETA3]
1.新增枚举回调
2.新增进程行为监视
3.新增中文语言界面

2012-09-16：1.00[BETA2]
1.新增注入DLL和SHELLCODE
2.部分解决内存泄漏
3.不再要破解内核才能运行

2012-09-07：1.00[BETA1]
1.新增强删注册表键/值
2.新增进程保护
3.新增INLINE HOOK扫描
4.内核内存查看

更早之前的更新：
2012-07-06：0.04[C0/QS]【修正了上一版的一些BUG，以及进行界面微调，没有功能性更新】
2012-07-02：0.04[B3/QS]【新增枚举并删除消息钩子、解锁文件，修正了上一版的一些BUG】
2012-03-10：0.04[B2/QS]【新增隐藏进程以及强制读写进程内存，修正了上一版的一些BUG】
2012-02-26：0.04[B1/ES]【新增查看/恢复Shadow SSDT】
2012-02-23：0.04[A2/QS]【修正了上一版的一些BUG】
2012-02-19：0.04[A1/ES]【新增支持查看/恢复SSDT，强制删除文件】
2011-08-22：0.03[A2/ES]【修复BUG和界面微调】
2011-07-11：0.03[A1/ES]【修复BUG和界面微调】
2011-05-08：0.02[ES]   【修复BUG和界面微调】
2011-02-03：0.01       【第一个版本】


其它信息
========
QQ讨论群：173718777
软件作者：胡文亮（Tesla.Angela）
更新时间：2013-11-29 于 广州星河湾
新版下载：http://win64ast.m5home.com
BUG反馈/建议意见：tesla.angela@qq.com
常见问题解答（不断更新）：http://m5home.blog.163.com/blog/static/209122181201210137024457


目前已知的问题
==============
1.某些操作在配置低的机器上可能会卡（我测试的最低配置机器是AMD X2 245 + 2GB DDR2，枚举驱动时有点卡）
2.存在内存泄漏（由于这个软件是我的业余作品，暂时没有时间解决这个问题）


附录：Kernel Explorer命令
=========================
总体说明：
1.数字仅允许使用10进制数字（1234）和16进制数字（0xABCD）
2.函数名可以是win32k.sys和ntoskrnl.exe的函数名
3.在使用之前强烈建议使用命令“syminit”来初始化符号
4.如果操作不当会引发蓝屏
------
db 地址/函数名 个数             （显示一定个数的BYTE ，如果不指定个数，默认个数为128）
例如：【db 0xFFFFF8001234567 0x64】、【db NtUserPostMessage】、【db ntopenprocess 2048】
------
dw 地址/函数名 个数             （显示一定个数的WORD ，如果不指定个数，默认个数为64）
例如：【dw 0xFFFFF8001234567 0x64】、【dw NtUserPostMessage】、【dw ntopenprocess 2048】
------
dd 地址/函数名 个数             （显示一定个数的DWORD，如果不指定个数，默认个数为32）
例如：【dd 0xFFFFF8001234567 0x64】、【dd NtUserPostMessage】、【dd ntopenprocess 2048】
------
dq 地址/函数名 个数             （显示一定个数的QWORD，如果不指定个数，默认个数为16）
例如：【dq 0xFFFFF8001234567 0x64】、【dq NtUserPostMessage】、【dq ntopenprocess 2048】
------
eb 地址/函数名 b1 b2 b3 ... bN  （给指定地址写入一个BYTE，或者一个字节数组）
例如：【eb 0xFFFFF8001234567 0x64】、【eb NtUserPostMessage 0x90 0xC3】
------
ew 地址/函数名 w1 w2 w3 ... wN  （给指定地址写入一个WORD）
例如：【ew 0xFFFFF8001234567 0x6464】、【ew NtUserPostMessage 0x90C3 0xC390】
------
ed 地址/函数名 d1 d2 d3 ... dN  （给指定地址写入一个DWORD）
例如：【ed 0xFFFFF8001234567 0x64646464】、【ed NtUserPostMessage 0x909090C3 0x909090C3】
------
eq 地址/函数名 q1 q2 q3 ... qN  （给指定地址写入一个QWORD）
例如：【eq 0xFFFFF8001234567 0x6464646464646464】、【eq NtUserPostMessage 0x90909090909090C3 0x90909090909090C3】
------
u 地址/函数名 指令条数          （反汇编一个地址，如果不指定指令条数，默认条数为8，如果输入0，则反汇编到出现ret或者长度大于PAGE_SIZE为止）
例如：【ub 0xFFFFF8001234567 0x64】、【ub NtUserPostMessage】
------
uf 地址/函数名                  （反汇编整个函数，遇到ret或者jmp则停止）
例如：【uf 0xFFFFF8001234567】、【uf NtUserPostMessage】
------
dt 结构体名                     （根据结构体名返回结构体大小）
例如：【dt eprocess】、【dt _list_entry】
-------
dtx 结构体名                    （根据结构体名获得结构体大小，支持通配符，但通配符需要符号文件的支持，例如：XX*『开头为XX』、*YY『结尾为YY』、XX*YY『开头为XX结尾为YY』、*XX*『含有XX字符串』、*『所有符号』、nt!*『NT符号』、win32k!*『WIN32K符号』）
例如：【dtx *INFO】、【dtx *】、【dtx win32k!*】
------
x 函数名                        （根据函数名获得函数地址，支持通配符，但通配符需要符号文件的支持，例如：XX*『开头为XX』、*YY『结尾为YY』、XX*YY『开头为XX结尾为YY』、*XX*『含有XX字符串』、*『所有符号』、nt!*『NT符号』、win32k!*『WIN32K符号』）
例如：【x ntopenprocess】、【x NtUserPostMessage】、【x *Process】、【x Ki*Service】、【x *Terminate*】
------
ln 地址	                        （根据地址返回所在的模块和函数名）
例如：【ln 0xFFFFF8001234567】
-------
kma 长度                        （分配内核内存，返回起始地址）
例如：【kma 20】
-------
kfr 起始地址                    （释放分配的内核内存）
例如：【kfr 0xFFFFF8001234567】
-------
kms 起始地址 字节 长度          （设置内核内存的值）
例如：【kms 0xFFFFF8001234567 0 20】
-------
kmc 目标地址 原始地址 长度      （复制内核内存）
例如：【kmc 0xFFFFF8001234567 0xFFFFF8007654321 20】
-------
kec 起始地址                    （执行内核shellcode）
例如：【kec 0xFFFFF8001234567】
------
vtop EPROCESS 虚拟地址          （虚拟地址转换为物理地址）
例如：【vtop 0xFFFFF8001234567 0x12345678】
------
mpa 物理地址 长度               （映射物理地址）
例如：【mpa 0x0 64】
------
umpa 虚拟地址 长度              （取消映射物理地址）
例如：【umpa 0xFFFFF8001234567 64】
------
syminit                         （初始化符号）
无范例
------
help                            （获得帮助信息）
无范例
------
cls                             （清屏）
无范例
------
option 选项名 值                （设置选项）
|-【option chkmemsafe 1/0】（打开/关闭内存有效性检查）


附录：微软工具下载
==================
WINDBG X64：http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi
DBGVIEW：   http://download.sysinternals.com/files/DebugView.zip