|
目的:HOOK 全局 user32.dll 里的messageboxA 让所有的三环程序都被挂钩
实验环境:VM winxp sp3 10-10-12内存分页
实现:驱动和三环通讯程序
原理实现:
user32.dll 中的函数映射到进程空间时,当前的内存属性为可读,不可写状态,当我们要进行hook写入钩子地址时,系统会重新给我备份一份内存让我们去写入。
而我们可以去修改内存属性改成可读、可写。这样能达到全局挂钩的目的。
详细实现:
1.驱动程序提供钩子函数 myMsgBox()
2 驱动程序为三环程序构造中断门提权,方法是写入idt表
3 三环程序通过驱动构造好的中断int 21 拿到权限,然后查找messageboxA的内存PTE属性
4 修改内存PTE属性,改成可写。然后在函数头部添加钩子 int 0x22(0xCD 0x21) int 0x22 指向驱动的myMsgBox()函数
5 恢复PTE属性,改成不可写
程序实现:
通过代码编写可以达到全局hook的目的,hook和停止hook都正常。
但是出现了两个bug,这也正是我疑惑的地方。
疑问:
1.当三环程序开始hook时并不成功,经检查为msgbox函数地址的PTE为0.我们在三环程序中调用一次msgbox时PTE才会出现正常数值。
调用一次msgbox后,在进行hook就正常
疑问1:PTE为0 说明操作系统并没有给msgbox函数写到内存中去 , 但是我为什么用OD/CE能查到线性地址确实是有数值的
2 经测试 三环的所有程序都正常运行,多次重新打开都没问题,但是三环的通讯程序在重新运行后点击msgbox会蓝屏
疑问2:不知道为什么会出现这个情况 百思不得其解 一点思路都没有
驱动通信.rar
(135.49 KB, 下载次数: 0)
|
上一篇: GetFileSize中高端大小和低端大小合并下一篇: 问一下这个地方的输出出现了什么问题?
|