выдрать tiff из бинарника
давай бинарник 

Попробуй ResHacker или Resource Extractor из TC
бинарник имеется ввиду не exe'шникне, ну я так не играю

запрос к гуглу дал первый результат
Detailed information for file extension TPS:Hex совпал
Primary association: Clarion for Windows
Company: SoftVelocity
File classification: Database
Identifying characters Hex: 00 00 00 00 00 02 00 , ASCII:
Related links: Clarion Magazine, Clarion Information
он и есть. так как ебучий клэрион не поддерживается хуй знает сколько, данные выдрать стандратными способами (утилитами клэрион) не получается, то хоть каким-то образом
что же ты об этом в первом посте не написал?
тут уже одним ковырянием в ресурсах не обойтись
так что я умываю руки)
тут уже одним ковырянием в ресурсах не обойтись
так что я умываю руки)
вот тебе метод тупо в лоб:
хекс-редактором открываем первый попавшийся tif-файл на компе.
видим первые 4 байта: 49 49 2A 00
предполагаем что это сигнатура tif.
предполагаем что данные в кларионовской базе хранятся как есть без кодирования и сжатия и тиф-файлы следуют один за другим.
ищем сигнатуру. находим. запоминаем смещение. ищем следующую. запоминаем смещение. выделяем кусок файла от первого смещения до второго и сохраняем с расширением tiff.
?
PROFIT!
вот первый такой фрагмент (сделано в линуксе редактором okteta)
хекс-редактором открываем первый попавшийся tif-файл на компе.
видим первые 4 байта: 49 49 2A 00
предполагаем что это сигнатура tif.
предполагаем что данные в кларионовской базе хранятся как есть без кодирования и сжатия и тиф-файлы следуют один за другим.
ищем сигнатуру. находим. запоминаем смещение. ищем следующую. запоминаем смещение. выделяем кусок файла от первого смещения до второго и сохраняем с расширением tiff.
?
PROFIT!
вот первый такой фрагмент (сделано в линуксе редактором okteta)
т.е. получается все тифф файлы идут тупо один за другим? между ними нет левых данных?
гарантий дать не могу, беглый гуглинг не дал сколь нибудь человеческого описания формата tiff поэтому длину файла из заголовка не знаю как вытащить. но даже если есть левые данные, они оказываются в хвосте файла и на отображение вроде как не влияют. можно пересохранить потом гимпом каждый файл, чтобы он мусор проигнорировал и чистенький файл сделал.
спасибо. это подтверждает теорию что наши конкуренты хранили картинки тупо в бинарном формате
я тоже сегодня искал какое-нибудь описание тиффа, чтобы автоматизировать это дело, но нашел только полную спецификацию.
я тоже сегодня искал какое-нибудь описание тиффа, чтобы автоматизировать это дело, но нашел только полную спецификацию.
ну а как еще ты картинку в базу пихнешь? или там есть тип специальный или тупо BLOB. тут еще повезло что сама база не пыталась сжимать или кодировать как-то.
можно в алгоритме пихания в базу все байтики сделать +1 mod 256 - и радоваться когда конкуренты (т.е. мы) пытаются экспортировать тиффки из базы.
clarion- это не та база данных, в которых есть запросы типа sql. тут, как я понял, все данные ассоциируются с полями программы. поэтому там как раз такое можно было провенуть.
clarion- это не та база данных, в которых есть запросы типа sql. тут, как я понял, все данные ассоциируются с полями программы. поэтому там как раз такое можно было провенуть.
сейчас попробовал 2-й по счету тиф вытащить - не все так безоблачно. он не открывается. так что кури полную спецификацию =)
тем же способом?
я так понимаю что эта сигнатура может еще внтури тифф файла встречаться - ты видимо подхватил внутреннюю
я так понимаю что эта сигнатура может еще внтури тифф файла встречаться - ты видимо подхватил внутреннюю
тем же способом, но следующий участок. да, видимо это я в пиксел такого цвета "вляпался" или еще во что.
написал простенькую программку:
которая берет ищет побайтно сигнатуру, создает новый файлик и пишет в него с текущей позиции до конца - оно у меня нахреначило 20 гигабайт за 10 минут работы.
половина тифок правда не открывалась - это видимо все таки внутренности тифа. узнать бы как-нибудь ограничение снизу чтоли на тифку.
a = open("/Users/oberon/tmp/DCD00590.TPS").read
for i in xrange(len(a)-4):
if ord(a[i]) == 0x49 and ord(a[i+1]) == 0x49 and ord(a[i+2]) == 0x2a and ord(a[i+3]) == 0x00:
b = open("/Users/oberon/tmp/" + str(i) + ".tif","w")
b.write(a[i:])
b.close
которая берет ищет побайтно сигнатуру, создает новый файлик и пишет в него с текущей позиции до конца - оно у меня нахреначило 20 гигабайт за 10 минут работы.
половина тифок правда не открывалась - это видимо все таки внутренности тифа. узнать бы как-нибудь ограничение снизу чтоли на тифку.
magic numbers гворит что нельзя )
метод пристального взгляда показал, что следующие 4 байта после означеной сигнатуры - это длина файла уменьшенная на 186 = 0xBA байт =)
upd
то есть можно запоминать следующие 4 байта после сигнатуры и при нахождении очередной проверять что offs_current_match-offs_prev_match = int *offs_prev_match+4*+186. как-то так.
upd
то есть можно запоминать следующие 4 байта после сигнатуры и при нахождении очередной проверять что offs_current_match-offs_prev_match = int *offs_prev_match+4*+186. как-то так.
гм, а откуда взялось 186?)
думаю это стандартный размер заголовка tif. и типа первое поле после сигнатуры в заголовке - суммарная длина всех данных, исключая заголовок конечно.
а что это за язык? python?
угу
исправил программку:
с учетом вышесказанного. теперь файлики отображаются и меньше размером. сейчас еще доделаю смещение указателя чтобы не было битых тифок
a = open("/Users/oberon/tmp/DCD00590.TPS").read
for i in xrange(len(a)-4):
if ord(a[i]) == 0x49 and ord(a[i+1]) == 0x49 and ord(a[i+2]) == 0x2a and ord(a[i+3]) == 0x00:
len_ = ord(a[i+4])*(16**3) + ord(a[i+5])*(16**2) + ord(a[i+6])*16 + ord(a[i+7])
b = open("/Users/oberon/tmp/" + str(i) + ".tif","w")
b.write(a[i:i+len_])
b.close
с учетом вышесказанного. теперь файлики отображаются и меньше размером. сейчас еще доделаю смещение указателя чтобы не было битых тифок
у меня получилось 1090 tif
тут
сделал таким скриптом
зы: напряг меня первый байт в блобе. его пришлось отрезать
тут
сделал таким скриптом
dim objConn, strSQL
set objConn=CreateObject ("ADODB.connection")
objConn.ConnectionString="DSN=MyTPS"
objConn.Open
set objRS=CreateObject ("ADODB.Recordset")
strSQL= "SELECT * FROM UNNAMED"
set rs = objConn.Execute(strSQL)
Dim i
i = 0
do while not rs.Eof
Set st = CreateObject ("ADODB.Stream")
st.Type = 1
st.Open
WScript.Echo rs.Fields(5).ActualSize
st.Write rs.Fields(5).Value
i = i + 1
st.Position = 1
Set stCopy = CreateObject ("ADODB.Stream")
stCopy.Type = 1
stCopy.Open
st.CopyTo stCopy
stCopy.SaveToFile "tif_folder/blob" & i & ".tif", 2
stCopy.Close
st.Close
rs.MoveNext
loop
зы: напряг меня первый байт в блобе. его пришлось отрезать

