Is there any way to backup stock firmware Dlink 853-a

With serial access with limited U-boot options:

Please choose the operation: 
   1: Load system code to SDRAM via TFTP. 
   2: Load system code then write to Flash via TFTP. 
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
   6: System Enter UBoot to Update Img or Bin. 
   7: Load Boot Loader code then write to Flash via Serial. 
   9: Load Boot Loader code then write to Flash via TFTP.
 System Boot system code via Flash.
## Booting image at bc180000 ...
   Image Name:   Linux Kernel Image
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    18875616 Bytes = 18 MB
   Load Address: 80001000
   Entry Point:  8065eba0

I tried to backup with chunks to dump with following commands, each is less then 900kb (1mb gives malloc error)

nand init
nand page 0x100
nand read 0x81000000 0x1000

Although process was very slow but able to backup all chunks and ran python script to remove duplicates, unwanted data and create a clean backup:


def clean_uboot_hex_dump(input_file, output_file):
    print("Analyzing U-Boot hex dump...")
    
    seen_addresses = set()
    clean_lines = []
    total_lines = 0
    duplicate_count = 0
    
    with open(input_file, 'r', encoding='utf-8', errors='ignore') as f:
        for line_num, line in enumerate(f, 1):
            total_lines += 1
            
            # Skip empty lines and U-Boot command prompts
            if not line.strip() or line.startswith('MT7621') or '#' in line[:10]:
                continue
                
            # Match hex dump lines (address: data data data...)
            if ':' in line:
                parts = line.split(':', 1)
                address = parts[0].strip()
                
                # Validate address format (hex addresses)
                if re.match(r'^81[0-9a-f]{6}$', address.lower()):
                    if address not in seen_addresses:
                        seen_addresses.add(address)
                        clean_lines.append(line)
                    else:
                        duplicate_count += 1
    
    # Write cleaned data
    with open(output_file, 'w', encoding='utf-8') as f:
        f.writelines(clean_lines)
    
    

Unfortunately, integrity of backup remains very low. Looking for a practical solution. Thanks

Use option 1 to run a kernel image DLed from https://firmware-selector.openwrt.org/?version=SNAPSHOT.

Read the flash and transfer to your client.

Thanks for helping me out, with limited expertise I was able to de-code your msg and able to copy the stock image partition. can I share this image backup here, so if any one need can use it.
Old version: DIR-853/ET HW: A3 FW: ET853PNP-1.05-B71D26 and this is updated with DIR-853/ET HW: A3 FW:ET853PNP-1.10-B01D02.

1 Like

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.