windbg調試符號win10下代理設置

0x00 前言

時間過得太快,本來還想再win7上再戰幾年後轉win10用windbg,結果win7在2019年年底已經停止維護了。今年2月有停止了edge的維護。前幾篇博文還停留在xp的漏洞階段。最近開始撿起windows的漏洞調試技術,準備再戰,結果win10下的windbg一致提示找不到符號,鬱悶了。

win7 的符號配置可以參考之前的這篇windbg符號路徑設置,當然基本內容是一樣的

0x01 配置符號文件

在windbg的命令行中直接輸入:

0:040> .sympath SRV*c:\localsymbols*https://msdl.microsoft.com/download/symbols
0:040> .reload

這裏與之前不一樣的是,微軟官網已經啓用https的服務了,所以url中不再是http而是https。

結果提示找不到符號文件,爲啥呢?

需要開啓打印日誌看下

0x02 帶日誌的符號文件下載

在windbg的命令行中直接輸入:

0:040> !sym noisy
0:040> .sympath SRV*c:\localsymbols*https://msdl.microsoft.com/download/symbols
0:040> .reload /f

看下報錯日誌

0:034> !sym noisy
noisy mode - symbol prompts on
0:034> .reload /f
Reloading current modules
.
SYMSRV:  BYINDEX: 0x2
         c:\localsymbols*https://msdl.microsoft.com/download/symbols
         iexplore.pdb
         8AA5D5C87EC4C09B7AAD89E8BC3AB2181
SYMSRV:  UNC: c:\localsymbols\iexplore.pdb\8AA5D5C87EC4C09B7AAD89E8BC3AB2181\iexplore.pdb - path not found
SYMSRV:  UNC: c:\localsymbols\iexplore.pdb\8AA5D5C87EC4C09B7AAD89E8BC3AB2181\iexplore.pd_ - path not found
SYMSRV:  UNC: c:\localsymbols\iexplore.pdb\8AA5D5C87EC4C09B7AAD89E8BC3AB2181\file.ptr - path not found
SYMSRV:  HTTPGET: /download/symbols/iexplore.pdb/8AA5D5C87EC4C09B7AAD89E8BC3AB2181/iexplore.pdb
SYMSRV:  HttpSendRequest: 800C2EFD - ERROR_INTERNET_CANNOT_CONNECT
SYMSRV:  RESULT: 0x800C2EFD
DBGHELP: C:\Program Files\Internet Explorer\iexplore.pdb - file not found
DBGHELP: iexplore.pdb - file not found
DBGHELP: iexplore - no symbols loaded
.

劃重點

SYMSRV: HttpSendRequest: 800C2EFD - ERROR_INTERNET_CANNOT_CONNECT
這裏提示http請求錯誤,LZ抓了個包看了看,麻蛋,已經建立https連接了,但是沒幾個交易就被reset了。
在這裏插入圖片描述
有種不祥的預感。

google了一下,有用的信息基本都是中文結果,英文檢索幾乎沒有提過這個問題。這暗示着只有國內的民工纔會遇到。。翻了翻帖子,印證了長城在年初阻擋了這個服務。

0x03 配置代理

在環境變量中設置符號下載代理
變量名爲:_NT_SYMBOL_PROXY
變量值爲:127.0.0.1:8080
在這裏插入圖片描述
在來一發就可以下載了。

然而,事情總沒有想象的順利,LZ現在只有socks5的代理,試了下,無法現在pdb文件。

0x04 寫腳本手動下載pdb文件

腳本run.py源碼

#!/usr/bin/env python
import requests
from urllib.parse import urljoin
import os
import logging
LOG_LEVEL = logging.DEBUG
def download_file_by_curl(url, outdir, filename):
    newpath =  os.path.join('./downloads/',os.path.dirname(outdir))
    logging.info(newpath)
    os.system('mkdir -p %s;'%newpath)
    os.system('cd %s;curl -OL %s'%(newpath,url))
def main():
    filename = "windbg.log"
    outdir = './downloads/'
    main_url = 'https://msdl.microsoft.com/'
    with open(filename, 'r') as fp:
        content = fp.readlines()
        for rline in content:
            line = rline.strip()
            if line.startswith('SYMSRV:  HTTPGET:'):
                m = line.split(': ')
                url =urljoin(main_url, m[2])
                pdb_name = m[2][len('/download/symbols/'):]
                logging.info("{} {}".format(url, pdb_name))
                download_file_by_curl(url, pdb_name, filename)
if __name__ == '__main__':
    logging.basicConfig(format='%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s', level=LOG_LEVEL)
    main()

使用說明

  1. 把windbg的報錯日誌保存爲windbg.log
  2. mkdir downloads
  3. python3 run.py
  4. 把downloads下的文件轉移到win10下的符號目錄即可

展示下戰果
在這裏插入圖片描述

0x05 參考文獻

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/index
https://programlife.net/2020/02/23/windows-debugging-symbols-proxy-rules/
https://bbs.pediy.com/thread-256863.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章