这是一个用于拦截WinSock API的程序,主要的目的并不是为了截获数据包,而是为了能从第三方角度方便地观察二进制程序调用WinSock API的情况,最直接最原始一点的想法,是为了能比较方便地调试自己写的Windows网络应用程序。
关于拦截API的方法有很多种,网上各种文章到处散布。我用的是全局消息钩子注入进程空间,修改API调用地址。各种方法各有优缺点,比如修改Import Table表,要对PE文件格式有比较深入的了解,但我不了解;Trojan DLL,要替换整个DLL,而且WinSock有2个版本,分别对应了2个DLL文件,一个是wsock32.dll,另一个是ws2_32.dll,每个DLL的导出函数有100多个,工作量太大;还有用Detours开发包,说实话,文档不够丰富,而且1.5版还是免费使用,2.0的就要Money了,等等等等。不是说其它方法不好,而是说,我现在采用的方法刚好比较符合我的需求,但由此带来一个重要的问题是,不能拦截Console程序,因为没有窗口消息队列,就像现在Aweay的MySPY中DebugView功能,是通过拦截OutputDebugString这API来实现的,所以写的Console程序调用的OutputDebugString是拦截不到的,不像DebugTrack,是通过OutputDebugString的实现原理来捕捉的,可以拦截所有的输出。
曾经看到LuoCong通过SEH来实现API Hook的例子程序,程序是用Win32asm写的,看了几遍发现,似乎用Win32asm才能比较方便地利用SEH的这个“副作用”,因为除了汇编以外,其它高级语言要获得函数的参数值很是麻烦,但或许只是因为我自己水平太臭吧,不管怎么说,反正现在我是用不上这技术了。
自从在LLYF Spy中开始用过Hook后,已经有点依赖这技术的感觉了,遇到什么稍微麻烦点的问题,就会想到用Hook,而且现在也有点习惯用BCB6来编译DLL,尽管这个DLL是用纯SDK写成的,可以很方便地移植到VC上来编译,只是因为上次遇到过的奇怪的兼容性问题,使得我把BCB作为编译用于搭配BCB编译的EXE程序的DLL的首要选择。
经过一番键盘搏击,根据自己的需求估计,Hook了24个API:recv、recvfrom、send、sendto、socket、closesocket、accept、listen、bind、connect这些都有2份,wsock32.dll和ws2_32.dll各1份,WSASend、WSASendTo、WSARecv、WSARecvFrom这些只有ws2_32.dll里的那份。不过目前只是能获得API的基本信息,像API名字,返回值,WSAGetLastError值,PID这些。下一步的计划,是要能导出API的调用参数列表和传输数据内容。参数列表应该不是件很难的事,而传输数据的显示,好像惯例都是用16进制加ASCII码加偏移显示的,还要花些时间在这个上面。
另外一个问题,则是同步问题。我是用内存映射来进行进程间通信的,万一在读的时候,另一个进程在写,就不好了,所以还要找一个适当的同步机制。
最后一点,当然是稳定性,也是最重要的一点,不能因为这个进程的存在,使得其它程序也牵连受影响。
分享到:
相关推荐
Oracle EBS WIP接口开发文档WIP_JOB_DTLS_INTERFACE数据字典
BOM & WIP培训文档,包含了基础的业务流程
Oracle EBS r12 wip user guiede
grasshopper_wip_20121030
工厂WIP看板模板,本文档是一个空压机组装工厂,大型电子看板模板
主流的国外ERP无非Oracle和SAP,本资源是Oracle对应的后台表结构,涵盖了库存INV Org、仓库Sub INV、制造WIP、采购PO、计划Plan、BOM、销售OM的后台明细(中文逐字段注释!),还有财务部分的索引AR\AP\Cost\GL等。
WIP,WIP和NAENAE wip和naenae是命令行实用程序,以更好地管理您的WIP(工作正在进行中)使用Git。 wip通过使用“ WIP”(一种通用约定)的提交消息来提交Git存储库的当前状态,从而节省进度。 naenae所有“ WIP”...
Automated Hardware Testing - WIP RobotFramework 自动化硬件测试 - WIP
linux文件系统恢复工具
对于想学习ORACLE的朋友们还是很有帮助的,大家要坚持的不断学习哈。
TestDisk and the other utilities are
数据修复工具testdisk-7.0-WIP源代码,支持系统:dos、windows、linux、mac os X
git-wip-timemachine git-wip-timemachine 是 Peter Stiernström 对的修改版本,它允许您从 Emacs 浏览文件的版本。安装git-wip-timemachine在。 要开始使用它,请按照下列步骤操作: 如果您还没有,请设置 : 将...
oracle wip user guide
2段工单 推移式发料形态
不要为GitHub合并WIP 不要合并WIP拉取请求! 满足以下任一条件时,禁用“合并拉取请求”按钮: 标题包含“ [wip]”(不区分大小写) 任何任务仍未完成 任何提交消息均以“ squash!”为前缀。 或“修正”! ...
TDA Raiden WIP.pmx
TestDisk 是一款开源软件,受GNU General Public License (GPL v2+)条款保护. TestDisk 是一款强大 的免费数据恢复软件! 早期主要是设计用来在使用有缺陷的软件,病毒或人为误操作(如不小心删除分区表)导致的分区...
oracle ebs 11i oracle wip user guide