FishHook钩子库开发日志

搬运自我的百度空间

FishHook是我开发了将近两年的Windows API Hook库,支持Win7/XP,支持x86和AMD64架构,如果开发成熟了以后也许会开源发布上来的。
最近开发软件工程的大作业项目,用到FishHook,发现各种各样的BUG,这里简单记录下,聊表纪念

14-4-15 发现IE运行在FishHook下时,Hook没有正常工作,结果发现是IE的“保护模式”作崇。保护模式下,程序很难打开其他程序的内核对象(比如公共的Event,FileMappingObject等等),造成我的钩子无法正常与主程序通信。很久以前解决了FileMappingObject的问题(使用了句柄从父进程继承的办法)。Event其实也是需要继承的,但是被我忽略了。。。。。这次发现的问题就在event没法正确打开。在父进程创建IE时把父进程的句柄PUSH进共享内存,IE中得到这些句柄就可以解决问题

4-16 结果另一个浏览器Chrome也出问题了。发现他使用了SUSPEND的参数来CreateProcess他的子进程,我的钩子处理的不好,之前没有认真考虑SUSPEND时候的情况。
临时解决SUSPEND后发现钩子共享内存中的一些关键变量竟然被篡改!使用Windbg的内存断点发现是wcscpy函数的问题。程序被创建时,我把路径和参数写入共享内存,但是没有检查路径字符串的长度,结果竟然造成缓冲区溢出!!!紧邻路径字符串的关键变量被覆盖了。这是我第一次遇到缓冲区溢出的问题,如果这个路径字符串被精心编制,后果不堪设想啊!以后要逐个把wcscpy改为wcsncpy

4-17 Chrome继续出错,调试半天结果是漏继承一个EVENT句柄造成子进程与父进程无法通信。修改后还是会卡住。。。。继续努力

4-18 Chrome的注入bug修复,真是累啊,详见http://hi.baidu.com/myjisgreat/item/8eda051e560db5081994ec1e

主要是低权限的问题。
把所有的*cpy系列函数都加上检查溢出问题的代码或者使用*ncpy函数
终于目前没有已知影响运行的bug了

5-6
之前FishHook使用两个模式,标准钩子模式和用户自定义钩子模式。
标准钩子模式的过滤函数在调试者进程里,当“被调试进程”调用了被hook的函数后,在“调试者进程”里的用户过滤函数将会决定是否放行这个API。这个模式的缺点是只能钩已有的某几个API。优点在于过滤函数集中于“调试者进程”中。
而用户自定义钩子模式只负责把用户的DLL加载到“被调试进程”,并且Hook相关函数(把用户DLL给定的函数代替原有API)。这样,决定被Hook的API的行为的将是用户DLL中的函数。这个模式的优点是相对自由,对于被调用的API用户可以自由控制其行为。而缺点在于过滤函数相当于随DLL加载到“被调试进程”中了,不利于对API在“调试者进程”中统一过滤。
这次更新加强了“用户自定义钩子模式”,提供一整套“同步API”用于“被调试进程”与“调试者进程”的同步,实现了在“用户自定义钩子模式”下也可以远程调用“调试者进程”里的用户过滤函数。

5-13
修改两处“同步API”的bug:
1. 在测试程序中重复命名了一个变量名(记录createfile的返回值的变量和记录远程调用过滤函数的返回值的变量)造成严重混乱
2. 在远程调用过滤函数CallFilter中应该把返回值写入SyncBlock的SharedInfo中,却笔误写入了标准钩子模式的SharedInfo中

6-25

修复问题1:IsWow64Process函数理解的偏差,造成对32位与64位进程判断的偏差
修复问题2:子进程与父进程同步的问题:
原来的设计:被钩的子进程在向父进程发送消息后立即suspend自己;父进程等待消息,收到消息后根据函数参数resume子进程。按照我的想法顺序如下:子进程发送消息-子进程suspend-父进程接受消息-父进程resume子进程
但是在某些情况下,由于父进程与子进程是同时运行的,实际的运行顺序可能是:子进程发送消息-父进程接受消息-父进程resume子进程(子进程仍在运行,所以这一步等于没有做)-子进程suspend
顺序错乱导致子进程被block了。
解决办法:父进程轮询子进程(通过ResumeThread的返回值得知子进程的主线程是不是已经suspend了),如果没有suspend,则sleep(0)放弃当前时间片。经过测试,大概只需要轮询一次循环就可以正常resume了

2014-04-17

