In their typical fashion, unless you know what you're doing, Microsoft made it incredibly difficult to get your hands on a simple basic executable, that they should by all means provide as an easily accessible download, since it's one of the basic utility you may want to have at hand to create an ISO from a bunch of files and directory.
Well, we know what we're doing, which is to use a very handy technique that we picked up from actual malware, so, from PowerShell:
curl.exe -L -A "Microsoft-Symbol-Server/10.0.0.0" https://msdl.microsoft.com/download/symbols/oscdimg.exe/688CABB065000/oscdimg.exe -o oscdimg.exe
There. Now you have oscdimg and you can get on with your life without having to download gigabytes of extra garbage.
Oh and to create an ISO using a Windows command prompt from this very handy tool:
oscdimg -g -h -k -m -u2 -udfver102 -l"My Image" C:\tmp\image\ C:\tmp\image.iso
What, I'm repeating myself? No I'm not repeating myself.
What, I'm repeating myself?
Oh, and since I am feeling generous today, I might as well provide you with a Python script that allows you to generate the URL on your own, from any Microsoft PE executable:
#!/bin/env python3 # This script generates the debug server URL from a Microsoft PE executable, which # then allows you to download it directly from Microsoft. Use this URL in: # # curl.exe -L -A "Microsoft-Symbol-Server/10.0.0.0" <URL> -o <EXE_NAME> import os import sys import pefile def build_symbol_server_url(pe_path): # Get the filename exe_name = os.path.basename(pe_path) # Load the PE file pe = pefile.PE(pe_path) # Extract TimeDateStamp and SizeOfImage time_date_stamp = pe.FILE_HEADER.TimeDateStamp size_of_image = pe.OPTIONAL_HEADER.SizeOfImage # Build the hex part (TimeDateStamp: 8 hex digits, SizeOfImage: uppercase hex, no leading zeros removed) hex_part = '{:08X}{:X}'.format(time_date_stamp, size_of_image) # Construct the URL url = f"https://msdl.microsoft.com/download/symbols/{exe_name}/{hex_part}/{exe_name}" return url if __name__ == "__main__": if len(sys.argv) != 2: print(f"Usage: {sys.argv[0]} <path_to_pe_file>") sys.exit(1) pe_path = sys.argv[1] try: url = build_symbol_server_url(pe_path) print(url) except Exception as e: print(f"Error: {e}") sys.exit(1)