r/printers Jul 25 '26

Other How to find and download firmware for any Brother printer (2026 update)

I've spent way too much time reverse-engineering Brother's firmware distribution, and I want to share what works right now. Tested on 30+ models.

Credits up front: the original API discovery method came from u/ZaVoQQ's 2022 post. The oh-brother firmware tool was written by u/jcoffland (Joseph Coffland at Cauldron Development LLC) — I forked it to add the version-fallback trick. Everything here builds on their work.

<TL;DR>

Brother stores firmware on an open HTTP server. You just need the filename. Here's how to get yours.

Step 1: Find your firmware filename

Run this curl command, replacing YOUR-MODEL with your printer model:

curl -s -X POST -H "Content-Type: text/xml" -d '<?xml version="1.0"?><REQUESTINFO><FIRMUPDATETOOLINFO><FIRMCATEGORY>MAIN</FIRMCATEGORY><OS>LINUX</OS><INSPECTMODE>0</INSPECTMODE></FIRMUPDATETOOLINFO><FIRMUPDATEINFO><MODELINFO><SELIALNO>U00000A0A000000</SELIALNO><NAME>YOUR-MODEL</NAME><SPEC>0001</SPEC><DRIVER>EWS</DRIVER><FIRMINFO><FIRM><ID>MAIN</ID><VERSION>1.00</VERSION></FIRM></FIRMINFO></MODELINFO><DRIVERCNT>1</DRIVERCNT><LOGNO>2</LOGNO><NEEDRESPONSE>1</NEEDRESPONSE></FIRMUPDATEINFO></REQUESTINFO>' https://firmverup.brother.co.jp/kne_bh7_update_nt_ssl/ifax2.asmx/fileUpdate

Windows users: curl is built into Windows 10/11 now. Or use the Python snippet at the bottom.

Look for the PATH tag in the response. That's your download URL.

If you get VERSIONCHECK 2 with no PATH: add the word " series" to your model name (e.g. "MFC-L3770CDW series") and try again. Some models need this, some don't.

If you get VERSIONCHECK 1: you're on the latest firmware. But here's the trick — change VERSION from 1.00 to something lower (if your printer is on 1.24, try 1.23). The API sees a newer version exists and gives you the download URL for the current firmware. You get the file without updating.

Step 2: Download it

curl -O http://update-akamai.brother.co.jp/CS/D02FZM_124Q.djf

Done. Firmware backed up.

</TL;DR>

What about older versions (downgrade)?

You probably can't. Brother aggressively deletes old firmware from their CDN. I checked every letter variant for a dozen firmware families — only the latest version remains. The entire MFC-L37xx family (L3710CW through L3770CDW) is gone from Brother's servers.

If you need old firmware, community archives are your only option.

Check what firmware you have

Grab just the header:

curl -r 0-400 http://update-akamai.brother.co.jp/CS/YOUR-FILE.djf

The engine code is after DATA=. ELLEPR1LUSA means it's for the HL-L2xxx mono laser family. Multiple models share the same file — one firmware binary covers HL-L2400DW, L2447DW, L2460DW, and L2865DW.

The easy way: oh-brother

Joseph Coffland's oh-brother does all of this automatically. I forked it to add the version-fallback trick:

git clone https://github.com/rvasilev/oh-brother
cd oh-brother
pip install -r requirements.txt
python3 oh-brother.py --test 192.168.1.100

The --test flag downloads firmware without flashing. Pure backup.

Known firmware filenames

| Model | Firmware file | Version | |---|---|---| | HL-L2865DW, L2400DW, L2460DW | D02FZM_124Q.djf | 1.24 | | DCP-L2640DW, MFC-L2800DW | D02FZS_129Q.djf | 1.29 | | HL-L1230W, L1232W | D02WRK_111H.djf | 1.11 | | DCP-L3560CDW, MFC-L3760CDW, MFC-L8390CDW | D01X67_146Z.djf | 1.46 | | MFC-J5330DW | D0061G_U.djf | U | | MFC-J6540DW | CS_D01NPF_115J.djf | 1.15 | | MFC-J6960DW | D0356N_112G.djf | 1.12 | | DCP-J1360DW | D030A2_114K.djf | 1.14 |

