使用钩子拦截ReadFile的问题。。。 我的设想是这样的:拿记事本程序来说,现在有一个加密了的txt文件,当我们双击该txt文件的时候,系统创建notepad.exe,这时候给该进程下钩子,在它调用了某个读文件内容的API之后,读出文件内容之前我给它拦截住,把文件内容解密,再输出。这个API我已开始觉得应该是ReadFile(),后来调试的时候发现不是,请问我该钩取的是哪个API? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 貌似记事本没用ReadFile,而是内存映射。 将文件映射到某片内存空间,然后直接访问对应内存地址就等于访问文件对应内容。第一次访问的时候会产生缺页中断,然后系统自动载入文件内容。真要加密文件,最好用驱动吧。 咋最近问这种问题的好多,去看看http://fxh7622.blog.51cto.com的博客,里面有如何HOOK API函数的代码,其实方法挺简单的! 里面的記錄事本可以Hook CreateFileW, 另存/保存也是這個函數, 只是方式不一樣, 打開是 讀, 另存/保存是寫. NtCreateFile,NtOpenFile,NtReadFileIAT HOOK这三个函数即可 text:0100263A xor edi, edi.text:0100263C push edi ; hTemplateFile.text:0100263D push 80h ; dwFlagsAndAttributes.text:01002642 push 3 ; dwCreationDisposition.text:01002644 push edi ; lpSecurityAttributes.text:01002645 push 1 ; dwShareMode.text:01002647 push 80000000h ; dwDesiredAccess.text:0100264C lea eax, [ebp+String1].text:01002652 push eax ; lpFileName.text:01002653 call ds:__imp__CreateFileW@28 ; CreateFileW(x,x,x,x,x,x,x).text:01002659 cmp eax, 0FFFFFFFFh.text:0100265C mov [ebp+hObject], eax.text:01002662 jz loc_10026F9.text:01002668 push edi ; lpOverlapped.text:01002669 lea ecx, [ebp+iSize].text:0100266F push ecx ; lpNumberOfBytesRead.text:01002670 push 400h ; nNumberOfBytesToRead.text:01002675 lea ecx, [ebp+Buffer].text:0100267B push ecx ; lpBuffer.text:0100267C push eax ; hFile.text:0100267D call ds:__imp__ReadFile@20 ; ReadFile(x,x,x,x,x).text:01002683 test eax, eax.text:01002685 jle short loc_10026ED.text:01002687 cmp [ebp+iSize], edi.text:0100268D jz short loc_10026ED.text:0100268F push [ebp+iSize] ; iSize.text:01002695 lea eax, [ebp+Buffer].text:0100269B push eax ; lpv给你反汇编了一下xp下的notepad,开打文件时的操作如上。看!调用了CreateFileW和ReadFile,楼主是不是Hook不对啊? 大牛哇!!请教一下,你是如何实现反汇编的?还有,调用RriteFile的进程是什么能查看出来吗? IDA+ollyICE,我xp下调试了下,在执行打开后,先createfile再readfile。 急,在线等!!!!! CListCtrl相关 在activex控件中使用ccombobox中出现的问题! 进度条同步问题?? 怎样在对话框中加入菜单和工具栏还有状态栏 一个简单的ATL COM问题!求助啊! activex控件插入word以后,如果完成鼠标拖动? 学计算机,软件的必须学的基础课本有哪些啊?? 文凭真的那么重要? “该出手时就出手”,那么我已学《深入浅出MFC》有一个月了,什么时候该动手VC了呢? CreateInstance(__uuidof(MSXML2::DOMDocument30));为什么不是m_pXMLDoc的成员错误? 如何判断图像的边缘是否圆滑
将文件映射到某片内存空间,然后直接访问对应内存地址就等于访问文件对应内容。
第一次访问的时候会产生缺页中断,然后系统自动载入文件内容。
真要加密文件,最好用驱动吧。
IAT HOOK这三个函数即可
.text:0100263C push edi ; hTemplateFile
.text:0100263D push 80h ; dwFlagsAndAttributes
.text:01002642 push 3 ; dwCreationDisposition
.text:01002644 push edi ; lpSecurityAttributes
.text:01002645 push 1 ; dwShareMode
.text:01002647 push 80000000h ; dwDesiredAccess
.text:0100264C lea eax, [ebp+String1]
.text:01002652 push eax ; lpFileName
.text:01002653 call ds:__imp__CreateFileW@28 ; CreateFileW(x,x,x,x,x,x,x)
.text:01002659 cmp eax, 0FFFFFFFFh
.text:0100265C mov [ebp+hObject], eax
.text:01002662 jz loc_10026F9
.text:01002668 push edi ; lpOverlapped
.text:01002669 lea ecx, [ebp+iSize]
.text:0100266F push ecx ; lpNumberOfBytesRead
.text:01002670 push 400h ; nNumberOfBytesToRead
.text:01002675 lea ecx, [ebp+Buffer]
.text:0100267B push ecx ; lpBuffer
.text:0100267C push eax ; hFile
.text:0100267D call ds:__imp__ReadFile@20 ; ReadFile(x,x,x,x,x)
.text:01002683 test eax, eax
.text:01002685 jle short loc_10026ED
.text:01002687 cmp [ebp+iSize], edi
.text:0100268D jz short loc_10026ED
.text:0100268F push [ebp+iSize] ; iSize
.text:01002695 lea eax, [ebp+Buffer]
.text:0100269B push eax ; lpv给你反汇编了一下xp下的notepad,开打文件时的操作如上。看!调用了CreateFileW和ReadFile,楼主是不是Hook不对啊?
还有,调用RriteFile的进程是什么能查看出来吗?