блин, не получается доделать смещение нормально. потому что тогда если в первый раз будет не тиффка а какая-то левая информация произойдет неверное смещение
теперь посмотри какой процент из них действительно является тифом )
теперь посмотри какой процент из них действительно является тифом )уже видел)
теперь ты посмотри)
dim objConn, strSQLэто что такое? неужели ты общаешься с этим файлом как с тпской?
set objConn=CreateObject ("ADODB.connection")
objConn.ConnectionString="DSN=MyTPS"
objConn.Open
set objRS=CreateObject ("ADODB.Recordset")
strSQL= "SELECT * FROM UNNAMED"
set rs = objConn.Execute(strSQL)
все верно, избежать битых тифок при таком способе не удастся, иначе есть шанс пропустить несколько вхождений или даже все.
у меня довольно маленький процент. неужели у тебя все нормальные тиффы?
теперь посмотри какой процент из них действительно является тифом )боюсь, у него все являются тифом. он, читер, как базу открыл.
это что такое? неужели ты общаешься с этим файлом как с тпской?ну гугл же сказал, что это база данных
нафига ее реверсить, если можно через ODBC отдрючить?

ну хотелось бы иметь возможность проверять действительно ли это тиффка)
бля, а ты можешь мне выдрать оттуда тупо все данные и конвертануть это в ms sql или что-то похожее? )
я этот ебаный odbc driver для tps заебался искать.
я этот ебаный odbc driver для tps заебался искать.
а ты драйвер ставил дополнительно или ODBC само умеет такое открывать?
вот меня тоже удивило. по идее там есть odbc driver, но его днем с огнем не сыщешь.
ты драйвер ставил дополнительноставил
гугл мне нашел его

