逆向-下字符串查找的条件断点

为了跟踪console程序在访问某个文件时失败的问题,在内核中下了断点,但是内核中文件部分调用太频繁了,无法等到自己的文件。所以最好还是根据条件来下断点。

程序如下

想要在FileName是指定文件时停下来,例如FileName是c:\temp\file.txt的时候。

从代码可以看到FileName是个参数,但是可能是NULL,因此断点只能下到这一行:

memzero(&MyContext, sizeof(MyContext));

如果要比较需要知道FileName的值,但是FileName的值如何获取呢?

下断点在这里,断点到了之后,查看汇编

发现poi(rsp+50)里就是FileName的数据

于是编写script代码,文件名find2.sc:

bp fffff800`79c61082  "
r $t1=poi(rsp+50)
 as /mu $FileName $t1

.block
{
 .if($spat(\"${$FileName}\",\"*file.txt\")) 
 {
  .echo 'find...';
  ad ${/v:$FileName}
 }
 .else 
 {
  ad ${/v:$FileName}
  gc
 }
}"

其中bp下的断点位置,是memzero(&MyContext, sizeof(MyContext));汇编所在的位置,直接在windbg命令行里直接输入如下命令运行,包括$$><等符号

$$><c:\temp\find2.sc

这样在访问file.txt的时候就停止下来了。

注意由于下脚本断点速度影响较大,文件访问很多,导致系统很慢,可以在console程序访问该文件前,使用 system("pause");暂停,然后再下断点。或者下了断点先禁用,等运行console程序停下来,再使能断点。

具体脚本解释,可以参考:如何写windbg高级脚本---以访问文件的windbg脚本为例说明 (pediy.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值