выдрать 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)
т.е. получается все тифф файлы идут тупо один за другим? между ними нет левых данных?
гарантий дать не могу, беглый гуглинг не дал сколь нибудь человеческого описания формата tiff поэтому длину файла из заголовка не знаю как вытащить. но даже если есть левые данные, они оказываются в хвосте файла и на отображение вроде как не влияют. можно пересохранить потом гимпом каждый файл, чтобы он мусор проигнорировал и чистенький файл сделал.
я тоже сегодня искал какое-нибудь описание тиффа, чтобы автоматизировать это дело, но нашел только полную спецификацию.
ну а как еще ты картинку в базу пихнешь? или там есть тип специальный или тупо BLOB. тут еще повезло что сама база не пыталась сжимать или кодировать как-то.
clarion- это не та база данных, в которых есть запросы типа sql. тут, как я понял, все данные ассоциируются с полями программы. поэтому там как раз такое можно было провенуть.
сейчас попробовал 2-й по счету тиф вытащить - не все так безоблачно. он не открывается. так что кури полную спецификацию =)
я так понимаю что эта сигнатура может еще внтури тифф файла встречаться - ты видимо подхватил внутреннюю
тем же способом, но следующий участок. да, видимо это я в пиксел такого цвета "вляпался" или еще во что.
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 гворит что нельзя )
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
с учетом вышесказанного. теперь файлики отображаются и меньше размером. сейчас еще доделаю смещение указателя чтобы не было битых тифок
тут
сделал таким скриптом
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 отдрючить?
ну хотелось бы иметь возможность проверять действительно ли это тиффка)
я этот ебаный odbc driver для tps заебался искать.
а ты драйвер ставил дополнительно или ODBC само умеет такое открывать?
вот меня тоже удивило. по идее там есть odbc driver, но его днем с огнем не сыщешь.
ты драйвер ставил дополнительноставил
гугл мне нашел его
ты можешь сделать о чем я писал выше? )
бля, а ты можешь мне выдрать оттуда тупо все данные и конвертануть это в ms sql или что-то похожее? )вы, конечно, крайне нескромны
тут
зы: первый столбец - это номер соответсвующего blob*.tif файла
джойните сами с этими tif-ами, ато меня на работе убьют за такой трафик =)
просто таких файликов штук 200
буду ОЧЕНЬ благодарен)
а что насчет инструмента? )
а что насчет инструмента? )давайте тоже поработайте!
а я домой пойду=)
под odbc тем более. легче написать клиент по описанию tps файла, но это займет порядочно времени.
теги тифа . тифф он такой, в одном файле может 20 изображений быть.
на перле какомннить или на шелле
не буду оригинален - тебе надо распарсить все на перле какомннить или на шелле
http://www.digitalforensicssolutions.com/Scalpel/
выдает те же 1090 файлов
содержимое не сравнивал, но вроде похоже
выдает те же 1090 файлов
содержимое не сравнивал, но вроде похоже
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'шник, а бинарный файлик, в котором где-то хранятся тиффки