CauldronDevelopmentLLC / oh-brother

A simple cross-platform utility written in Python which can update Brother printer firmwares
GNU General Public License v2.0
102 stars 21 forks source link

Firmware download from Brother failing. #29

Closed u1735067 closed 2 years ago

u1735067 commented 2 years ago

Hi,

the latest version seems to be broken (SN removed in those samples):

       model = MFC-L2750DW series
        spec = 0405
   firmwares
            category = MAIN, version = R2007171702:3F26
            category = SUB1, version = 1.10
            category = SUB5, version = 1.04

Updating MAIN version R2007171702:3F26
request: b"<?xml version='1.0' encoding='utf8'?>\n<REQUESTINFO>\n    <FIRMUPDATETOOLINFO>\n        <FIRMCATEGORY>MAIN</FIRMCATEGORY>\n        <OS>LINUX</OS>\n        <INSPECTMODE>1</INSPECTMODE>\n    </FIRMUPDATETOOLINFO>\n    <FIRMUPDATEINFO>\n        <MODELINFO>\n            <SELIALNO>HI</SELIALNO>\n            <NAME>MFC-L2750DW series</NAME>\n            <SPEC>0405</SPEC>\n            <DRIVER />\n            <FIRMINFO>\n              <FIRM><ID>MAIN</ID><VERSION>R2007171702:3F26</VERSION></FIRM>\n            </FIRMINFO>\n        </MODELINFO>\n        <DRIVERCNT>1</DRIVERCNT>\n        <LOGNO>2</LOGNO>\n        <ERRBIT />\n        <NEEDRESPONSE>1</NEEDRESPONSE>\n    </FIRMUPDATEINFO>\n</REQUESTINFO>"
Looking up printer firmware info at vendor server...
done
response: b'<?xml version="1.0" encoding="UTF-8" ?><RESPONSEINFO></RESPONSEINFO>'
No firmware update info path found
       model = MFC-L2750DW series
        spec = 0405
   firmwares
            category = MAIN, version = R2007171702:3F26
            category = SUB1, version = 1.10
            category = SUB5, version = 1.04

Updating SUB1 version 1.10
request: b"<?xml version='1.0' encoding='utf8'?>\n<REQUESTINFO>\n    <FIRMUPDATETOOLINFO>\n        <FIRMCATEGORY>SUB1</FIRMCATEGORY>\n        <OS>LINUX</OS>\n        <INSPECTMODE>1</INSPECTMODE>\n    </FIRMUPDATETOOLINFO>\n    <FIRMUPDATEINFO>\n        <MODELINFO>\n            <SELIALNO>HI</SELIALNO>\n            <NAME>MFC-L2750DW series</NAME>\n            <SPEC>0405</SPEC>\n            <DRIVER />\n            <FIRMINFO>\n              <FIRM><ID>SUB1</ID><VERSION>1.10</VERSION></FIRM>\n            </FIRMINFO>\n        </MODELINFO>\n        <DRIVERCNT>1</DRIVERCNT>\n        <LOGNO>2</LOGNO>\n        <ERRBIT />\n        <NEEDRESPONSE>1</NEEDRESPONSE>\n    </FIRMUPDATEINFO>\n</REQUESTINFO>"
Looking up printer firmware info at vendor server...
done
response: b'<?xml version="1.0" encoding="UTF-8" ?><RESPONSEINFO></RESPONSEINFO>'
No firmware update info path found

Here are some working sniffed requests:

MAIN

