Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)

Модерирует : gyra, Maz

Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

ynbIpb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
; AutoIt Version: 3.3.1.1 (beta)
; Author: упырь
; экстрактор файлов архивов с заголовком: SM2MPX10
;- заголовок -
;8 байт - заголовок 'SM2MPX10'
;4 байта - количество файлов в архиве
;4 байта - размер заголовка, включая секции таблицы
;12 байт - внутренняя метка. имя файла архива
;4 байта - размер заголовка? всегда равен 32 байта
;- таблица -
;12 байт - имя файла в формате DOS. если длинней, обрезается
;4 байта - оффсет файла в архиве
;4 байта - размер файла
;- пустышка -
;4 байта - нули. не считаются в размере, указываемом в заголовке.
;- данные -
;-----------------------------------------------------------

$file = FileOpen (@ScriptDir & "\GRP", 16); открываем для чтения в бинарном режиме
$head = FileRead ($file, 8)
$head_str = BinaryToString ($head)
; определяем количество файлов в архиве
$kolichestvo = FileRead ($file, 4)
$01 = StringMid($kolichestvo, 9, 2)
$02 = StringMid($kolichestvo, 7, 2)
$03 = StringMid($kolichestvo, 5, 2)
$04 = StringMid($kolichestvo, 3, 2)
$perevernutoe = $01&$02&$03&$04
$dec_colich
= Dec ($perevernutoe)
; определяем размер заголовка с таблицами
$razmer_zagolovka = FileRead ($file, 4)
$01 = StringMid($razmer_zagolovka, 9, 2)
$02 = StringMid($razmer_zagolovka, 7, 2)
$03 = StringMid($razmer_zagolovka, 5, 2)
$04 = StringMid($razmer_zagolovka, 3, 2)
$perevernutoe = $01&$02&$03&$04
$dec_razmer
= Dec ($perevernutoe)
$dec_razmer -= 32; отнимаем 32 байта заголовка
; читаем таблицу целиком

FileSetPos ($file, 32, 0); ставим каретку на начало файла
$table = FileRead ($file, $dec_razmer)
$filename = BinaryMid ($table, 1 , 12); читаем имя первого файла
$filename_str = BinaryToString ($filename)
$filename_str = StringReplace ($filename_str, BinaryToString ("0x00"), ""); удаляем нулевые байты
$file_offset = BinaryMid ($table, 13 , 4);читаем оффсет файла в архиве
$01 = StringMid($file_offset, 9, 2)
$02 = StringMid($file_offset, 7, 2)
$03 = StringMid($file_offset, 5, 2)
$04 = StringMid($file_offset, 3, 2)
$file_offset = "0x"&$01&$02&$03&$04
$dec_file_offset
= Dec ($01&$02&$03&$04)
$file_size = BinaryMid ($table, 17 , 4);читаем размер файла
$01 = StringMid($file_size, 9, 2)
$02 = StringMid($file_size, 7, 2)
$03 = StringMid($file_size, 5, 2)
$04 = StringMid($file_size, 3, 2)
$file_size = $01&$02&$03&$04
$dec_file_size
= Dec ($file_size)
FileSetPos ($file, $dec_file_offset, 0); ставим каретку на начало файла внури архива
$file_inside = FileRead ($file, $dec_file_size)
$file_unpacked = FileOpen (@ScriptDir & "\" & $filename_str, 18)
FileWrite ($file_unpacked, $file_inside)
FileClose ($file_unpacked)
FileClose ($file)
MsgBox (0, "SM2MPX10 Extractor v 0.1", "Заголовок: "& $head_str&@CRLF _
&
"количество файлов: "&$dec_colich&@CRLF&"Размер таблицы: "&$dec_razmer&" байта"&@CRLF _
&
"имя файла: "& $filename_str&@CRLF&"оффсет файла в архиве: "&$file_offset&@CRLF _
&
"размер файла: "&$dec_file_size&" байт")

Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 01:24 02-10-2009 | Исправлено: ynbIpb, 14:30 02-10-2009
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)
Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru