Please find a small script that extracts all JPCORE instances from a ROM dump:
import os, sys
from struct import unpack
def getLongLE(d, a):
return unpack('<L',(d)[a:a+4])[0]
def getShortBE(d, a):
return unpack('>H',(d)[a:a+2])[0]
d = open(sys.argv[1]).read()
blob_id = 0
for a in range(0, len(d) & ~3, 4):
v = getLongLE(d, a)
if v == 0xF4B2:
v2 = getLongLE(d, a+4)
if v2 == 0x7E4C:
sz = getShortBE(d, a + 0x84) * 2
print hex(a), hex(sz)
blob_id += 1
blob = d[a : a+sz]
fout = os.path.join(os.path.dirname(sys.argv[1]), "JPCORE%d.BIN" % blob_id)
print " -> %s" % fout
out = open(fout, "w")
out.write(blob)
out.close()
else:
print "false alarm at", hex(a), hex(v2)
Very old models (such as 5D and 400D) have some strings in the JPCORE firmware. For example, on 400D:
diagnostics() rev-1.0 2001/07/17 author Satoshi Naito CM51
launcher.s rev-1.0 2001/07/17 author Satoshi Naito
bypass() rev-1.0 author S.Naito 2001/07/17
encdec_jpeg rev2.11 2004/02/12 Yukio Chiba & Satoshi Naito
predecode_mpeg2() rev-0.10 2001/4/23 author Akihiro Uehara BH51
decode_mpeg1() rev-0.18 2001/07/09 author Akihiro Uehara BH51
decode_mpeg2() rev-0.18 2001/07/09 author Akihiro Uehara BH51
encode_mpeg1() rev-0.20 2001/5/13 author Satoshi Naito and Akihiro Uehara BH51
encode_mpeg2() rev-0.19 2002/5/13 author Satoshi Naito and Akihiro Uehara BH51
The JPCORE firmware is also present in PowerShots, and appears to be shared across many cameras. For example, 60D and A1100 (EOS and PowerShot, both DIGIC 4) contain identical JPCORE firmwares. I've tried to group both DSLR and PowerShot models that use identical JPCORE blobs:
(D2) 5D IXUS50 IXUS700 S2IS
(D2) 30D 400D IXUS30 IXUS40
(D3) 1000D 40D 450D A470 A580 A590 A650 A720 G9 IXUS80 IXUS82 IXUS85 IXUS860 IXUS90 IXUS960 IXUS970 SX100IS
(D4) 1100D 1200D 1300D 500D 50D 550D 5D2 600D 60D 7D A1100 A1100 A1200 A2100 A2200 A3200 A3300 D10 G10 G11 G12 IXUS1100 IXUS115 IXUS117 IXUS220 IXUS230 IXUS310 IXUS1000 IXUS100 IXUS105 IXUS110 IXUS120 IXUS130 IXUS200 IXUS210 IXUS300 IXUS870 IXUS95 IXUS980 IXUS990 S90 S95 SX10 SX1 SX120 SX130 SX150 SX200 SX200IS SX20 SX210IS SX220 SX220HS SX230 SX30
(D5) 100D 5D3 650D 6D 70D EOSM G1X S100 SX40
(D5) 700D
(D6) 5D4 750D 760D 7D2M 7D2S 80D EOSM10 EOSM3 G16 G3X G5X G7X IXUS145 IXUS150 IXUS155 IXUS157 IXUS160 IXUS170 IXUS175 IXUS180 IXUS265 IXUS275 S120 SX270 SX280 SX400 SX410IS SX520 SX530 SX600 SX60 SX610 SX700 SX710 SX720
(D2) A410 A420 A430 A450 A460 A530 A540 A550 A610 A620 A700 IXUS55 IXUS60 IXUS65 IXUS750 IXUS800 IXUSIZOOM IXUSW S3IS S80
(D2) A630 A640 A710
(D3) A1000 A2000 A3000 A3100 A3150 A480 A490 A495 A800 E1 SX110
(D3) A560 A570 G7 IXUS70 IXUS75 IXUS850 IXUS900 IXUS950 IXUSI7ZOOM S5IS TX1
(D4) A1300 A1400 A2300 A2400 A2500 A2600 A3400 A3500 A4000 A810 D20 D30 G15 IXUS125 IXUS132 IXUS140 IXUS240 IXUS255 IXUS500 IXUS510 N N-FB S110 SX160 SX170 SX240 SX260 SX260HS SX500 SX50 SX510
Some interesting ideas about how to figure out the meaning of these codes:
https://recon.cx/2012/schedule/attachments/40_Chernov-Troshina.pdfFrequency of 16-bit codes, 16-bit alignment:
Code 5D3JP 5D3JP57 60DJP 80DJP 400DJP Total
0000: 153 250 151 228 314 1096
f37e: 196 172 196 196 289 1049
1762: 168 140 168 172 172 820
02fa: 166 144 166 166 157 799
7f1a: 97 140 97 97 186 617
dfae: 109 108 109 109 121 556
f76e: 82 70 82 82 204 520
2762: 99 84 99 99 105 486
41e8: 97 77 97 97 93 461
04ba: 66 83 66 66 176 457
Frequency of 32-bit codes, 16-bit alignment:
Code 5D3JP 5D3JP57 60DJP 80DJP 400DJP Total
00000000: 103 196 103 173 254 829
02faf37e: 102 90 102 98 96 488
20202020: 142 0 142 142 0 426
f37e00ec: 76 36 76 76 73 337
f37e02ec: 49 58 49 49 48 253
11cb1762: 45 39 45 45 45 219
176200e8: 43 39 43 43 43 211
304a1fae: 0 0 0 0 178 178
276241e8: 32 27 32 32 28 151
003e04ba: 24 21 24 24 44 137
Frequency of 32-bit codes, 32-bit alignment:
Code 5D3JP 5D3JP57 60DJP 80DJP 400DJP Total
00000000: 52 99 52 90 131 424
02faf37e: 45 51 45 44 46 231
20202020: 72 0 72 72 0 216
f37e00ec: 33 16 33 35 34 151
f37e02ec: 27 25 27 27 23 129
11cb1762: 23 21 23 24 23 114
176200e8: 22 21 22 21 24 110
304a1fae: 0 0 0 0 76 76
f76a7f1a: 13 10 13 11 26 73
003e04ba: 13 11 13 13 22 72
Frequency of 64-bit codes, 32-bit alignment:
Code 5D3JP 5D3JP57 60DJP 80DJP 400DJP Total
0000000000000000: 43 88 43 79 118 371
2020202020202020: 67 0 67 67 0 201
f76a7f1a003e04ba: 10 4 10 9 12 45
5d5202faf37e02ec: 13 0 13 13 0 39
27660f1af162121a: 5 4 5 7 6 27
815202faf37e02ec: 9 0 9 9 0 27
f162121a21c62762: 5 4 5 7 6 27
0aeb008a10fc1fb2: 6 2 6 6 6 26
41e8004a27660f1a: 5 4 5 6 6 26
10fc1fb2017e067e: 6 2 6 6 6 26