-
-
[原创]下内存断点定位PEB被修改
-
发表于: 2021-11-17 09:50 8023
-
内存断点定位进程PEB被修改
一、 bug描述
Windows终端安全卫士启动后,发现windows.exe的进程路径被修改,从C:\Program Files\RSAWinGuard\Guard\服务.exe篡改为C:\windows\explorer.exe,导致杀毒引擎在初始化时调用GetModuleFileNameA函数获取错误进程路径。获取到了C:\windows\explorer.ex而不是C:\Program Files\RSAWinGuard\Guard\服务.exe
导致加载病毒库失败。原因是进程的peb被修改,具体为 :
peb->ProcessParameters->ImagePathName->Buffer处的内容被修改。
(图1nGuardSvc进程路径被修改)
二、 解决方法
1、 因为调试的是windows服务程序,为了给程序员提供附加进程的机会,防止被调试的逻辑代码提前执行,需要在windows服务向SCM报告“服务已运行”状态之后(SCM启动服务之后有超时机制),增加两句调试代码。本次把调试代码写在了服务加载的动态库xxx.dll的RunMain函数中。
(图2服务向SCM报告已运行状态的代码)
(图3加的两句辅助调试代码)
2、查看进程peb结构体地址,以管理员权限运行WinGuardsvc服务,用windbg附加上去,中断后输入 !peb命令
(图4看进程PEB地址)
3、查看进程PEB结构体的具体内容。命令:dt nt!_peb 0000000000267000
(图5看进程peb结构体的具体内容)
4、首先用lm命令查看xx.dll的符号有没有加载,没有的话随便查找一个xx的符号,windbg就会自动加载xx.dll的符号文件。
(图6 查看svnets.dll的符号文件是否被加载)
5、跳转到peb->ProcessParameters->ImagePathName->Buffer地址,并计算其地址
(图7 计算内存地址)
6、下内存断点
(图8下内存断点)
7、命中内存断点,既可以观察导致peb->ProcessParameters->ImagePathName->Buffer内容被改写的调用堆栈,bug被成功定位。
(图9 命中内存断点)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [原创]深入解析C++ stl实现原理 2344
- [原创]数据库操作 6549
- [原创]最新版360安全卫士极速版蓝屏分析 22422
- windbg查看STL类型数据 9936
- [原创]cmake使用 19922