Windows 蓝牙外发文件拦截
来源:互联网 发布:cad网络拓扑图下载 编辑:程序博客网 时间:2024/06/04 23:21
个人总结:对于蓝牙外发的拦截,可以通过协议拦截和动作拦截实现。对于协议拦截来说需要对蓝牙协议很了解,通过协议把蓝牙发送的数据拦截。但是我只需要拦截它的外发文件就可以了, 用这种方法实现投入较大;另一种方法是拦截蓝牙外发的动作,取到外发的文件名字。
通过协议拦截的方法暂不介绍。
通过拦截动作实现的拦截中,它的思想是拦截蓝牙外发过程中调用的系统API,CreateFileW, 在API函数参数中获取外发文件路径
具体实现方法:
(1)利用钩子技术拦截Kernel32.dll模块中的CreateFileW Api
(2)在拦截后的CreateFileW 函数中,判断它的调用进程是否为蓝牙进程
(3)在蓝牙进程中的CreateFileW参数中把文件路径取到,其中API参数中dwCreationDisposition等于OPEN_EXISTING表示蓝牙外发文件,等于CREATE_NEW表示接收文件。
步骤(1)钩子拦截和步骤(3)比较简单,不做过多总结。对于步骤(2)来说,在API函数中判断它的调用进程,需要采用调用栈回缩技术。对于Windows自带的蓝牙软件为fsquirt.exe,简单的处理就是根据进程名字来判断它是不是蓝牙进程,当然严谨的讲根据exe的版本信息更准确。
(a)在拦截后的CreateFileW函数中,通过调用ntdll.dll模块的RtlWalkFrameChain函数,可以取到栈的调用链
typedef ULONG (WINAPI *Func_RtlWalkFrameChain)(OUT PVOID *Callers, IN ULONG Count, IN ULONG Flags);static Func_RtlWalkFrameChain RtlWalkFrameChain = NULL;if (RtlWalkFrameChain == NULL){RtlWalkFrameChain = (Func_RtlWalkFrameChain)GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "RtlWalkFrameChain");if (RtlWalkFrameChain == NULL){return FALSE;}}
(b)调用链的具体前几个调用栈,在于你调用RtlWalkFrameChain的函数在栈的第几层,这里是第3层。用第3层的调用栈信息,通过进程模块取得它的进程信息
PVOID ary[MAX_PATH]={0};ULONG StackCount;StackCount = RtlWalkFrameChain(ary, MAX_PATH, 0);if (StackCount < 3){return FALSE;}PVOID Address = ary[2];if (Address == NULL){return FALSE;}MODULEINFO moduleinfo = {0};GetModuleInformation(GetCurrentProcess(), GetModuleHandle(L"fsquirt.exe"), &moduleinfo, sizeof(moduleinfo));
(c)判断调用链上的地址是否在进程fsqirt.exe的进程地址中,如果在进程的地址中,说明这个调用是它调用的。否则就不是它进程本身调用的。
if ((DWORD_PTR)Address > (DWORD_PTR)moduleinfo.lpBaseOfDll && (DWORD_PTR)Address < (DWORD_PTR)moduleinfo.lpBaseOfDll + moduleinfo.SizeOfImage){return TRUE;}
- Windows 蓝牙外发文件拦截
- Socket实现聊天发文件
- google talk 为什么不能发文件?
- Bluetooth:电脑无法给手机发文件
- c++ 构造http post 发文件
- XEP-0047 openfire xmpp 发文件 流程
- 尝试用Windows Live Writer发文
- 网络拦截的一点笔记--发文于2013-9-16
- 爱奇艺视频广告拦截失败,发文共商大计
- 飞秋只能发文件不能接收文件的解决办法
- openfire error code="406" type="MODIFY" 发文件
- Android蓝牙固件升级
- 拦截器和文件上传
- windows文件操作简单笔记--发文于2013.9.16
- mac windows蓝牙问题
- 分享一个Android版 仿QQ局域网即时通信软件(可发文件、语音、录音)
- java socket聊天室 swing做界面 Tcp为通讯协议 支持私聊 群聊 发文件
- Andrej Karpathy发文谈神经网络后,引发的对硬件,软件和学件的思考
- C语言指针学多了,你为什么会觉得晕?
- bootstrap配合Masonry插件实现瀑布式布局
- java中getter 和 setter 方法有什么意义?为什么不用public代替GS?
- log4j2自己使用配置
- 数据流图的画法
- Windows 蓝牙外发文件拦截
- sync_binlog innodb_flush_log_at_trx_commit 浅析
- Java NIO与IO的详细区别(通俗篇)
- JavaSE_3th_方法的重载
- hdu 1686 Oulipo(KMP)
- Android代码同步问题之(二)
- Asp.Net form赋值model
- Android 图片压缩
- eclipse从数据库逆向生成Hibernate实体类