WINDOWS端口到进程的实现
2008-04-09 04:00:16来源:互联网 阅读 ()
作者: flashsky
端口到进程的检查是对进程状态的一个检查,目前国内XICI的SHOTGUN开发了一个工具PPORT,但是其程序却无法列出系统进程如8号进程开启的端口。国外的工具如FPORT可以列出,但其缺乏源代码和说明,下面是根据FPORT反汇编出来的代码获得的WINDOWS端口到进程实现的过程:
1. 首先使用ZwOpenSection打开/device/physcalmemory句柄
2. 使用MapViewOfFile将/device/physcalmemory影射到自己进程的空间
3. 提升自己的权限到LOCALSYSTEM并调整当前进程的权限
4. 使用ZWOPENFILE打开/device/tcp和/device/udp设备
5. 使用NtQuerySystemInformation获得当前所有句柄的列表
6. 检查所有句柄的列表中对应当前打开的/device/tcp, /device/tcp设备的句柄
7. 将当前进程打开的TCP设备对应的句柄的dwKeObject进行换算运算获得其对应/device/physcalimemory中的位置,算法如下
readset1 = (tcpdnum->dwKeObject>>0x16);
readset1 = *((LPDWORD)((DWORD)pmaddr 4*readset1));
readset1=(readset1&0xfffff000) (tcpdnum->dwKeObject&0x003ff000);
8. 在根据获得的位置将对应的物理内存从新影射到本地进程空间
9. 从物理内存空间中读出对应TCP设备的信息,偏移地址是tcp设备句柄的dwKeObject后几位
10. 重复以上过程获得UDP设备的设备信息
11. 创建一个event并和一个overlapped挂接
12. 循环依次打开句柄表,检查句柄是否为文件句柄,如果是,按以上影射方法获得对应句柄的物理空间的描述信息
13. 比较句柄物理设备信息是否和TCP的一致,主要是比较头4个字节和0x10为1或2,0x11-0x13的字节为0,如果一致,就说明是一个TCP端口
14. 复制此句柄到本地,对于0x10为2的设备,说明此设备需要先进行申请,对该句柄发出一个设备请求查询请求,对于0x10为1的设备,跳过此步到15
DeviceIoControl(myhand,0x210012,&in,0x18,&out,0x38,&p,&la);in中包含一个请求查询的申请代码,如果成功,进行15
15. 对该句柄发出一个设备查询请求
DeviceIoControl(myhand,0x210012,&in1,0x18,&out1,0x30,&p,&la);如果成功,起输出的设备状态中包含了此设备的端口号码。
16. 再按以上方法查询UDP端口
17. 剩下的就是进程的一些信息了,这些大家都很熟悉了,就不多说了
18. 下面是例子程序联接 http://www.shopsky.com/aa1.exe
连着5天的每天工作到深夜2点看fport的汇编代码,先为了搞出zwopenfile(msdn和SDK都没有)的原形就化了好多时间,谁知道好不容易根据汇编搞出了,发现ddk上早有了,真是气愤。还是感谢shotgun的程序,是他的程序让我对这个感兴趣,呵呵。如果需要源代码的,可以给我发邮件。
欢迎大家提出意见和想法。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash