如何获取记事本打开文件的路径 本帖最后由 shissewhi 于 2015-01-09 21:56:06 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 notepad.exe 的命令行参数 中包含它当前打开文件的路径 ,你可以在网上找一下 获取远程进程的命令行参数 方案一:编写dll注入到记事本进程中,然后用API Hook拦截SHBrowseForFolder、CreateFile、OpenFile之类的API调用,从中获取打开的文件的路径。方案二:消息钩子,当用户在记事本上点击菜单“文件”-“打开”时会产生WM_COMMAND消息,用户在“打开”对话框里选择文件以后点击按钮“打开”也会产生WM_COMMAND消息,用消息钩子检测到这些消息后适时的向“打开”对话框的地址栏文本框以及“文件名”文本框发送WM_GETTEXT消息来获取用户所选择的文件路径。方案三:编写一个调试器,显然,用调试器调试notepad.exe的时候可以在API函数的调用上打断点,读写notepad.exe进程空间内的内存数据,那么获取打开的文件路径肯定没问题,不过调试器要怎么开发我就不了解了。方案四:从反汇编的角度分析notepad.exe这个PE文件,直接在该PE文件上插入自己的代码来实现自己想要的功能(俗称打补丁)。 您好,谢谢您。您指的远程进程是不是就是在notepad.exe里面打开的文件呢,我刚在网上找到了并且跑通了,还是不太会用。我现在主要是做了一个软件,这个软件实现了对已加密文件的解密,并检测这个解密文件是被固定软件解密,其他软件打开只能是加密版本,您看我现在已经检测到notepad.exe,但是有这样一种可能,就是notepad.exe开着别的文件,所以我想再做一个判断,当notepad.exe进程存在,并且它打开的是固定文件的时候,再解密。您看这样可以实现吗? 你的软件具体要实现什么效果?是不是这样:假如硬盘上有一个1.txt,但是里面的内容是加密的,只有当用户使用记事本打开该文件时才能正确显示解密后的内容,用其他文本编辑软件打开均显示乱码?于是你要做的是拦截记事本打开文件这个动作,在记事本打开文件前解密1.txt然后让记事本正常显示内容?其实这个需求最好的办法就是让用户用你写的软件打开加密的1.txt,这是最常规的做法。 用消息钩子确实很难做,总是遇到一些莫名其妙的问题,而且监视消息队列、窗口过程的钩子好像并不能阻止消息的传播。你可以借助SPY++仔细分析一下目标窗口上的消息,尤其是WM_COMMAND,另外你的消息钩子安装好以后,可以用Visualstudio的调试器附加到notepad.exe进程进行调试,看看你的dll中的钩子函数有没有按预期那样运行 "固定文件"如果只是文件名,不需要路径.那么可以GetWindowText 读标题栏. 这个过程感觉还是不是很好实现,您上面说的要求,基本上是我想要的,不知道有没有更好的方法,就是需要在记事本里面点击打开,然后选择1.txt,打开所需要的文件。其他软件打开,比如word,就不提供解密。现在我还找了文件的透明加密,没太看明白操作过程,透明加密其实用的似乎也是钩子来做的。您还有什么办法能实现这个操作吗?我目前做的是获取机器打开的进程,一旦出现notepad.exe就进行解密,提供5秒间隙再进行加密。加解密过程是提取机器的Mac地址,用Mac进行的。主要问题就是不能点击note以后,在里面选择要打开的文档。 "文件被打开了才读标题栏,这个过程实际上已经呈现的是未解密的文件啊。"文件被打开前要知道 文件名 就 hookCreateFile 您有hook的实例吗?我看网上更多的是hook鼠标操作,没太明白怎么用。 楼上说的是API Hook,Hook SHBrowseForFolder或CreateFile效果会比较好,关于API Hook在《windows核心编程》上有讲,随书代码中也有示例代码,不过那个是同进程中的API Hook,先看那个,理解了API hook的概念和用法,再百度搜索“跨进程 API Hook” 参考:"PeekComm.rar"http://download.csdn.net/detail/schlafenhamster/5202391"本程序 窥视 串口的 活动。主要 hook 了:{"KERNEL32.DLL", "CreateFileA","myCreateFileA",(FARPROC)myCreateFileA},{"KERNEL32.DLL", "CreateFileW","myCreateFileW",(FARPROC)myCreateFileW},{"KERNEL32.DLL", "GetCommState","myGetCommState",(FARPROC)myGetCommState},{"KERNEL32.DLL", "ReadFile", "myReadFile", (FARPROC)myReadFile},{"KERNEL32.DLL", "ReadFileEx", "myReadFileEx", (FARPROC)myReadFileEx}, {"KERNEL32.DLL", "WriteFile", "myWriteFile", (FARPROC)myWriteFile},{"KERNEL32.DLL", "WriteFileEx","myWriteFileEx",(FARPROC)myWriteFileEx},{"KERNEL32.DLL", "CloseHandle","myCloseHandle",(FARPROC)myCloseHandle},"你改一改 如果CreateFile , hook 不住就hook , OpenFile ()也在 Kernal32。dll 中 http://stackoverflow.com/questions/17555644/hooking-createfile-in-notepad-exe-does-not-catch-api-callshttp://stackoverflow.com/questions/17555644/hooking-createfile-in-notepad-exe-does-not-catch-api-calls 如果CreateFile , hook 不住就hook , OpenFile ()也在 Kernal32。dll 中 在SDK中如何创建CDC? 坐等 请教:SDI中View/MaimFrame/Document和对话框之间的数据传递 C++载入动态载入图片 菜鸟求救!!!! 单链表的问题 关于按钮的问题 窗口覆盖后,OnLButtonDown不响应 在线求救!!!! 关于《深入浅出MFC第二版》中示例程序的问题 请高手赐教!!!一个算法的问题 各位大哥、大姐救救俺吧!!! IOCP主动关闭一个客户端连接 VC中ListBox控件的问题
方案二:消息钩子,当用户在记事本上点击菜单“文件”-“打开”时会产生WM_COMMAND消息,用户在“打开”对话框里选择文件以后点击按钮“打开”也会产生WM_COMMAND消息,用消息钩子检测到这些消息后适时的向“打开”对话框的地址栏文本框以及“文件名”文本框发送WM_GETTEXT消息来获取用户所选择的文件路径。
方案三:编写一个调试器,显然,用调试器调试notepad.exe的时候可以在API函数的调用上打断点,读写notepad.exe进程空间内的内存数据,那么获取打开的文件路径肯定没问题,不过调试器要怎么开发我就不了解了。
方案四:从反汇编的角度分析notepad.exe这个PE文件,直接在该PE文件上插入自己的代码来实现自己想要的功能(俗称打补丁)。
您好,谢谢您。您指的远程进程是不是就是在notepad.exe里面打开的文件呢,我刚在网上找到了并且跑通了,还是不太会用。我现在主要是做了一个软件,这个软件实现了对已加密文件的解密,并检测这个解密文件是被固定软件解密,其他软件打开只能是加密版本,您看我现在已经检测到notepad.exe,但是有这样一种可能,就是notepad.exe开着别的文件,所以我想再做一个判断,当notepad.exe进程存在,并且它打开的是固定文件的时候,再解密。您看这样可以实现吗?
其实这个需求最好的办法就是让用户用你写的软件打开加密的1.txt,这是最常规的做法。
如果只是文件名,不需要路径.那么可以GetWindowText 读标题栏.
这个过程感觉还是不是很好实现,您上面说的要求,基本上是我想要的,不知道有没有更好的方法,就是需要在记事本里面点击打开,然后选择1.txt,打开所需要的文件。其他软件打开,比如word,就不提供解密。
现在我还找了文件的透明加密,没太看明白操作过程,透明加密其实用的似乎也是钩子来做的。您还有什么办法能实现这个操作吗?
我目前做的是获取机器打开的进程,一旦出现notepad.exe就进行解密,提供5秒间隙再进行加密。加解密过程是提取机器的Mac地址,用Mac进行的。主要问题就是不能点击note以后,在里面选择要打开的文档。
文件被打开前要知道 文件名 就 hook
CreateFile
您有hook的实例吗?我看网上更多的是hook鼠标操作,没太明白怎么用。
http://download.csdn.net/detail/schlafenhamster/5202391
"本程序 窥视 串口的 活动。主要 hook 了:
{"KERNEL32.DLL", "CreateFileA","myCreateFileA",(FARPROC)myCreateFileA},
{"KERNEL32.DLL", "CreateFileW","myCreateFileW",(FARPROC)myCreateFileW},
{"KERNEL32.DLL", "GetCommState","myGetCommState",(FARPROC)myGetCommState},
{"KERNEL32.DLL", "ReadFile", "myReadFile", (FARPROC)myReadFile},
{"KERNEL32.DLL", "ReadFileEx", "myReadFileEx", (FARPROC)myReadFileEx},
{"KERNEL32.DLL", "WriteFile", "myWriteFile", (FARPROC)myWriteFile},
{"KERNEL32.DLL", "WriteFileEx","myWriteFileEx",(FARPROC)myWriteFileEx},
{"KERNEL32.DLL", "CloseHandle","myCloseHandle",(FARPROC)myCloseHandle},"你改一改
就hook , OpenFile ()也在 Kernal32。dll 中
http://stackoverflow.com/questions/17555644/hooking-createfile-in-notepad-exe-does-not-catch-api-calls
就hook , OpenFile ()也在 Kernal32。dll 中