如何获取记事本打开文件的路径

shissewhi 2015-01-09 09:53:29
最近做了一个程序,可以实现检测到notepad.exe这个进程,但是目前我想要获取notepad打开的什么文件,不知道怎么获取。恳请大神给出技术指导,或者实现代码,不胜感激!
...全文
924 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
shissewhi 2015-01-12
  • 打赏
  • 举报
回复
引用 13 楼 CharlesSimonyi 的回复:
楼上说的是API Hook,Hook SHBrowseForFolder或CreateFile效果会比较好,关于API Hook在《windows核心编程》上有讲,随书代码中也有示例代码,不过那个是同进程中的API Hook,先看那个,理解了API hook的概念和用法,再百度搜索“跨进程 API Hook”
留个QQ好吗,有问题还得请教您。 250702707 谢谢您了。
schlafenhamster 2015-01-12
  • 打赏
  • 举报
回复
http://stackoverflow.com/questions/17555644/hooking-createfile-in-notepad-exe-does-not-catch-api-calls http://stackoverflow.com/questions/17555644/hooking-createfile-in-notepad-exe-does-not-catch-api-calls
schlafenhamster 2015-01-12
  • 打赏
  • 举报
回复
如果CreateFile , hook 不住 就hook , OpenFile ()也在 Kernal32。dll 中
baidu_25273781 2015-01-12
  • 打赏
  • 举报
回复
YOU are suprise
baidu_25273781 2015-01-12
  • 打赏
  • 举报
回复
如果CreateFile , hook 不住 就hook , OpenFile ()也在 Kernal32。dll 中
encoderlee 2015-01-11
  • 打赏
  • 举报
回复
楼上说的是API Hook,Hook SHBrowseForFolder或CreateFile效果会比较好,关于API Hook在《windows核心编程》上有讲,随书代码中也有示例代码,不过那个是同进程中的API Hook,先看那个,理解了API hook的概念和用法,再百度搜索“跨进程 API Hook”
shissewhi 2015-01-11
  • 打赏
  • 举报
回复
引用 11 楼 schlafenhamster 的回复:
"文件被打开了才读标题栏,这个过程实际上已经呈现的是未解密的文件啊。" 文件被打开前要知道 文件名 就 hook CreateFile
您有hook的实例吗?我看网上更多的是hook鼠标操作,没太明白怎么用。
schlafenhamster 2015-01-11
  • 打赏
  • 举报
回复
"文件被打开了才读标题栏,这个过程实际上已经呈现的是未解密的文件啊。" 文件被打开前要知道 文件名 就 hook CreateFile
shissewhi 2015-01-11
  • 打赏
  • 举报
回复
引用 7 楼 CharlesSimonyi 的回复:
用消息钩子确实很难做,总是遇到一些莫名其妙的问题,而且监视消息队列、窗口过程的钩子好像并不能阻止消息的传播。你可以借助SPY++仔细分析一下目标窗口上的消息,尤其是WM_COMMAND,另外你的消息钩子安装好以后,可以用Visualstudio的调试器附加到notepad.exe进程进行调试,看看你的dll中的钩子函数有没有按预期那样运行
这个过程感觉还是不是很好实现,您上面说的要求,基本上是我想要的,不知道有没有更好的方法,就是需要在记事本里面点击打开,然后选择1.txt,打开所需要的文件。其他软件打开,比如word,就不提供解密。 现在我还找了文件的透明加密,没太看明白操作过程,透明加密其实用的似乎也是钩子来做的。您还有什么办法能实现这个操作吗? 我目前做的是获取机器打开的进程,一旦出现notepad.exe就进行解密,提供5秒间隙再进行加密。加解密过程是提取机器的Mac地址,用Mac进行的。主要问题就是不能点击note以后,在里面选择要打开的文档。
shissewhi 2015-01-11
  • 打赏
  • 举报
回复
引用 8 楼 schlafenhamster 的回复:
"固定文件" 如果只是文件名,不需要路径.那么可以GetWindowText 读标题栏.
如果读了标题栏,是不是说明文件已经被打开了。 文件被打开了才读标题栏,这个过程实际上已经呈现的是未解密的文件啊。
schlafenhamster 2015-01-11
  • 打赏
  • 举报
回复
参考:"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}," 你改一改
schlafenhamster 2015-01-10
  • 打赏
  • 举报
回复
"固定文件" 如果只是文件名,不需要路径.那么可以GetWindowText 读标题栏.
encoderlee 2015-01-10
  • 打赏
  • 举报
