zoukankan      html  css  js  c++  java
  • windbg跳过初始断点

    当我们用Windbg打开一个exe时,调试器第一次中断:

    输入kb查看当前栈如下:

    0:000> kb
     # ChildEBP RetAddr  Args to Child              
    00 00fff8bc 77d498e0 5e7dcb19 0105b000 00000000 ntdll!LdrpDoDebuggerBreak+0x2b
    01 00fffb18 77d05257 5e7dcb71 00000000 00000000 ntdll!LdrpInitializeProcess+0x1b20
    02 00fffb70 77d05151 00000000 00000000 00000000 ntdll!_LdrpInitialize+0xb0
    03 00fffb7c 00000000 00fffb90 77ca0000 00000000 ntdll!LdrInitializeThunk+0x11

    LdrpInitialize函数是一个新进程的初始线程开始在用户态执行最早代码,LdrpInitializeProcess函数的一个主要任务是加载EXE文件所依赖的动态链接库,在加载每个DLL后,LdrpInitializeProcess都会检查当前进程是否被调试,如果是,则调用用DbgBreakPoint 通知调试器,注意此时并没有调用每个DLL的Dllmain函数。
    我们称这个第一次中断叫初始断点,初始断点不是调试器可以得到的最早控制机会,如进程创建事件和EXE模块加载事件都会比它早。我们可以在进程创建事件时中断下来:

    通过

     或执行如下指令

    sxe cpr

    然后.restart就可以先断到进程创建的时候,然后强制把PEB的BeingDebugged字段改为0:
    0:000> db @$peb
    0118d000  00 00 01 04 ff ff ff ff-00 00 e4 00 00 00 00 00  ................
    0118d010  00 00 e1 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
    0118d020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
    0118d030  00 00 00 00 00 00 00 00-00 00 e2 00 00 00 00 00  ................
    0118d040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
    0118d050  00 00 00 00 00 00 00 00-00 00 36 7f 00 00 36 7f  ..........6...6.
    0118d060  28 00 39 7f 08 00 00 00-00 04 00 00 00 00 00 00  (.9.............
    0118d070  00 80 9b 07 6d e8 ff ff-00 00 10 00 00 20 00 00  ....m........ ..
    0:000> eb @$peb+2
    0118d002 01 0
    0
    0118d003 04 08
    08
    0118d004 ff

    0:000> db@$peb
    0118d000  00 00 00 08 ff ff ff ff-00 00 e4 00 00 00 00 00  ................
    0118d010  00 00 e1 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
    0118d020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
    0118d030  00 00 00 00 00 00 00 00-00 00 e2 00 00 00 00 00  ................
    0118d040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
    0118d050  00 00 00 00 00 00 00 00-00 00 36 7f 00 00 36 7f  ..........6...6.
    0118d060  28 00 39 7f 08 00 00 00-00 04 00 00 00 00 00 00  (.9.............
    0118d070  00 80 9b 07 6d e8 ff ff-00 00 10 00 00 20 00 00  ....m........ ..
    0:000> g
    ModLoad: 77ca0000 77e3c000   ntdll.dll
    ModLoad: 74de0000 74e33000   C:windowsSysWOW64MSCOREE.DLL
    ModLoad: 76450000 76530000   C:windowsSysWOW64KERNEL32.dll

    这样,windbg就不会中断到初始断点了!

  • 相关阅读:
    mysql 卸载 linux
    mybatis教程
    Python操作Redis的5种数据类型
    python+selenium 浏览器无界面模式运行
    关闭Sublime Text 3的自动更新
    ui自动化-则神第一天02-学习练习一个网址写脚本
    ui自动化-则神第一天01-html基础和元素定位之面试问题
    ui自动化-则神第一天01
    字典的学习
    安全测试的测试整理
  • 原文地址:https://www.cnblogs.com/yilang/p/12162571.html
Copyright © 2011-2022 走看看