Hello
The 20h2 version brings little new stuff, other than Edge.
note: QuickAssist.exe is ok only in the "ADM" session
To occupy these days of rain and cold, I looked why PDB symbols are not accessible on the MS servers in the "SYSTEM" session.
This anomaly forces me to implement their recovery since the ADM session (waste of time).
Procmon.exe and Windbg.exe both use dbghelp.dll APIs. Both encounter this anomaly.
It took me a long time to find a lead. I used, in addition to procmon and windbg:
- the "network" tracks with netsh,
- fiddler to track HTTPS traffic and installed its "proxy server" (good tool but i use 1% of its feature)
I make a copy/paste of the method that allowed me to find the solution.
Context for my test: Winpe 20h2 in Flat mode in a vhd
Observation:
In Winpe's System session, the symbol files (". PDB") are not accessible in the MS Symbol Server
But they have been since the Administrator session.
The 3 software tested that cannot access the HTTPS MS Symbol Server: windbg, procmon64, symchk
First element of analysis: communication uses HTTPS protocol
The three offending programs (Windbg, Procmon64, Symchk) use Dbghelp.dll and Symsrv.dll
The Dbghelp.doc documentation (present in Windbg's directory) explains the possible course.
Symsrv.dll contains calls to HTTP API and WinInet, two different families.
First tests in the System session:
With a PS script, download a file via HTTPS: OK
With Edge: OK, visiting HTTPS sites succeeds without any problems, idem download
With "Bitsadmin.exe" /TRANSFER "test" /DOWNLOAD
https://go.microsoft.com/fwlink/?linkid=2120254 "x:test" : OK
--->>> but do these programs use winhttp.dll?
With symchk.exe: failure!!!
"X:\Debugger\symchk.exe x:\debugger\symchk.exe /s srv-https://msdl.microsoft.com/download/symbols"
Complement to be expected: Take a test by writing a piece of code in C/C++ and using WinHttp.dll
Second element of analysis:
When I take a trace with Procmon64, I find that only the WinHTTP API is requested.
With IDA, it is now easier to identify the sequence of API calls.
I activate the network trace with:
"netsh trace start scenario-InternetClient captures-yes report-yes"
With Windbg, I observe the Symchk.exe program:
After putting breakpoints on important calls, I notice the error:0x800C2EE7

The use of the environmental variable "set DBGHELP_LOG X:dbghelp.log" confirms this error:
"
DBGHELP: new session: Mon Dec 7 18:45:50 2020
DBGHELP: _NT_SYMBOL_PATH: srv*https://msdl.microsoft.com/download/symbols
DBGHELP: Symbol Search Path: .;srv*https://msdl.microsoft.com/download/symbols
DBGHELP: Symbol Search Path: srv*https://msdl.microsoft.com/download/symbols
SYMSRV: BYINDEX: 0x1
https://msdl.microsoft.com/download/symbols FLTMGR.SYS
5510C2C86f000
SYMSRV: UNC: X:\windows\TEMP\sym\FLTMGR.SYS\5510C2C86f000\FLTMGR.SYS - path not found
SYMSRV: UNC: X:\windows\TEMP\sym\FLTMGR.SYS\5510C2C86f000\FLTMGR.SY_ - path not found
SYMSRV: UNC: X:\windows\TEMP\sym\FLTMGR.SYS\5510C2C86f000\file.ptr - path not found
SYMSRV: WinHttp interface using proxy server: none
SYMSRV: HTTPGET: /download/symbols/index2.txt
SYMSRV: WinHttpSendRequest: 800C2EE7 - ERROR_WINHTTP_NAME_NOT_RESOLVED
SYMSRV: HTTPGET: /download/symbols/FLTMGR.SYS/5510C2C86f000/FLTMGR.SYS
SYMSRV: WinHttpSendRequest: 800C2EE7 - ERROR_WINHTTP_NAME_NOT_RESOLVED
SYMSRV: RESULT: 0x800C2EE7

"
My first idea: use Fiddler to see https traffic between Windbg/Symchk and MS Symbol Server
Two possibilities :
use Fiddler as "Proxy Server" and install it on a PC accessible from Winpe
Advantage: Avoid installing Fiddler on Winpe
or install Fiddler on Winpe and trace HTTPS traffic
disadvantage: install Fiddler on Winpe
Method "use Fiddler on winpe"
- Installation of Fiddler on winpe :
The installation program is 32bits: OK in my winpe build with my hand

This leads to a few surprises, including some that I had already noticed during the zoom installation:
The app's file installation directory:
"X:\Windows\SysWOW64\config\systemprofile\AppData\Local\Programs\Fiddler Everywhere"

- Fiddler configuration: you need to enable HTTPS decryption and enable "proxy server"
https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/TrustFiddlerRootCert https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/MonitorRemoteMachine- Redirecting HTTPS traffic to Fiddler's "proxy server"
We want to trace the windbg/sysmchk traffic that uses winhttp.dll
https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureWinHTTPApp "netsh winhttp set proxy 127.0.0.1:8866"
What changes:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyEnable : dw 1
ProxyServer : sz 127.0.0.1:8866
Now that the observation tools are in place, I can launch "symchk.exe" to acquire a symbol file.
"X:\Debugger\symchk.exe x:\debugger\symchk.exe /s srv-https://msdl.microsoft.com/download/symbols"
And, Oh surprise, there is no error, the symbol file is actually downloaded from the MS Symbol Server.

I've done various tests to check. It is the presence of the "proxy server" and perhaps the Certificate of Fiddler used for decoding that allows this download.
question: why and how to do without it?
Quickassist test: No Ok, so it's not the same problem
THE HTTPS traffic visible in Fiddler contains the following channel: "This function is not supported by the system"
So I didn't make any progress.
I remember that I didn't take the time to exploit the file of the network trail "x:windows-temp-NetTrace.etl"

The format conversion. ETL in . TXT introduces texts in the local language (Fr for me). And no need to create .TMF files

But the main one remains understandable.
It contains:
"
- 0CD4.0D30::2020-12-09 13:33:27.883552300 [Microsoft-Windows-WebIO]0x24ADD2A8620 : =====Init Request===================
[0]0CD4.0D30::2020-12-09 13:33:27.883553300
[Microsoft-Windows-WebIO]0x24ADD2A8620 : CréerDemandeHttpWeb s’est terminé correctement. (Session 0x24ADD241980[0xFE00000020000001]) (Méthode GET) (URI
https://msdl.microsoft.com/download/symbols/SymChk.pdb/F371EE66D4C70D7E1558DE921D7E36D11/SymChk.pdb) (Version 0x1.0x1) -> (Handle de demande 0xFD00000030000002)
- 0CD4.0D30::2020-12-09 13:33:27.883554900 [Microsoft-Windows-WebIO]0x24ADD2A8620 : WebSetHttpRequestInformationRoutine terminée avec succès. (Handle 0xFD00000030000002) (Indicateurs 0x80000000) (Routine d’informations 0x7FFCA6945B70) (Contexte d’informations 0x24ADD2CDA30)
[0]0708.0A2C::2020-12-09 13:33:28.288830300
[Microsoft-Windows-DNS-Client]La requête DNS a été envoyée au serveur DNS ff02::1:3 pour le nom symsrvbogusproxy et le type 1
"
Why searching "symsrvbogusproxy" in a DNS server ?
A search on the WEB gives:
https://microsoft.public.windbg.narkive.com/TPEDtmfW/using-symbol-server-symsrv-from-local-system-accounthttps://microsoft.public.windbg.narkive.com/rBkpB7ZF/6-6-3-5-symsrv-dll-doesn-t-work-without-using-a-winhttp-proxy-when-used-with-symproxy-dll"Normally, symsrv uses the WinInet interface to grab symbols from the
internet. This interface provides rich support for credentialing through
proxies and protected web sites. When symsrv is run under a service, it
switches to using the WinHTTP interface. This interface does not have this
functionality. The reason for this is because normally when run from a
service, it is unmonitored by a user and sometimes it is imposible to
display UI. So hangs can occur unless I switch to the WinHTTP interface,
that does not have the same capabilities. WinHTTP is also able to run in a
multithreaded app such as the SymProxy ISAPI filter. WinInet is not able to
do this."
Of course, this is old information. But it certainly gives a lead that I don't understand yet.
The "symsrvbogusproxy" string is present in SymSrv.dll.

If I'm going to sum it up without a mistake --- i hope ---- :
In the "System" session :
- in the absence of Fiddler (! ), SymSrv.dll uses WinHTTP APIs.
But SymSrv.dll detects a "proxy server" that doesn't exist, and therefore fails.
- In the case where Fiddler's "proxy server" is present, SymSrv.dll detects this "proxy server" and therefore succeeds.
It seems to me that the key points for Winpe would be:
Which indicator generates Symsrv.dll to WinHTTP APIs?
Which indicator generates the detection of a "proxy server" that does not exist?
Search with IDA in the disassembled code...long time ....I rely on my intuition and I do the following test by adding this in winpe:
[HKEY_LOCAL_MACHINE-SOFTWARE-Microsoft-Symbol Server]
"NoInternetProxy"dword:00000001
And bingo, it works! Procmon64, SymChk now charge symbols from MS Symbols Server in System session
Now, viewing the "stack" promon menu is easier in the "system" session
Well friendly
Noel