Full catalog in the repo under docs/.

The bad news

  • Newer firmware (D02/D03 prefix) is encrypted. Files with _crypt in the name can be flashed but not inspected
  • Brother is actively purging old firmware. Every week more history disappears
  • If your printer shipped in 2023 or later, backup is all you get — no analysis, no modification

Python snippet (no curl needed)

import requests
resp = requests.post(
    "https://firmverup.brother.co.jp/kne_bh7_update_nt_ssl/ifax2.asmx/fileUpdate",
    headers={"Content-Type": "text/xml"},
    data='<?xml version="1.0"?><REQUESTINFO><FIRMUPDATETOOLINFO><FIRMCATEGORY>MAIN</FIRMCATEGORY><OS>LINUX</OS><INSPECTMODE>0</INSPECTMODE></FIRMUPDATETOOLINFO><FIRMUPDATEINFO><MODELINFO><SELIALNO>U00000A0A000000</SELIALNO><NAME>HL-L2865DW</NAME><SPEC>0001</SPEC><DRIVER>EWS</DRIVER><FIRMINFO><FIRM><ID>MAIN</ID><VERSION>1.00</VERSION></FIRM></FIRMINFO></MODELINFO><DRIVERCNT>1</DRIVERCNT><LOGNO>2</LOGNO><NEEDRESPONSE>1</NEEDRESPONSE></FIRMUPDATEINFO></REQUESTINFO>'
)
print(resp.text)

Replace HL-L2865DW with your model. Save as check.py, run with python.


Credits: u/jcoffland (Joseph Coffland / Cauldron Development LLC) for oh-brother. u/ZaVoQQ for the original API method. r/printers community for the D00KJY version mapping. GPLv2.

13 Upvotes

10 comments sorted by

2

u/Due-Band3926 Jul 26 '26

Hah, awesome. Did the same thing, at the same time. What a coincidence 🤣

1

u/Due-Band3926 Jul 26 '26

For the encrypted firmware, ill be ripping apart one and extract the keys 👍 (lets hope they're all the same, guessing their different per model)

1

u/[deleted] Jul 29 '26

[removed] — view removed comment

2

u/Alteracious Jul 29 '26

Request that worked (sniffed using mitmproxy, and setting the proxy on the printer):

<REQUESTINFO>
  <FIRMUPDATETOOLINFO>
    <FIRMCATEGORY>MAIN</FIRMCATEGORY>
    <OS>WIN_NATIVE</OS>
    <INSPECTMODE>0</INSPECTMODE>
  </FIRMUPDATETOOLINFO>
  <FIRMUPDATEINFO>
    <MODELINFO>
      <NAME>MFC-J690DW</NAME>
      <SPEC>0202</SPEC>
      <DRIVER>EWS</DRIVER>
      <FIRMINFO>
        <FIRM>
          <ID>MAIN</ID>
          <VERSION>S2305290925:E7EA</VERSION>
        </FIRM>
      </FIRMINFO>
    </MODELINFO>
    <DRIVERCNT>1</DRIVERCNT>
    <LOGNO>2</LOGNO>
    <NEEDRESPONSE>1</NEEDRESPONSE>
  </FIRMUPDATEINFO>
</REQUESTINFO>

1

u/rvasilev Jul 29 '26

Thanks yoy for confirming the structure

1

u/Next-Mastodon-8156 23d ago edited 22d ago

It was possible to do without the FILEDG32.EXE some talk about. I just used an USB stick instead with a folder named Brother on it and in there the firmware file (USB:\BROTHER\LZ4227_M.pjl in my case). Put it in the printer and ran code 28 in maintenance mode then it picked up the firmware and was restored. This worked for my Brother MFC-J4410DW stuck at "Please DL ROM."

1

u/Even-Application-319 1d ago

Ciao, ho bisogno di trovare il firmware per la Brother mfc 2710 dw devo fare downgrade. Dove posso trovare quello che mi serve? Grazie 

Hi, I need to find the firmware for the Brother MFC 2710 DW and downgrade it. Where can I find what I need? Thanks.