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

为了跟踪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)

### 如何在动态文件名的 JavaScript 中设置断点 当处理动态加载或混淆过的 JavaScript 文件时,传统的静态方式可能无法满足需求。以下是针对此类场景下调试的方法: #### 使用 Chrome DevTools 的 Source Map 和 Breakpoints 功能 Chrome 开发者工具提供了强大的功能用于调试动态生成的 JavaScript 文件。即使文件名发生了变化,也可以通过以下方法定位并设置断点。 1. **打开 Sources 面板** 在 Chrome 浏览器中按 `F12` 或右键页面选择“检查”,切换至 Sources 面板。此面板会显示所有已加载的资源,包括动态生成的 JavaScript 文件[^2]。 2. **查找目标文件** 即使文件名发生更改,仍可以通过搜索特定字符串找到对应的脚本。点击左侧导航栏中的放大镜图标,在弹出框输入关键词(如变量名称或函数名),DevTools 将自动匹配相关内容所在的文件位置[^3]。 3. **设置断点** 定位到具体代码行后,单击行号即可设置断点。如果遇到混淆代码难以阅读的情况,则需借助其他手段进一步优化体验。 4. **利用 Overrides 替换逻辑** 对于某些情况下因频繁更新导致断点失效的问题,可采用 Overrides 技术将远程 JS 文件映射为本地版本。这样不仅便于修改源码内容(比如移除不必要的 `debugger` 关键字),还能持续保持一致性的开发环境配置[^1]。 5. **考虑使用条件断点** 如果知道触发错误的具体上下文信息,那么定义带有表达式的特殊类型断点可能会更加高效。例如只在某个参数等于预期值时暂停执行流程: ```javascript function myFunction(param){ if (param === 'specificValue') { debugger; } } ``` 6. **应对复杂情况——黑盒模式与忽略列表** 当面对大量第三方库干扰正常分析过程时,“Blackboxing”特性允许指定哪些范围内的调用应被跳过;另外还可以维护一个黑名单数组排除无关紧要的部分从而集中精力解决核心问题所在[^4]。 ```python def example_code(): pass # Placeholder for illustrative purposes only. ``` 以上策略能够有效帮助工程师克服由动态命名带来的挑战,并顺利完成逆向工程任务期间必要的诊断工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值