-
-
[原创]下内存断点定位PEB被修改
-
发表于: 2021-11-17 09:50 8287
-
内存断点定位进程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 命中内存断点)
[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [原创]逆向Windows内核启动流程 1685
- [原创]深入解析C++ stl实现原理 4472
- [原创]数据库操作 6825
- [原创]最新版360安全卫士极速版蓝屏分析 24487
- windbg查看STL类型数据 10591