首页
论坛
课程
招聘
[原创]下内存断点定位PEB被修改
2021-11-17 09:50 6461

[原创]下内存断点定位PEB被修改

2021-11-17 09:50
6461

内存断点定位进程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 命中内存断点)


看雪2022 KCTF 秋季赛 防守篇规则,征题截止日期11月12日!(iPhone 14等你拿!)

最后于 2022-4-13 19:15 被sanganlei编辑 ,原因: 插入图片
收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回