A crypto library to decrypt various encrypted D-Link firmware images.

Confirmed to work on the following D-Link devices:

  • E15
  • E30
  • R12
  • R15
  • R18
  • M18
  • M30
  • M32
  • M60
  • DAP-1665
  • DAP-1820
  • DAP-1955
  • DAP-2610
  • DAP-2680
  • DAP-2682
  • DIR-850L A1
  • DIR-850L B1
  • DAP-1610 B1
  • DAP-1620 B1
  • DAP-LX1880
  • DRA-1360 A1
  • DRA-2060 A1
  • DIR-1750
  • DIR-2055
  • DIR-LX1870
  • DIR-X1560
  • DIR-X1870
  • DIR-X4860
  • DIR-X5460
  • DIR-822
  • DIR-842
  • DIR-878
  • DIR-2150
  • DIR-3040
  • DIR-3060

Encryption keys/methods are often re-used amongst devices and firmware, so other devices may also be supported.

Compiling

You must have the Rust compiler installed:

cargo build --release

Command Line Usage:

./target/release/delink encrypted.bin decrypted.bin

Rust Library Usage:

// Read in the contents of an encrypted firmware image
match std::fs::read("DIR850LB1_FW220WWb03.bin") {
    Err(e) => {
        eprint!("Failed to read input file: {}", e);
    }
    Ok(encrypted_data) => {
        // Attempt to decrypt the encrypted data
        match delink::decrypt(&encrypted_data) {
            Err(e) => {
                eprint!("Decryption failed: {}", e);
            }
            Ok(decrypted_data) => {
                // Decryption successful, save decrypted data to disk
                if let Err(e) = std::fs::write("decrypted.bin", decrypted_data) {
                    eprint!("Failed to write decrypted data: {}", e);
                }
            }
        }
    }
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here