POST https://firmverup.brother.co.jp/kne_bh7_update_nt_ssl/ifax2.asmx/fileUpdate HTTP/1.1
Host:   firmverup.brother.co.jp
Connection: Keep-Alive
Content-Length: 535
Pragma: no-cache
Cache-Control:  no-cache
User-Agent: BrHttpc/1.00
Cache-Control:  no-cache
Accept: */*
Accept-Encoding:    gzip, deflate
Content-Type:   text/xml

<?xml version="1.0" encoding="UTF-8" ?>
<REQUESTINFO>
  <FIRMUPDATETOOLINFO>
    <FIRMCATEGORY>MAIN</FIRMCATEGORY>
    <OS>WIN_NATIVE</OS>
    <INSPECTMODE>0</INSPECTMODE>
  </FIRMUPDATETOOLINFO>
  <FIRMUPDATEINFO>
    <MODELINFO>
      <NAME>MFC-L2750DW series</NAME>
      <SPEC>0405</SPEC>
      <DRIVER>EWS</DRIVER>
      <FIRMINFO>
        <FIRM>
          <ID>MAIN</ID>
          <VERSION>R2007171702:3F26</VERSION>
          <ID>SUB1</ID>
          <VERSION>1.10</VERSION>
          <ID>SUB5</ID>
          <VERSION>1.04</VERSION>
        </FIRM>
      </FIRMINFO>
    </MODELINFO>
    <DRIVERCNT>1</DRIVERCNT>
    <LOGNO>2</LOGNO>
    <NEEDRESPONSE>1</NEEDRESPONSE>
  </FIRMUPDATEINFO>
</REQUESTINFO>
HTTP/1.1 200 OK
Date:   Sat, 01 Jan 2022 15:13:09 GMT
Content-Type:   text/xml
Content-Length: 311
Connection: keep-alive
Cache-Control:  private, max-age=0
X-AspNet-Version:   4.0.30319
X-Frame-Options:    Deny

<?xml version="1.0" encoding="UTF-8" ?>
<RESPONSEINFO>
  <FIRMUPDATEINFO>
    <VERSIONCHECK>0</VERSIONCHECK>
    <MEMORYVERSION>a</MEMORYVERSION>
    <FIRMID>MAIN</FIRMID>
    <LATESTVERSION>X2110251955</LATESTVERSION>
    <PATH>http://update-akamai.brother.co.jp/CS/D00L6V_X.djf</PATH>
    <DLTIME>65000</DLTIME>
  </FIRMUPDATEINFO>
</RESPONSEINFO>

SUB1

POST https://firmverup.brother.co.jp/kne_bh7_update_nt_ssl/ifax2.asmx/fileUpdate HTTP/1.1
Host:   firmverup.brother.co.jp
Connection: Keep-Alive
Content-Length: 535
Pragma: no-cache
Cache-Control:  no-cache
User-Agent: BrHttpc/1.00
Cache-Control:  no-cache
Accept: */*
Accept-Encoding:    gzip, deflate
Content-Type:   text/xml

<?xml version="1.0" encoding="UTF-8" ?>
<REQUESTINFO>
  <FIRMUPDATETOOLINFO>
    <FIRMCATEGORY>SUB1</FIRMCATEGORY>
    <OS>WIN_NATIVE</OS>
    <INSPECTMODE>0</INSPECTMODE>
  </FIRMUPDATETOOLINFO>
  <FIRMUPDATEINFO>
    <MODELINFO>
      <NAME>MFC-L2750DW series</NAME>
      <SPEC>0405</SPEC>
      <DRIVER>EWS</DRIVER>
      <FIRMINFO>
        <FIRM>
          <ID>SUB1</ID>
          <VERSION>1.10</VERSION>
          <ID>MAIN</ID>
          <VERSION>R2007171702:3F26</VERSION>
          <ID>SUB5</ID>
          <VERSION>1.04</VERSION>
        </FIRM>
      </FIRMINFO>
    </MODELINFO>
    <DRIVERCNT>1</DRIVERCNT>
    <LOGNO>2</LOGNO>
    <NEEDRESPONSE>1</NEEDRESPONSE>
  </FIRMUPDATEINFO>
</REQUESTINFO>
HTTP/1.1 200 OK
Date:   Sat, 01 Jan 2022 15:13:10 GMT
Content-Type:   text/xml
Content-Length: 304
Connection: keep-alive
Cache-Control:  private, max-age=0
X-AspNet-Version:   4.0.30319
X-Frame-Options:    Deny

<?xml version="1.0" encoding="UTF-8" ?>
<RESPONSEINFO>
  <FIRMUPDATEINFO>
    <VERSIONCHECK>0</VERSIONCHECK>
    <MEMORYVERSION>a</MEMORYVERSION>
    <FIRMID>SUB1</FIRMID>
    <LATESTVERSION>1.11</LATESTVERSION>
    <PATH>http://update-akamai.brother.co.jp/CS/D00L6W_G.djf</PATH>
    <DLTIME>24000</DLTIME>
  </FIRMUPDATEINFO>
</RESPONSEINFO>

SUB5

