求救,装备“已被捕获”怎么向明星求救借钱解决

高分求救:如何制作一个能捕获系统对文件处理进程的程序?分不够再加,最好有源码解释一下!欢迎讨论,来者有分
100woainihaha]
发布时间: 6:30:14
编辑:www.fx114.net 我要评论
本篇文章主要介绍了"高分求救:如何制作一个能捕获系统对文件处理进程的程序?分不够再加,最好有源码解释一下!欢迎讨论,来者有分
100woainihaha]",主要涉及到高分求救:如何制作一个能捕获系统对文件处理进程的程序?分不够再加,最好有源码解释一下!欢迎讨论,来者有分
100woainihaha]方面的内容,对于高分求救:如何制作一个能捕获系统对文件处理进程的程序?分不够再加,最好有源码解释一下!欢迎讨论,来者有分
100woainihaha]感兴趣的同学可以参考一下。
最近需要做一个能捕获系统对文件处理进程的程序,可不知道从何下手。看过一些帖子,好像是要监视api调用,然后再挂起,再执行自己程序代码后释放,但怎么做呢?要求对系统资源消耗较小为好!
&&&&能解决问题的可以单独开帖子加分!
&&&&请大家多帮忙!!对于"能捕获系统对文件处理进程的程序"
好象监视api没有用,要自己写驱动.
up主要是监视13号中断有关io的。up监视CreateFile吧!谢谢大家!
能不能说的详细一点,最好不要自己写驱动!(实在没办法也行)
欢迎大家指点监视程序的编制&
&&监视程序,这个名字听起来似乎很陌生。它的用途主要是在后台监视系统中关键信息的改变,比如注册表的改变及硬盘上由于文件操作引起的改变等等。
  也许有人会问了,编制这样的程序有什么价值呢?硬盘上文件改变了,我只要在资源管理器里点一点不就全都清楚了吗?问题当然不会这样简单,如今大家的硬盘都已经用G来做单位了,一块4.3G的硬盘中,大大小小的文件全都加起来也会有若干万,更何况那些看不见的系统文件和隐藏文件了。再加上注册表,那其中的条条款款,数量也丝毫不逊于硬盘上的文件。要想随时知道自己机器是否有所变动,绝对不是一件很轻松的事。而监视程序就可以随时检测到这些变化,帮助我们了解这些情况。
  当然这只是监视程序的一部分作用,它最大的作用就是可以记录下某个软件安装前后系统的改变,从而为卸载这个软件提供重要的依据。虽然Windows自带了一个Uninstall&Shield,但是它似乎并不能很干净地把原来的软件卸掉,每次卸载总会留下一些讨厌的残渣,致使系统中的垃圾信息不断增长,我们的硬盘空间也总是莫名其妙地越用越少。因此,一些号称能够完全卸载软件的专用卸载工具应运而生。在这其中,有一些就运用了监视系统的技术,比如Uninstaller&Manager和RegMonitor。
  下面我们开始讨论如何编程实现这一监视功能。首先介绍几个重要的api函数:
  FindFirstChangeNotification(&);
  FindNextChangeNotification(&);
  WaitForSingleObject(&);&
  其中FindFirstChangeNotification(lpzpath,fwatchsubtree,fdwfilter)中的lpzpath表示要监视的路径名,fwatchsubtree判断是否查看子目录,fdwfilter为要监视的事件,函数执行成功后返回一个句柄。&
  参数fdwfilter取值及其含义如下:
  FILE_NOTIFY_CHANGE_FILE_NAME  查看指定目录下任何文件名的改变
  FILE_NOTIFY_CHANGE_DIR_NAME  查看指定目录下任何目录名的改变
  FILE_NOTIFY_CHANGE_SIZE  查看指定目录下文件大小的改变
  FILE_NOTIFY_CHANGE_ATTRIBUTES  查看指定目录下文件属性的改变
  FindNextChangeNotification(hchange),hchange为FindFirstChangenNotification返回的句柄,其作用是请求系统
在下次检测到相应改变时发出改变通知消息句柄。当函数成功返回后,应用程序可通过WaitForMultipleObjects或WaitfForSingleObject来等待发生改变的通知。WaitForSingleObject(hchange,dwmilliseconds)中hchange为FindFirstChangeNotification 返回的句柄,dwmilliseconds为等待时间值,指定等待完成需要的时间,单位为毫秒。该值为-1时表示时间无限长。最好在结束监视程序之前先用FindCloseChangeNotification(hchange)来关闭句柄。
  下面给出一个简单的实例,其功能就是监视c:\pwin98目录下是否有文件发生变化。一旦有重命名、创建或删除情况发生时,通过Edit控件给出提示。&
  ----------------
  #include&
  #pragma&hdrstop
  #include&“Unit1.h”
  //----------------
  #pragma&package(smart_init)
  #pragma&resource&“*.dfm”
  TForm1&*Form1;
  //-----------------
  __fastcall&TForm1::TForm1(TComponent*&Owner)
  &:&TForm(Owner)
  //-------------------
  void&__fastcall&TForm1::FormCreate(TObject&*Sender)
  DWORD&dwWaitS&
  HANDLE&dwChangeH&//返回通知的句柄
  dwChangeHandle=FindFirstChangeNotification(
  “C:\\PWIN98”,false,FILE_NOTIFY_CHANGE_FILE_NAME);&//设置返回通知的句柄
  if(dwChangeHandle==INVALID_HANDLE_VALUE)
  //判断是否设置成功&
  &ExitProcess(GetLastError( ));&
  while(true){&//设置循环,监视是否有
  dwWaitStatus=WaitForSingleObject(dwChangeHandle,-1);&//通知返回
  switch(dwWaitStatus){
  case&0:
  Edit1-&Text=“Something&Changed”;&//给出提示
  FindCloseChangeNotification(dwcChangeHandle);&//关闭句柄
  exit(EXIT_SUCCESS);&//退出程序
  default:
  ExitProcess(GetLastError( ));
    此例说明如何监视硬盘中文件变化,对于注册表,则有函数RegNotifyChangeKeyValue(&)可以实现类似功能,这里暂省略之。
  怎么样,看过本文,是否对Uninstaller Manager和Reg&Monitor这样的软件有了更深入的了解。在Windows编程中,有些API函数起到了重要的作用,可以让程序实现很多高级的功能。因为API函数是按照C语言语法给出的,所以C++Builder有着得天独厚的优势,对API函数和宏支持得非常好。不好,怎么跑题了?hook也许可以谢谢dejoy(燕青)!
&&&&不过这种办法好象是只能在时间发生后产生通知,而且不及时,做日志记录还可以!而且无法阻止非法的操作!我是想能在进程执行前就捕获消息并且挂起进程,待验证后在释放,和杀毒软件类似呀!
不过非常感谢您的关注!同样感谢每一个留言的兄弟!谢谢up//检测WINDOWS&NT/2K下进程的执行&
文/Ivo&Ivanov
拦截和追踪进程的执行对实现NT任务管理器——像需要外部进程处理的应用程序和系统——是非常有用的。在新进程的开始之上通知感兴趣的部分是开发进程监视系统和全系统钩子的一个典型问题。WIN32&API提供了一个很好的库(PSAPI&and&ToolHelp&[1])的集合,这些库允许你列举当前在系统中运行的进程。虽然这些API非常有用,但当一个新的进程开始或结束时它们不允许你获得通知。这篇文章提供了一个有效而且完整的技术,为了完成这个目标,它基于一个公开的接口。
幸运地,NT/2K提供了一个API集合,知道的像“Process&Structure&Routines“[2]通过NTOSKRNL输出。一个API函数PsSetCreateProcessNotifyRoutine()提供了注册全系统回叫函数的能力,每次当一个进程开始,存在或已经终止时这些回叫函数都会被OS呼叫。上面提到的API函数对简单地通过执行一个NT核心模式的驱动程序和用户模式的WIN32控制程序追捕进程时可以作为一个容易实现的方法来使用。驱动程序的角色是检测进程的执行和通知控制程序这些事件。
●&为监视进程的执行提供一个简单,有效,可靠和线程安全机制
●&在驱动程序和用户的应用程序之间解决同步问题
●&打造一个易于使用和扩展的OOP用户模式的框架
●&允许回叫函数的注册和解注册,还要有动态加载和卸载核心驱动程序的能力
它怎样工作
控制程序在HKLM\SYSTEM\CurrentControlSet\Services下注册核心模式驱动程序,并且动态加载。核心驱动程序然后建立一个指定的事件对象,当新的事件已经触发时(如进程开始或结束),这个事件对象就向用户模式的应用程序发出信号。控制程序打开相同的事件对象,然后建立一个等待这个事件的监听线程。接下来,用户模式的应用程序发送一个请求给驱动程序来开始监视。驱动程序调用PsSetCreateProcessNotifyRoutine(),这个函数接受两个参数。一个指定呼叫者提供的回叫程序的入口指针,责任是从WINDOWS接受所有的通知。在回叫时发生的一个通知上面,驱动程序发出那个信号事件是为了通知用户模式应用程序说有事情发生了。控制程序然后从驱动程序中得到那个特定事件的数据,然后为了更多的进程,将它存储进一个特殊的列队容器。如果不再检测进程执行,用户模式应用程序发送一个请求给驱动程序来停止监视。然后驱动程序释放观察机制。再后来,控制模式应用程序可以卸载驱动程序和对它解注册。
设计和实现
NT模式驱动程序(ProcObsrv)
入口指针DriverEntry()&(ProcObsrv.c)只执行驱动程序的初始化。当驱动程序加载时,I/O管理器呼叫这个函数。既然PsSetCreateProcessNotifyRoutine()允许解注册回叫,这些回叫是我在驱动程序的调度程序中执行的已注册或解注册的实际的进程。这就允许我通过使用一个单独的IOCTL(控制代码IOCTL_PROCOBSRV_ACTIVATE_MONITORING)来动态地开始和停止监视活动。一旦回叫被注册,每次当一个进程开始或终止时,OS就呼叫用户提供的ProcessCallback()。这个函数被植入一个会通过用户模式应用程序选择的缓冲区中。接下来发出指定的事件对象信号,因此等待它的用户模式应用程序会被通知说有可利用的信息检索。
控制程序(ConsCtl)
为了简单的缘故,我决定提供一个简单的控制台应用程序,把想象的GUI要素的实现留给你。设计一个多线程的应用程序允许那个应用程序调整和更易于作出反应。在另一方面,考虑一些与同步存取信息相关的考虑非常重要,这些信息是出版者(如核心模式)提供的和用户(如控制程序)检索的信息。另一重要的关键点是一个检测系统必须可靠,而且确信没有事件漏掉。为了简化进程的设计,首先我需要在用户模式应用程序的不同实体间分配责任,责任是处理驱动程序。然而回答了这些问题,就不难办到了[5]:
1.&系统里的进程是什么?
2.&在框架里的作用是什么?
3.&谁做什么,4.&怎样合作?
下面是一个UML类图,它说明了类之间的关系:
CapplicationScope实现了一个单元集,而且包含了框架主要的接口。它暴露了两个公共方法,它们开始和结束监视进程:
class&CApplicationScope&&
&&&...&Other&Other&details&ignored&for&the&sake&of&simplicity&&...
&&//&Initiates&process&of&monitoring&process
&&BOOL&StartMonitoring(PVOID&pvParam);
&&//&Ends&up&the&whole&process&of&monitoring
&&void&StopMonitoring();
CprocessThreadMonitor是等待通过驱动程序事件发出信号来创建的一个线程。当进程已经创建或结束,驱动程序发出这个事件对象信号,CprocessThreadMonitor的线程被唤醒。然后用户模式应用程序从驱动程序检索数据。接下来,数据被附加给使用它的方法Append()的(CQueueContainer)&列队容器。
CqueueContainer是一个线程安全列队控制器,它提供一个Monitor/Condition变量模式的执行。它主要的目的是提供一个列队容器的线程安全信号。这是方法Append()怎样工作的:
1.&锁住对集合的STL列队对象的访问
2.&添加数据项
3.&发出m_evtElementAvailable事件对象信号
4.&解锁列队
这是它实际的执行:
//&Insert&data&into&the&queue
BOOL&CQueueContainer::Append(const&QUEUED_ITEM&&element)
&&BOOL&bResult&=&FALSE;
&&DWORD&dw&=&::WaitForSingleObject(m_mtxMonitor,&INFINITE);
&&bResult&=&(WAIT_OBJECT_0&==&dw);
&&if&(bResult)
&&&&//&Add&it&to&the&STL&queue
&&&&m_Queue.push_back(element);
&&&&//&Notify&the&waiting&thread&that&there&is
&&&&//&available&element&in&the&queue&for&processing
&&&&::SetEvent(m_evtElementAvailable);
&&::ReleaseMutex(m_mtxMonitor);
&&return&bR
既然它是设计来当列队里有可利用的元素时发出通知的,它就集合了一个CretreivalThread的例子,CretreivalThread等待直到一个元素在本地存储器中变的可用。这是它的伪执行:
1.&等待m_evtElementAvailable事件对象
2.&锁住对STL列队对象的访问
3.&抽取数据项目
4.&解锁列队
5.&处理已经从列队中检索出的信息。
这是当有东西增加进列队时的方法调用:
//&Implement&specific&behavior&when&kernel&mode&driver&
//&notifies&the&user-mode&app
void&CQueueContainer::DoOnProcessCreatedTerminated()
&&QUEUED_ITEM&
&&//&Initially&we&have&at&least&one&element&for&processing
&&BOOL&bRemoveFromQueue&=&TRUE;
&&while&(bRemoveFromQueue)
&&&&DWORD&dwResult&=&::WaitForSingleObject(&m_mtxMonitor,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&INFINITE&);
&&&&if&(WAIT_OBJECT_0&==&dwResult)
&&&&&&&bRemoveFromQueue&=&(m_Queue.size()&&&0);&
&&&&&&&//&Is&there&anything&in&the&queue
&&&&&&&if&(bRemoveFromQueue)
&&&&&&&&&&//&Get&the&element&from&the&queue
&&&&&&&&&&element&=&m_Queue.front();&
&&&&&&&&&&m_Queue.pop_front();
&&&&&&&}&//&if
&&&&&&&else
&&&&&&&&&&//&Let's&make&sure&that&the&event&hasn't&been&
&&&&&&&&&&//&left&in&signaled&state&if&there&are&no&items&
&&&&&&&&&&//&in&the&queue
&&&&&&&&&&::ResetEvent(m_evtElementAvailable);
&&&&}&//&if
&&&&::ReleaseMutex(m_mtxMonitor);
&&&&//&Process&it&only&there&is&an&element&
&&&&//&that&has&been&picked&up
&&&&if&(bRemoveFromQueue)&
&&&&&&&m_pHandler-&OnProcessEvent(&&element,&m_pvParam&);
&&}&//&while
CcustomThread——帮助管理保持原始线程的复杂性。我在抽象类里面封装了所有线程的相关活动。它提供了一个纯虚方法Run(),Run()必须被任何一个特别的线程类(如CretrievalThread和CProcessThreadMonitor)执行。Ccustom线程是设计来保证当你想线程终止时线程函数的返回,这是作为确保所有线程的资源都被适当地清除干净的唯一方式。它提供一个均值,通过发出m_hShutdownEvent事件信号来关闭它的任何实例。
CcallbackHandler是一个抽象类,它设计来在线程已创建或终止时为执行用户提供的行为提供接口。它暴露了一个纯虚方法OnProcessEvent(),这个方法必须根据系统特定的要求执行。在示例代码中你将看见一个类CmyCallbackHandler,它从CcallbackHandler继承,而且执行方法OnProcessEvent()。OnProcessEvent()方法的一个参数pvParam允许你传递任何种类的数据,那就是为什么要申明为PVOID。在示例代码中一个指向CwhatheverYouWantToHold实例的指针传递给OnProcessEvent().你也许想使用这个参数只传递一个句柄给窗口,那为了传递一个消息给它可以在OnProcessEvent()的执行内部来使用。
class&CCallbackHandler
&&CCallbackHandler();
&&virtual&~CCallbackHandler();
&&//&Define&an&abstract&interface&for&receiving&notifications
&&virtual&void&OnProcessEvent(
&&&&&PQUEUED_ITEM&pQueuedItem,&
&&&&&PVOID&&&&&&&&pvParam
&&&&&)&=&0;
编译示例代码
你需要在你的机器上安装MS&Platform&SDK。提供用户模式应用程序的示例代码能被编译为ANSI或UNICODE。如果你要编译驱动程序,你还要安装Windows&DDK。
不用担心你是否安装Windows&DDK,因为示例代码包含一个ProcObsrv.sys的核心驱动程序和它的源代码的编译调试版本。仅仅在单个目录中沿驱动程序放置控制程序,然后让它运行。为了表明目的,用户模式应用程序动态地安装驱动程序,然后启动监视进程。接下来你将会看到10个notepad.exe的例子运行,而且以后关闭。其间你能看到控制台窗口,看到进程监视器怎样工作。如果你想启动某些程序,看控制台怎样沿着它的名字显示它的进程ID。
这篇文章说明为了检测NT/2K进程的执行,你怎样使用一个公开的接口。但是这并不是这个问题唯一的解决方案,to&woainihaha&(雁过无痕,注册好难)&
不好意思,贴错了.
你还是用动态的改&api&,象&金山词霸&一样吧.
网上这些资料很多.To&SessionEnum(寂寞如歌):
谢谢你的帖子,很好!不过我不是要象金山词霸,这种东西我做过很多!但是希望能象金山毒霸一样能拦截操作并挂起,然后确定是否合法,最后释放!
&&&&谢谢关注的每一位!
另外请各位也帮我看看:
http://www.csdn.net/expert/topic/981/981676.xml?temp=.8765375你是小好奇呀,最爱提问题!
我以前曾建业研究过着问题,当时想做一硬盘保护方面的程序,最后没做成。
关键也是你这个问题,你的思路应该是对的,找到这些修改文件的api,然后做一个api的钩子,类似词霸就做了textout这类api的钩子。
但我想window的文件操作的复杂性太大了,实现起来不容易呀!To&pazee(耙子)老大:
&&&&&谢谢你的关注呀!!我也知道这个难度很大,但是主要是想了解一下他的实现途径,这样可以在很多实际应用中用到!呵呵,谢谢老大这么"老远"过来留言!!
&&&&其实大家给的这些都很好,非常感谢大家!!再等一天就结帖子!
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:& 我的小人当黑社会被抓了怎么办?
查看: 2618|回复: 5
UID343544主题阅读权限40帖子精华1积分803金钱836 荣誉0 人气0 在线时间1614 小时评议0
Lv.4游侠高级会员, 积分 803, 距离下一级还需 197 积分
帖子精华1积分803金钱836 荣誉0 人气0 评议0
我都等了一周了都没有放出来···游戏就结束了?
UID1795192主题阅读权限20帖子精华0积分97金钱3562 荣誉0 人气0 在线时间635 小时评议0
Lv.2游侠会员, 积分 97, 距离下一级还需 103 积分
帖子精华0积分97金钱3562 荣誉0 人气0 评议0
小偷职业的最高级别是黑社会么?好有意思哦
UID343544主题阅读权限40帖子精华1积分803金钱836 荣誉0 人气0 在线时间1614 小时评议0
Lv.4游侠高级会员, 积分 803, 距离下一级还需 197 积分
帖子精华1积分803金钱836 荣誉0 人气0 评议0
原帖由 motion_mo 于
11:32 发表
小偷职业的最高级别是黑社会么?好有意思哦
=。=为什么我这里是黑帮职业=。=
UID2912860主题阅读权限20帖子精华0积分124金钱2003 荣誉0 人气0 在线时间816 小时评议0
Lv.2游侠会员, 积分 124, 距离下一级还需 76 积分
帖子精华0积分124金钱2003 荣誉0 人气0 评议0
过两天会放出来的。
貌似最高等级是邪恶帝王。
Do not demand But visualize and you hear songs of the phoenix
UID343544主题阅读权限40帖子精华1积分803金钱836 荣誉0 人气0 在线时间1614 小时评议0
Lv.4游侠高级会员, 积分 803, 距离下一级还需 197 积分
帖子精华1积分803金钱836 荣誉0 人气0 评议0
原帖由 shelling2712 于
12:27 发表
过两天会放出来的。
貌似最高等级是邪恶帝王。
哥们儿,我等了一周了···
UID2912860主题阅读权限20帖子精华0积分124金钱2003 荣誉0 人气0 在线时间816 小时评议0
Lv.2游侠会员, 积分 124, 距离下一级还需 76 积分
帖子精华0积分124金钱2003 荣誉0 人气0 评议0
#$%#^&.........
那就不清楚了。因为我每次被抓都是过两天放出来了。
你看看小人右上角,应该跟上班一样有个进度条的
Do not demand But visualize and you hear songs of the phoenix
Powered by

我要回帖

更多关于 敲暖气发求救暗号 的文章

 

随机推荐