警告本文章为非盈利性质,仅作为个人学术研究之用。研究中所涉及的数据和信息均来自公开可得的资源。
在使用本研究成果时,使用者应自行承担风险。本研究作者对因使用本研究成果而导致的任何直接、间接、偶然、特殊及继起的损害不承担任何责任。
开篇废话
最近学校里x想打印机硒鼓次数用完了,众所周知官方耗材都是很贵的,剩下的故事你懂的。
所以能不能自己魔改一份呢?
于是折腾就开始了。
成品魔改姿势
懒得看几小时折腾过程的直接看这边就好了
硒鼓统计的芯片可以肉眼看见是个 i2c 芯片 (hk)24c02 是 24c02
系列,在嘉立创看大概2毛一个淘宝店家成品卖2-8元不等
看具体 PCB 走线可以看到连接了 GND
VCC
SCL
SDA
四根,其它角位似乎被接地(GND
)处理了。
然后注意到还有个 WP
脚位 不出意外就是 Write Protection
也就是写保护,所以我们只需要把 WP 线与底座(GND
)断联然后弄一坨锡和 VCC
相连即可开启写保护,也就是数据永远不会变了。
吐槽 hk(航顺)给的 datasheet 根本就没有介绍芯片的其它脚位的功能,导致折腾了半天。
打了200张测试,硒鼓没有减少,应该是成功了:
完
编程器姿势
材料:
- 电烙铁
- 一坨锡
- 一些线(改只读不需要)
- CH341(如果只改成只读不需要,反正我用的是 CH341)
- AsProgrammer(改只读不需要)
- 洗板水(最好有)
- 面包板(可以有)
- 精湛手工活经验(手不会抖)
观察芯片结构,发现是个 i2c 芯片(发现过程略)
然后手上刚好有个 CH341 编程器,可以用编程器读 i2c 内容:
(图中有 SDA / SCL 也就是 i2c 部分读取脚位,供电使用系统送的 3.3v 即可)
hk(航顺)给的 datasheet 的 no connect 并不是 N/A 的意思,还是有点功能的,如果不想把芯片拆下来需要把接地的几个脚位干掉才能用编程器读取:
防呆点在左上角,按顺序把这些点一一对应就可以读取了。
在 AsProgrammer 先选芯片型号,然后点读取:
读出来的数据参考(大概是满的数据):
❯ binwalk -W Downloads/100.bin
0x00000000 32 00 C0 05 02 01 03 00 00 00 37 30 31 36 32 32 |2.........701622|
0x00000010 15 12 4D 4A 68 00 12 35 00 00 00 00 14 14 05 21 |..MJh..5.......!|
0x00000020 59 30 38 36 4D 33 30 30 32 38 30 20 64 30 00 00 |Y086M300280.d0..|
0x00000030 60 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |`...............|
0x00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0x00000050 00 00 00 00 00 00 00 00 14 0E 05 1B 00 00 00 00 |................|
0x00000060 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 |................|
0x00000070 90 13 00 00 00 00 64 07 00 00 00 00 00 00 00 00 |......d.........|
0x00000080 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x00000090 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000A0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000D0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000E0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
# binary
3200C00502010300000037303136323215124D4A680012350000000014140521593038364D333030323830206430000060100000000000000000000000000000000000000000000000000000000000000000000000000000140E051B000000000000000000000000020000000000000090130000000064070000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
如果你的芯片已经计数已经耗尽可以通过编程器重新刷回去。
以下是我本地已经空硒鼓的数据:
❯ binwalk -W Downloads/空的.bin
OFFSET Downloads/空的.bin
--------------------------------------------------------------------------------
0x00000000 32 00 C0 05 02 01 03 00 00 00 37 30 31 36 32 32 |2.........701622|
0x00000010 15 11 4D 4A 68 13 79 23 00 00 00 00 14 14 05 21 |..MJh.y#.......!|
0x00000020 59 30 38 36 4D 33 30 30 32 38 30 20 00 45 00 00 |Y086M300280..E..|
0x00000030 5F 10 00 00 00 00 00 00 18 10 00 00 00 00 00 00 |_...............|
0x00000040 66 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |f...............|
0x00000050 00 00 00 00 00 00 00 00 14 0E 05 1B 14 0E 05 1B |................|
0x00000060 00 00 00 00 00 00 00 00 D9 02 00 00 00 00 00 00 |................|
0x00000070 01 73 2B 00 3F 00 00 1A 00 00 00 00 00 00 00 00 |.s+.?...........|
0x00000080 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x00000090 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000A0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000D0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000E0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
0x000000F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
# binary
3200C00502010300000037303136323215114D4A681379230000000014140521593038364D33303032383020004500005F100000000000001810000000000000660600000000000000000000000000000000000000000000140E051B140E051B0000000000000000D90200000000000001732B003F00001A0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
打了一次的数据:
3200C00502010300000037303136323215124D4A680012350000000014140521593038364D333030323830206430000060100000000000000000000000000000010000000000000000000000000000000000000000000000140E051B000000000000000000000000030000000000000007240000000064520000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
希望对你的折腾有点帮助。
结尾
在折腾的过程中,我一度以为是 PCB 上的电容电阻干扰了编程器读取芯片的数据,可实际上是我错了想太多,是有脚位不让编程器直接读取数据。
还有这是我第一次折腾这么底层的玩意,还是挺激动的,虽然电子专业知识 = 0 只会乱猜吃了不少苦头(
然后就是理论上
C8300N、C8700DN、CS1811、CS2310、CS3310、MC8300DN、CS2010DW、CF2090DWA、LJ1680、LJ2208(W)、LJ4010DN、S2002、S2003W、S2201、M2041、F2072、F2271H、M2251、M7025、M7105、M7125、M7150F、M7208(W)、M8960DNF、LJ6000、LJ6100、LJ6150、LJ6300、LJ6350、LJ6350D、LJ6350DN、LJ6500(n)、LJ6600(N)、LJ6503、LJ6700DN、LJ7600N、LJ7800N、LJ3303DN、LJ3803DN
这些机型大概也也适用,如果要折腾的话建议看一下计数器 PCB 上的芯片是不是同款即可,不是同款估计也只是个 i2c 芯片,对应找一下教程即可。
最后感谢朋友帮我焊了四五次芯片,眼睛快瞎了!
完