POST https://firmverup.brother.co.jp/kne_bh7_update_nt_ssl/ifax2.asmx/fileUpdate HTTP/1.1
Host:   firmverup.brother.co.jp
Connection: Keep-Alive
Content-Length: 535
Pragma: no-cache
Cache-Control:  no-cache
User-Agent: BrHttpc/1.00
Cache-Control:  no-cache
Accept: */*
Accept-Encoding:    gzip, deflate
Content-Type:   text/xml

<?xml version="1.0" encoding="UTF-8" ?>
<REQUESTINFO>
  <FIRMUPDATETOOLINFO>
    <FIRMCATEGORY>SUB5</FIRMCATEGORY>
    <OS>WIN_NATIVE</OS>
    <INSPECTMODE>0</INSPECTMODE>
  </FIRMUPDATETOOLINFO>
  <FIRMUPDATEINFO>
    <MODELINFO>
      <NAME>MFC-L2750DW series</NAME>
      <SPEC>0405</SPEC>
      <DRIVER>EWS</DRIVER>
      <FIRMINFO>
        <FIRM>
          <ID>SUB5</ID>
          <VERSION>1.04</VERSION>
          <ID>MAIN</ID>
          <VERSION>R2007171702:3F26</VERSION>
          <ID>SUB1</ID>
          <VERSION>1.10</VERSION>
        </FIRM>
      </FIRMINFO>
    </MODELINFO>
    <DRIVERCNT>1</DRIVERCNT>
    <LOGNO>2</LOGNO>
    <NEEDRESPONSE>1</NEEDRESPONSE>
  </FIRMUPDATEINFO>
</REQUESTINFO>
HTTP/1.1 200 OK
Date:   Sat, 01 Jan 2022 15:13:10 GMT
Content-Type:   text/xml
Content-Length: 152
Connection: keep-alive
Cache-Control:  private, max-age=0
X-AspNet-Version:   4.0.30319
X-Frame-Options:    Deny

<?xml version="1.0" encoding="UTF-8" ?>
<RESPONSEINFO>
  <FIRMUPDATEINFO>
    <VERSIONCHECK>2</VERSIONCHECK>
    <FIRMID>SUB5</FIRMID>
  </FIRMUPDATEINFO>
</RESPONSEINFO>

Thank you for this tool, allowing me to keep firmware history, in case something goes wrong, Alexandre

foxharp commented 2 years ago

Same symptoms here, on a Brother HL-5450DN. Same empty RESPONSEINFO. Happy to help, if possible.

xantari commented 2 years ago

@u1735067 How did you do a network trace on the official windows firmware update tool? It appears to use TLS 1.2 and I can't seem to get wireshark to decrypt the packets (on a windows device).

I wanted to watch the request/response HTTP calls to interogate how the official firmware update tool was working.

u1735067 commented 2 years ago

@u1735067 How did you do a network trace on the official windows firmware update tool? It appears to use TLS 1.2 and I can't seem to get wireshark to decrypt the packets (on a windows device).

I used mitmproxy on the printer, but the same may be applicable on the computer (you might however intercept too many things if you set it up at OS level):

xantari commented 2 years ago

Ahh, thanks!

j4nn commented 1 year ago

Thank you for this tool, allowing me to keep firmware history, in case something goes wrong, Alexandre

@u1735067 could you please share me your Brother printer firmware history? I happen to have MFC-L2752DW printer which seems to use the same firmware as yours MFC-L2750DW printer. I did not update the printer's fw yet, already a year or so since bought, but seeing some bugs with scanning, I wonder if any fw update would bring some improvement. But on the other hand I read that Brother is limiting use of aftermarket toners with firmware updates, so I would like to have a way to revert a firmware update in such case. I would really appreciate if you had the firmwares downloaded as it seems that only the latest version can be downloaded. Thanks a lot in advance!

u1735067 commented 1 year ago

could you please share me your Brother printer firmware history?

I don't know when I'll be able, but sure, where can I reach you?

I would really appreciate if you had the firmwares downloaded as it seems that only the latest version can be downloaded.

The updater only list the latest files, but you can notice it uses an alphabetical notation, so you can guess the previous version files & URLs. Also, this letter version is mentioned at https://support.brother.com/g/b/downloadend.aspx?c=us_ot&lang=en&prod=mfcl2750dw_us_eu_as&os=10013&dlid=dlf004715_000&flang=4&type3=375&dlang=true if I'm not mistaken.

SUB1 isn't updated often, and I don' think I was able to get a copy of SUB5 (never updated?).

But on the other hand I read that Brother is limiting use of aftermarket toners with firmware updates

Are they on such printers? I though we were ok on such models (but it's also why I'm keeping the previous firmwares)

j4nn commented 1 year ago

could you please share me your Brother printer firmware history?

I don't know when I'll be able, but sure, where can I reach you?

@u1735067 , I am sending you an email titled as "brother printer firmwares" - hopefully that reaches you.

The updater only list the latest files, but you can notice it uses an alphabetical notation, so you can guess the previous version files & URLs. Also, this letter version is mentioned at https://support.brother.com/g/b/downloadend.aspx?c=us_ot&lang=en&prod=mfcl2750dw_us_eu_as&os=10013&dlid=dlf004715_000&flang=4&type3=375&dlang=true if I'm not mistaken.

I tried that before contacting you, even including the hints from brother site, but all that tried resulted with not found error, basically only the latest version could be downloaded.

SUB1 isn't updated often, and I don' think I was able to get a copy of SUB5 (never updated?).

Yes, using this tool, SUB1 could be downloaded too and I managed to download also SUB5, but it did not work for the version reported by printer, not even for version minus one, I had to subtract 2 in order to get SUB5 to download. So I guess that is either older than what the printer has since bought or possibly incorrect?

But on the other hand I read that Brother is limiting use of aftermarket toners with firmware updates Are they on such printers? I though we were ok on such models (but it's also why I'm keeping the previous firmwares)

To be honest - I am not sure - just read some hints about brother doing that in general, I have no idea if it applies also to our printer model. But seeing that in general makes me worried to do an update if there was no way back. That is why I would really like to have some older firmwares at hand so I could revert to them in case I need to use a not-approved toner in the future.