LINUX.ORG.RU

реверс-инжиниринг формата данных принтера lbp2900-3000


0

0

мы (я с http://www.linux.org.ru/whois.jsp?nick=HighwayStar) пытаемся написать нормальный драйвер для этих говнопринтеров и столкнулиь проблемой, формат данных совершенно не ясен, ниже приведу несколько дампов, может кто что поймёт :-)

Квадратик один на один пиксел
2x1
3x1
полоска 64x1, последний пиксел чёрный, начальные — белые
(полей нигде нет, первый пакет очевидно некий заголовок, данные идут со второго, a0 c0 — команда «печатать!», потом два байта — скорее всего размер)

А виндовый драйвер реверсить не пробовали? Нередко бывает проще, чем данные.

proud_anon ★★★★★ ()

Да и потом, разве к ним драйвера под Linux нет?

proud_anon ★★★★★ ()
Ответ на: комментарий от proud_anon

есть, но работает только во вторую четверть луны когда из /dev/urandom выпадает килобайтовое простое число

Artificial_Thought ★★★★ ()
Ответ на: комментарий от Artificial_Thought

А поставить нужное время, поменять /dev/urandom на выдачу какого-нибудь килобайтового простого числа и реверснуть этот драйвер под Линукс не пробовали?

(хотя под винду и исследований больше, и утилит, так что под нее, возможно, было бы проще)

proud_anon ★★★★★ ()

>a0 c0 — команда «печатать!», потом два байта — скорее всего размер

У них у всех вторые два байта 34h 53h. Надо было хоть варианты предоставить с разными размерами.

proud_anon ★★★★★ ()

Искренне желаю вам успеха, эта дрянья действительно работает через раз.

mclaudt ()
Ответ на: комментарий от proud_anon

>У них у всех вторые два байта 34h 53h. Надо было хоть варианты предоставить с разными размерами

вторые два байта это размер всех данных отправляемых следом, это совершенно точно известно

HighwayStar ★★★★★ ()

Особо не чем не помогу. Там через несколько строк после начала идёт все время повтор последовательности:

bf f4 94 bd 18 a8 bc 6e b6 bc d5 b9 bc 88 3e 3c a6 fd fc b1 9c 1c ba 2c ec

эта последовательность как то должна превращаться в кучу нулей. Может попробовать определить сколько реально пикселей в строке он печатает, допустим создать файл со строками --- в черные пиксели в первой позиции и в 4600, 4650 и т.д. (если исходить из 600 dpi и A4).

И ещё, дампы получаются идентичными по содержимому, зависимости от фазы луны нет?

mky ★★★★★ ()
Ответ на: комментарий от mky

дампы идентичные получаются если печатать одно и то же, последовательность 3c a6 fd fc b1 9c 1c ba 2c ec bf f4 94 bd 18 a8 bc 6e b6 bc d5 b9 bc 88 3e явно белый цвет, да

Artificial_Thought ★★★★ ()
Ответ на: комментарий от Artificial_Thought

А приведённые выше дампы для A4? А какую максимальную ширину бумаги поддерживает драйвер?

mky ★★★★★ ()

Хм... Вроде же на сайте Canon есть исходники драйвера под эти принтеры. Может проще исходники поковырять? Я как-то пробовал их собрать под amd64 - не вышло =).

http://software.canon-europe.com/software/0028622.asp

Deleted ()
Ответ на: комментарий от Deleted

самое вкусное (то, что мы разбираем) там в бинарнике (что-то-там-capt/libs/captfilter, если его запускать с опциями --CNTblHalftone=3 --CNTblModel=1 --PageSize=A4 --MediaType=PlainPaper --InputSlot=0 --Collate=False --Resolution=100 --CNTonerSaving=False, то он генерит принтерочитаемый бинарник), думаю, надо бинарник попробовать разобрать

Artificial_Thought ★★★★ ()
Ответ на: комментарий от Deleted

>Хм... Вроде же на сайте Canon есть исходники драйвера под эти принтеры. Может проще исходники поковырять? Я как-то пробовал их собрать под amd64 - не вышло =).

там исходники только для всякой ерунды, сам аглгоритм сжатия битмапов для принтера в бинарниках

HighwayStar ★★★★★ ()
Ответ на: комментарий от Artificial_Thought

самое вкусное (то, что мы разбираем) там в бинарнике

Вот жеж гады то... И не понятно зачем тогда вообще часть исходников выложили... Для отвода глаз?

Deleted ()
Ответ на: комментарий от Deleted

> Я как-то пробовал их собрать под amd64 - не вышло =).

У меня вышло. Давно это было - больше года назад, поэтому почти все забыл. Но помню, что было много гуглинга, чуть ли не 2 дня потратил. Сейчас принтер с теми драйверами еще печатает даж, правда при подключении на горячую приходится перезапускать ccpd.

