WINDOWS端口到进程的实现

转载 2007年09月13日 22:36:00
 
作者: 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
 

windows 多任务与进程

多任务,进程与线程的简单说明 多任务的本质就是并行计算,它能够利用至少2处理器相互协调,同时计算同一个任务的不同部分,从而提高求解速度,或者求解单机无法求解的大规模问题。以前的分布式计算正是利用这点...
  • lanuage
  • lanuage
  • 2016年09月06日 22:27
  • 1356

windows环境下批处理实现守护进程

这个脚本提供两种方式守护,一种是通过进程名,但对于进程名都是java.exe的java程序不适用,另一种是通过netstat查找应用程序所监听的端口是否正在被监听。这两种方式可以在脚本中通过两个冒号注...
  • u013408061
  • u013408061
  • 2016年11月24日 01:20
  • 774

Windows进程通信之进程内存读写

本文由danny发表于 http://blog.csdn.net/danny_share
  • Danny_Share
  • Danny_Share
  • 2014年08月07日 16:30
  • 998

在windows下用c++编写守护进程

写一个C++程序,监控另一个进程,发现该进程关掉了就自动把它重启  #include   #include   #include   #include   using namespace...
  • u013408061
  • u013408061
  • 2016年11月24日 01:21
  • 1361

Windows下如何杀掉进程或占用相关端口号的进程

平时工作中,在Windows系统下,经常在任务管理器里面发现,某一进程数目非常之多,本文主要讲述如何进行批量删除或者只删除一个进程。...
  • liuweiweiwei
  • liuweiweiwei
  • 2016年04月14日 15:44
  • 3541

深入理解操作系统原理之Windows进程管理

一、Windows 2000的基元成分 对象、进程、线程是Windows2000三个基元成份,它们之间有互相交叉的关系。 1、对象 对象是一个抽象的数据结构,在Windows2000中用以表...
  • xiaokang123456kao
  • xiaokang123456kao
  • 2017年06月29日 22:31
  • 958

Windows进程间通信

因为Windows中每个进程都有自己的虚拟地址空间,所以一个进程无法访问到别一个进程的地址空间,因此相对来说进程间的通信要复杂一些。Windows操作系统为应用程序之间的进程间通信,数据共享提供了很多...
  • suhuaiqiang_janlay
  • suhuaiqiang_janlay
  • 2015年08月13日 17:58
  • 916

windows内核状态下进程创建解析

存与进程管理器 ========================== But I fear tomorrow I'll be crying, Yes I fear tomorrow I'll...
  • dasgk
  • dasgk
  • 2014年01月01日 23:55
  • 1972

Windows中进程的内存结构

基础知识:堆栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。允许插入或删除操作的一端称为栈顶,另一端称为栈底,对堆栈的插入和删除操作被称为入栈和出栈。有一组CPU指令可以实现对进程...
  • zhubosa
  • zhubosa
  • 2016年01月11日 14:27
  • 1123

Windows 多进程通信API总结

在一个大型的应用系统中,往往需要多个进程相互协作,进程间通信(IPC,Inter Process Communication)就显得比较重要了。在Linux系统中,有很多种IPC机制,比如说,信号(s...
  • u011000290
  • u011000290
  • 2015年08月30日 20:16
  • 21975
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WINDOWS端口到进程的实现
举报原因:
原因补充:

(最多只允许输入30个字)