回复
用消息钩子确实很难做,总是遇到一些莫名其妙的问题,而且监视消息队列、窗口过程的钩子好像并不能阻止消息的传播。你可以借助SPY++仔细分析一下目标窗口上的消息,尤其是WM_COMMAND,另外你的消息钩子安装好以后,可以用Visualstudio的调试器附加到notepad.exe进程进行调试,看看你的dll中的钩子函数有没有按预期那样运行
encoderlee 2015-01-10
  • 打赏
  • 举报
回复
你的软件具体要实现什么效果?是不是这样:假如硬盘上有一个1.txt,但是里面的内容是加密的,只有当用户使用记事本打开该文件时才能正确显示解密后的内容,用其他文本编辑软件打开均显示乱码?于是你要做的是拦截记事本打开文件这个动作,在记事本打开文件前解密1.txt然后让记事本正常显示内容?
其实这个需求最好的办法就是让用户用你写的软件打开加密的1.txt,这是最常规的做法。
shissewhi 2015-01-10
  • 打赏
  • 举报
回复
引用 3 楼 CharlesSimonyi 的回复:
方案一:编写dll注入到记事本进程中,然后用API Hook拦截SHBrowseForFolder、CreateFile、OpenFile之类的API调用,从中获取打开的文件的路径。 方案二:消息钩子,当用户在记事本上点击菜单“文件”-“打开”时会产生WM_COMMAND消息,用户在“打开”对话框里选择文件以后点击按钮“打开”也会产生WM_COMMAND消息,用消息钩子检测到这些消息后适时的向“打开”对话框的地址栏文本框以及“文件名”文本框发送WM_GETTEXT消息来获取用户所选择的文件路径。 方案三:编写一个调试器,显然,用调试器调试notepad.exe的时候可以在API函数的调用上打断点,读写notepad.exe进程空间内的内存数据,那么获取打开的文件路径肯定没问题,不过调试器要怎么开发我就不了解了。 方案四:从反汇编的角度分析notepad.exe这个PE文件,直接在该PE文件上插入自己的代码来实现自己想要的功能(俗称打补丁)。
您好,我一直按照方案二再做,但是效果不佳,我不太会获取到您说的这个消息,不知您是否有相关代码,不胜感激!
shissewhi 2015-01-10
  • 打赏
  • 举报
回复
引用 1 楼 u010982299 的回复:
notepad.exe 的命令行参数 中包含它当前打开文件的路径 ,你可以在网上找一下 获取远程进程的命令行参数
您好,谢谢您。您指的远程进程是不是就是在notepad.exe里面打开的文件呢,我刚在网上找到了并且跑通了,还是不太会用。我现在主要是做了一个软件,这个软件实现了对已加密文件的解密,并检测这个解密文件是被固定软件解密,其他软件打开只能是加密版本,您看我现在已经检测到notepad.exe,但是有这样一种可能,就是notepad.exe开着别的文件,所以我想再做一个判断,当notepad.exe进程存在,并且它打开的是固定文件的时候,再解密。您看这样可以实现吗?
encoderlee 2015-01-09
  • 打赏
  • 举报
回复
方案一:编写dll注入到记事本进程中,然后用API Hook拦截SHBrowseForFolder、CreateFile、OpenFile之类的API调用,从中获取打开的文件的路径。 方案二:消息钩子,当用户在记事本上点击菜单“文件”-“打开”时会产生WM_COMMAND消息,用户在“打开”对话框里选择文件以后点击按钮“打开”也会产生WM_COMMAND消息,用消息钩子检测到这些消息后适时的向“打开”对话框的地址栏文本框以及“文件名”文本框发送WM_GETTEXT消息来获取用户所选择的文件路径。 方案三:编写一个调试器,显然,用调试器调试notepad.exe的时候可以在API函数的调用上打断点,读写notepad.exe进程空间内的内存数据,那么获取打开的文件路径肯定没问题,不过调试器要怎么开发我就不了解了。 方案四:从反汇编的角度分析notepad.exe这个PE文件,直接在该PE文件上插入自己的代码来实现自己想要的功能(俗称打补丁)。
Sandrer 2015-01-09
  • 打赏
  • 举报
回复
引用 1 楼 u010982299 的回复:
notepad.exe 的命令行参数 中包含它当前打开文件的路径 ,你可以在网上找一下 获取远程进程的命令行参数
+1
true__false 2015-01-09
  • 打赏
  • 举报
回复
notepad.exe 的命令行参数 中包含它当前打开文件的路径 ,你可以在网上找一下 获取远程进程的命令行参数

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