|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Ivan Kovalenko 2:5057/53 20 Jan 2003 13:58:59 To : All Subject : Flash-ролики в формате exe --------------------------------------------------------------------------------
(cut: exe2swf)
#!/usr/bin/php -q
<?php
function swfout() {
// Пишем swf-файлик
global $argv, $stream, $i;
echo "Writing {$argv[2]}\n";
$swf = fopen($argv[2], 'w') or die();
fwrite($swf, substr($stream, $i));
fclose($swf);
return;
}
function seeksig($sig) {
global $i, $argv;
// Сравниваем последовательность с сигнатурой.
if ($sig == "\x46\x57\x53\x05") {
// Если сигнатура найдена, пишем swf и вываливаемся в shell.
echo "Signature found at offset " . dechex($i) . "\n";
swfout();
exit();
}
return;
}
if (!$argv[1]) {
echo "Usage: {$argv[0]} file.exe [file.swf]\n";
exit();
}
if (!$argv[2]) $argv[2] = substr($argv[1], 0, strrpos($argv[1], '.')) .
".swf";
chdir($_ENV['PWD']);
// Hаиболее часто встречающиеся смещения сигнатуры
$sigofs = array(0x5c000, 0x2ea00, 0xc6000, 0xc8000, 0x2e600, 0xb7000,
0x5f000);
$exe = fopen($argv[1], 'r') or die();
$stream = fread($exe, filesize($argv[1]));
fclose($exe);
echo "Seeking for signature in {$argv[1]}\n";
// Сначала поищем по часто встречающимся смещениям
foreach($sigofs as $i) seeksig(substr($stream, $i, 4));
// Если сигнатура до сих пор не найдена, ищем ее с конца файла
// Точнее, с конца строки с образом файла
for ($i = strlen($stream); $i >= 0; $i--) seeksig(substr($stream, $i,
4));
?>
(cut)
Оптимизации тут совсем чуть-чуть, так что: а) конвертилка немного
тормозит на файлах с сигнатурами, расположенными по смещениям,
отсутствующим в $sigofs; б) простор для фантазии не ограничен.
--
You may keep silence
Playing "Hi-Fi - Пионер (Ремикс) (0:50)"
--- ifmail v.2.15.b2.ext
* Origin: t-ronic at mail dot ru (2:5057/53@fidonet)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/12907ae81bc05.html, оценка из 5, голосов 10
|