да епш. где?
ты можешь сделать о чем я писал выше? )
ты можешь сделать о чем я писал выше? )
бля, а ты можешь мне выдрать оттуда тупо все данные и конвертануть это в ms sql или что-то похожее? )вы, конечно, крайне нескромны
тут
зы: первый столбец - это номер соответсвующего blob*.tif файла
джойните сами с этими tif-ами, ато меня на работе убьют за такой трафик =)
а можно еще инструмент? каокй-нибудь бинарник, которому на вход имя файла, а на выход папочка? )
просто таких файликов штук 200
буду ОЧЕНЬ благодарен)
просто таких файликов штук 200
буду ОЧЕНЬ благодарен)
а что насчет инструмента? )
а что насчет инструмента? )давайте тоже поработайте!
а я домой пойду=)
да я под винду ни разу в жизни не писал )
под odbc тем более. легче написать клиент по описанию tps файла, но это займет порядочно времени.
под odbc тем более. легче написать клиент по описанию tps файла, но это займет порядочно времени.
не буду оригинален - тебе надо распарсить все теги тифа . тифф он такой, в одном файле может 20 изображений быть.
на перле какомннить или на шелле
на перле какомннить или на шелле
http://www.digitalforensicssolutions.com/Scalpel/
выдает те же 1090 файлов
содержимое не сравнивал, но вроде похоже
выдает те же 1090 файлов
содержимое не сравнивал, но вроде похоже
он работает по тому же принципу, как и упоминавшиеся в этом треде питонные скрипты =)
4Gb ему не хватает для результата
из всех полученных 448 tif валидные только 4 (смотрятся только первый, пятый, шестой и седьмой)
4Gb ему не хватает для результата
из всех полученных 448 tif валидные только 4 (смотрятся только первый, пятый, шестой и седьмой)
E:\Scalpel\scalpel-1.60>scalpel.exe -o f:/resultDir ../DCD00587.TPS
Scalpel version 1.60
Written by Golden G. Richard III, based on Foremost 0.69.
Opening target "E:\Scalpel\DCD00587.TPS"
Image file pass 1/2.
../DCD00587.TPS: 21.0% |**************** | 10.0 MB
../DCD00587.TPS: 41.9% |********************************* | 20.0 MB
../DCD00587.TPS: 62.9% |************************************************** | 30.0 MB
../DCD00587.TPS: 83.8% |******************************************************************** | 40.0 MB
../DCD00587.TPS: 100.0% |**********************************************************************************| 47.7 MB
Allocating work queues...
Work queues allocation complete. Building carve lists...
Carve lists built. Workload:
tif with header "\x49\x49\x2a\x00" and footer "" --> 1090 files
tif with header "\x4d\x4d\x00\x2a" and footer "" --> 0 files
Carving files from image.
Image file pass 2/2.
../DCD00587.TPS: 21.0% |**************** | 10.0 MB
../DCD00587.TPS: 41.9% |********************************* | 20.0 MB
../DCD00587.TPS: 62.9% |************************************************** | 30.0 MB
Error writing to file: f:\resultDir/tif-0-0/00000118.tif -- Broken pipe
Scalpel was unable to write output files and will abort.
This error generally indicates that disk space is exhausted.
он работает по тому же принципу, как и упоминавшиеся в этом треде питонные скрипты =)Да я и не спорю
Я какбэ намекаю, что такого рода вещи уже давно сделаны 
Что вывод битый - возможно, я особо с ним не колупался. Поставил, прогнал, посмотрел первый - картинка.
Вообще метод выдирания файлов по "похожести" достаточно хороший, я в некоторый момент
восстанавливал базу мускльную, ошибка была порядка трех процентов. Правда, я там записи вынимал,
а не файлы.
да хрен с ним с тиффом, тепреь интересно как выдрать hidden rows в бд через odbc driver
Оставить комментарий
BILL64
кто может подсказать как из бинарного файла выдрать все изображения в формате tiff?бинарник имеется ввиду не exe'шник, а бинарный файлик, в котором где-то хранятся тиффки