FishHook钩子库开发日志相关推荐

  1. svn修改提交路径_使用SVN钩子强制提交日志和限制提交文件类型

    Subversion本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能.所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在Subversion里有 ...

  2. 日志分析系统分类有哪些_Java开发日志规范

    打印日志是一门艺术,但长期被开发同学所忽视.日志就像车辆保险,没人愿意为保险付钱,但是一旦出了问题都又想有保险可用.我们打印日志的时候都很随意,可是用的时候会吐槽各种 SB 包括自己!写好每一条日志吧 ...

  3. svn 覆盖更新_使用SVN钩子强制提交日志和限制提交文件类型

    Subversion本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能.所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在Subversion里有 ...

  4. 基于WPF+XMPP的IM程序开发日志 之二 WPF线程模型

    循例地在开始正文前说些废话.正如这篇博客的题目--开发日志,这系列的博客是我在编写这个IM的一些日志,或者另外一个说法:笔记.并不是一些系统的文章,例如"XX学习教程".这些博客里 ...

  5. 勇者与羁绊 游戏开发日志(一)

    勇者与羁绊 游戏开发日志(一) 游戏介绍 开发进度 一.事先调查 二.进行设定 寻找合作 游戏介绍 勇者与羁绊是我想用构筑式卡牌战斗与自走棋的羁绊玩法融合的一次尝试. 以下是游戏中的一些核心玩法 牌库 ...

  6. XiaoHu.ai开发日志(自2018年2月6日至2019年4月11日)

    一年多来,一直在项目目录下的update_log.txt里记录开发日志,今天放到网上来,共 6189个字. ----XiaoHu.ai Standard 代号STD---- 2/6 v0.1 项目启动 ...

  7. Chino 操作系统开发日志 (1) - 为 IoT 而生

    引言 很多人都听说过 IoT (物联网)这个词,越来越多的人在装修时开始选择智能家居,很多人也购买智能音箱做智能家居控制,想必未来一定是 AI + 物联网的时代. 一种技术要发展并走向成熟必须要降低门 ...

  8. STM32CubeMX-HAL库开发笔记(常用语句)-基于Proteus仿真

    STM32CubeMX-HAL库开发笔记 前言 我自己刚刚开始学习STM32时,跟随正点原子课程,一节节课慢慢学,裸机开发可以深入了解和学习到寄存器内部,但是也偏无聊一点.后来,在做项目时,发现很难选 ...

  9. 图像拼接小实验开发日志和笔记

    图像拼接小实验开发日志和笔记 bytian.zDecby \ tian.z \ Decby tian.z Dec - 202120212021 技术路线 1.1. 开发环境 1.2. 图像配准 1.2 ...

最新文章

  1. python---简单数据库
  2. 【学习笔记】《概率与期望全家桶》(ACM / OI)概率与期望 / 概率论知识小结
  3. android小程序备忘录,撸一个会话备忘录的小程序
  4. spero性能调优记录
  5. mysql约束与外键_MySQL 外键与约束
  6. android四个按钮平分,android 水平平分两个按钮
  7. 霸主–统治和管理API的地方
  8. 微信开发1之PHP成功获取微信支付的Token
  9. PL/SQL 存储过程
  10. 8月22日见!iQOO Pro跑分曝光:近50万得分 无对手
  11. vlan tenant network on ovn based dvr (by quqi99)
  12. FineBI 的关联视图及多表关联 自助数据集
  13. 定积分的基本性质6 积分第一中值定理
  14. 大数据 - MapReduce编程案例 -BH3
  15. 高校借力泛微,搭建一体化、流程化的​内控管理平台
  16. Could not delete path ‘D:\AndroidStudioProjects\LargeScreen\app\build\generated\source\r\debug\andro
  17. 肘关节附属运动测试软件,肘关节运动损伤
  18. How to implement an algorithm from a scientific paper
  19. 用Python入门不明觉厉的马尔可夫链蒙特卡罗(附案例代码)
  20. 8.0强行转换后变成了7_干货|从中式英语,到雅思听力8.0,外研社英语演讲省一,非英专的她做了这些...

热门文章

  1. 计算机二级后续操作基于此文件,2017年9月全国计算机等级考试二级MS-office高级应用考试预测题-2.pdf...
  2. 13.1 GAS基本框架搭建及第一个GA
  3. Java 面试全解析:核心知识点与典型面试题
  4. 这7点不去做外汇交易难爆仓
  5. 2021 年中国程序员薪资和生活现状调查报告
  6. Compose 实现手写春联效果
  7. OpenMesh 报错“Use dereferencing operators - and * instead.”的解决
  8. 行星轨迹制作_探知宇宙!八大行星手工制作,和孩子一起探索宇宙奥秘,宝宝妈收 !(附教程)...
  9. base64 hex java_Java 中的 BASE64 和 十六进制转换器
  10. 教你把gps服务器修改为中国加速搜星,手机导航-GPS搜星速度优化(android手机)...