du_hast ()

О!! Маладцы.

Распотрошите уже этот ужас. Вчерась только тр^^настраивал это гуано.

RaDiSt ()

Что за публичный онанизм?

Вы пробовали связаться с производителем кэнона и попросить часть доков под NDA? Судя по всему, вы даже не пробовали.

Какой смысл выкладывать 4-ые маленьких сэмпла? Вы думаете, что прибегут анонимусы и всё за вас сделают, не имея ни железа, ничего?

Если вы уверенны, что принтеру посылается растр, то почему вы сосредоточились на таких маленьких сэмплах? Служебных данных в таких примерах куда больше, чем самого растра. Попробуйте печать что-то побольше, и менять «наугад» байтики и наблюдать за результатом. Кроме обладателей железа такое повторить никто не сможет, так что дерзайте.

И да, я правильно понимаю, что вы вкурсе про основные алгоритмы сжатия и вы знакомы с основами криптографии, ведь так?

anonymous ()
Ответ на: комментарий от anonymous

>Кроме обладателей железа такое повторить никто не сможет, так что дерзайте.

в том то и дело что сейчас удалось выяснить какая утилита делает набор команд для печати

собственно captfilter с параметрами что написаны выше.

его можно запустить и получить кодированный файл и без специфического железа

Если бы Кенон хотел поделиться спеками, то он скорее бы открыл существующий драйвер для того, чтобы его кто-то допилил

HighwayStar ★★★★★ ()
Ответ на: комментарий от HighwayStar

> его можно запустить и получить кодированный файл и без специфического железа

Отлично, и как декодировать файл предлагаешь? Посылать его тебе и ждать ответа? Это глупо и долго.

Если бы Кенон хотел поделиться спеками, то он скорее бы открыл существующий драйвер для того, чтобы его кто-то допилил

кодом != спеками, пиши письмо в саппорт с описанием проблемы. Вариант 1) они пофиксят обозначенные баги 2) тебе могут дать часть спеков под NDA 3) могут заигнорить/послать. Имхо первые варианты стоит попробовать, прежде чем заниматься попытками реверсинжиниринга. Если только у вас не самоцель засветиться и повысить ЧСВ :)

anonymous ()
Ответ на: комментарий от anonymous

>Отлично, и как декодировать файл предлагаешь? Посылать его тебе и ждать ответа? Это глупо и долго.

так декодированный файл вообще-то на входе captfilter так что после его использования у тебя будет исходный файл-pgm и файл с командами протокола capt, которые нарисуют на бумаге содержимое этого рисунка

anonymous ()
Ответ на: комментарий от Artificial_Thought

А что ему надо подавать на вход, этому captfilter? И как?

И главное, получается, что captfilter работает, а проблемы с нестабильной печатью связаны с другим?

mky ★★★★★ ()
Ответ на: комментарий от mky

>А что ему надо подавать на вход, этому captfilter? И как?

последним аргументом должен буть файл в формает pgm, для страницы A4 при dpi=600 должен весить порядка 31Мб

HighwayStar ★★★★★ ()
Ответ на: комментарий от mky

нестабильность раюоты исходит из ccpd, который вообще непонятно для чего нужен

Artificial_Thought ★★★★ ()
Ответ на: комментарий от HighwayStar

PGM, который начинается с P5 или с P2? И сколько градаций серого? Разрешение pgm для A4? Если знать разрешение, том можно будет, предположив что сжатие идёт только по строкам, попробовать понять, какому кол-ву строк соответствует последовательность «bf f4 94 bd ...».

Странно, что pgm, принтер то вроде чёрно-белый. Или он способен печатать градации серого и отсуюда в описании что-то про разрешение 2400x600 dpi?

mky ★★★★★ ()
Ответ на: комментарий от du_hast

А как именно? :)

У меня затык на самой начальной стадии. Дрова тупо не собираются, а найденные пакеты требуют такие библиотеки, о которых не знает yum provides. Fedora 12 x86_64.

ilu ()
Ответ на: А как именно? :) от ilu

Как я уже сказал, я не помню подробностей :) Но здесь есть ебилды, в которых в зависимостях для cndrvcups-capt для x86_64 указаны cups-1.1.17, ghostscript-gpl, emul-linux-x86-gtklibs-2.0, emul-linux-x86-baselibs-10.0-r1. Попробуй найти эти пакеты в федоре. Там же, в ебилдах есть ссылки на исходники (щас вроде большинство используют версию 1.80_p1).

du_hast ()
Ответ на: комментарий от du_hast

Спасибо, но я уже заставил его работать. http://fedoraforum.org/forum/showthread.php?t=240307
Единственное, да, как Вы сказали, он требует перезапуска ccpd после переподключения принтера, и `captstatusui (-e) -P <имя принтера>` — свой монитор заданий, а без него почему-то не работает. %)

ilu ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.