Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

15.12.2007, 07:16
|
|
Members of Antichat - Level 5
Регистрация: 02.11.2006
Сообщений: 781
Провел на форуме: 5939734
Репутация:
1917
|
|
да куда проще было бы не "реверсить" и изучать устройство каталога, а просто выводить подстроки состоящие из печатаемых символов. просто возможен вариант, что к примеру атрибуты файла (права, время модификации и тп) представленные в бинарном виде, буду содержать то что ты ищешь и на что парсишь, хотя конечно врядли..
Хм, насколько я знаю, что в файле каталога нет информации о правах доступа файлов которые в нем находятся,в нем имена и ссылки на физическое месторасположение (ну и еще что то).
Насчет вывода подстрок из печатающих символов, тогда будет много мусора, потому что "служебные" байты принимают значения такие же как и печатаемые символы, если выделять подстроку как несколько подряд идущих петатаемых символов, то файлы и каталоги состоящие из одного символа выводиться не будут,к тому же не будет возможности определить является это файлом или каталогом.
Насчет самого парсинга и поиска, я думаю, той ситуации которую ты описал не возникнет (я думал об этом). Там видишь какая фигня, сначала ищется байт со значением 04h или 08h проверяется следующий за ним байт, является ли он меньше 0Fh и идет проверка является ли идущий за этими двумя байтами байт печатаемым символом... надеюсь ты понял что я хотел сказать,а то я че то понаписал и сам не совсем понял 
__________________
Карфаген должен быть разрушен...
|
|
|

15.12.2007, 16:25
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
>>Хм, насколько я знаю, что в файле каталога нет информации о правах доступа файлов
>>которые в нем находятся,в нем имена и ссылки на физическое месторасположение (ну
>>и еще что то).
да, щас немного поэксперемнтировал с жесткими ссылками оказалось, что права приписываются непосредственно к идентификатору файла.
>>Там видишь какая фигня, сначала ищется байт со значением 04h или 08h
>>проверяется следующий за ним байт, является ли он меньше 0Fh и идет проверка
>>является ли идущий за этими двумя байтами байт печатаемым символом...
все-таки реверсить нужно  я сейчас изучал методом тыка что пишется в каталог и оказалось, что там идет имя файла, его идентификатор, тип (обычный файл, каталог, символическая ссылка) и еще пара байт смысл которых мне пока не ясен, да и вообще не понятно зачем хранить тип файла когда это можно прикрепить непосредственно к inode.
вот програмка производящая вроде бы грамотный парсинг http://zaco.info/bsdir.cpp
интересно что идентификатор всегда выравнивается по машинному слову, а иногда программа выводит несуществующее файлы, причем идентификаторы которых, на первый взгляд вполне валидные.. я думаю определить удаленные файлы одним непосредственным парсингом каталога не удасться, нужно лезть в таблицу inode и смотреть есть ли там этот дескриптор или нет.
вообще конечно жалко, что бсд позволяет выполнять вызов open только с флагом O_RDONLY, иначе можно было бы много пакостей наделать 
|
|
|

16.12.2007, 04:33
|
|
Members of Antichat - Level 5
Регистрация: 02.11.2006
Сообщений: 781
Провел на форуме: 5939734
Репутация:
1917
|
|
ZaCo, не плохо, очень не плохо... но согласись, мой вариант имееет возможность для большей реализации на практике, т.к. именно в инете это находит свое практическое применение, и согласись вариант на пхп именно этот имеет место быть, насчет ссылок, в конечном итоге, я тоже нашел, что байт 0Ah-это символическая ссылка, просто не стал включать в скрипт, потому что чем больше значений, тем больше вероятность неправильного парсинга... я вот немного тебя непонимаю, наверное ты просто не в той последовательности рассказал, но насколько я понял, что первые три байта дискриптора файла или каталога отвечают именно за физическое место расположения, и по закону жанра справа на лево... а вобще по идее респект тебе ZaCo, и уважуха, только ты меня по нормальному понял, и поэкспериментировал, т.е. занялся тем, чем занимался я до создания этого топика... но еще раз хочу сказать спасибо Macro, он профессионал, его стоит уважать
__________________
Карфаген должен быть разрушен...
Последний раз редактировалось Scipio; 16.12.2007 в 04:49..
|
|
|

16.12.2007, 13:42
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
>>я вот немного тебя непонимаю, наверное ты просто не в той последовательности
>>рассказал, но насколько я понял, что первые три байта дискриптора файла или
>>каталога отвечают именно за физическое место расположения, и по закону жанра
>>справа на лево...
не совсем, идентификатор файл (он же дескриптор файла в файловой системе) это число, но само расположение файла, берется из таблицы inode (хотя по логике вещей это все-таки должно быть бинарное сбалансированное дерево для быстрого доступа к данным, просто так короче) ровно по этому идентификатору. а описание структуры содержимого каталога описано в struct DIR в bsdir.cpp. только нужно понимать, что все наши с тобой скрипты по-хорошему должны работать только в пределах одной фс ну или максимум совместимых.
--
и еще раз об выравнивании, если ты с++ не знаешь: сначала считывается структура DIR (inode - 4 байта, 2 байта не ясно чего, 1 байт - длина имени файла), далее само имя файла, а затем происходит скачок до ближайшего, кратного sizeof(int) (для gcc при стандартных настройках) адреса относительно начала данных.
Последний раз редактировалось ZaCo; 16.12.2007 в 13:52..
|
|
|

16.12.2007, 15:01
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
оказалось тут даже без выравнивание можно, заодно и смысл dontknow прояснился - длина текущего описания, в типе short int.
|
|
|

30.12.2007, 16:31
|
|
Members of Antichat - Level 5
Регистрация: 02.11.2006
Сообщений: 781
Провел на форуме: 5939734
Репутация:
1917
|
|
вот сделал поудобнее немного и сделал, чтоб он символические ссылки опознавал:
PHP код:
<html>
<head>
<title>Парсинг каталогов FreeBSD от Scipio</title>
</head>
<body>
<?php
error_reporting(0);
set_time_limit(0);
if (isset($_POST['pole'])){$pole=$_POST['pole']; $fl=file_get_contents($pole);} else $pole='';
?>
<form method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">
<input type="text" size="150" name="pole" value="<?=$pole?>"/>
</form>
<?php
if (!empty($fl))
{
$s=bin2hex ($fl);
$ln=strlen($s)-5;
$nam=FALSE;
for ($i=0;$i<$ln;$i+=2)
{ $curhex=substr($s,$i,3);
$nexthex=substr($s,$i+4,1);
if (($curhex=='040') and ($nexthex>'1') and ($nexthex<'8'))
{
$pob="<br>".'<b>[DIR]</b> ';
$nam=TRUE;
$i+=4;
}
if (($curhex=='080') and ($nexthex>'1') and ($nexthex<'8'))
{
$pob="<br>".'[FILE] ';
$nam=TRUE;
$i+=4;
}
if (($curhex=='0a0') and ($nexthex>'1') and ($nexthex<'8'))
{
$pob="<br>".'<i>[LINK]</i> ';
$nam=TRUE;
$i+=4;
}
if ($nam===TRUE)
{
if (($s[$i]>'1') and ($s[$i]<'8'))
{
$hx=substr($s,$i,2);
$hx=chr(hexdec($hx));
$pob=$pob.$hx;
}
else {echo $pob; $nam=FALSE;}
}
}
}
?>
</body>
</html>
в строку можно вводить как имя файла, так и сетевой адресс (строку URL) например URL с SQL-инъекцией, сам пользуюсь и много раз уже выручало
__________________
Карфаген должен быть разрушен...
|
|
|

03.01.2008, 16:48
|
|
Members of Antichat - Level 5
Регистрация: 02.11.2006
Сообщений: 781
Провел на форуме: 5939734
Репутация:
1917
|
|
Хм, скрипт показывает и недавно удаленные файлы, ответ на вопрос почему мне дал ZaCo:
другое дело что может быть такой случай - идентификатор есть в каталоге а в inode нету
хотя об этом нетрудно догадаться, но все равно ему спасибо, другой вопрос как это можно использовать, жду предложений
__________________
Карфаген должен быть разрушен...
|
|
|

13.01.2008, 09:46
|
|
Members of Antichat - Level 5
Регистрация: 02.11.2006
Сообщений: 781
Провел на форуме: 5939734
Репутация:
1917
|
|
UPD: скрипт работает и для SunOS
__________________
Карфаген должен быть разрушен...
|
|
|

25.03.2009, 17:21
|
|
Новичок
Регистрация: 28.10.2007
Сообщений: 11
Провел на форуме: 86145
Репутация:
12
|
|
Сообщение от Scipio
Насчет самого парсинга и поиска, я думаю, той ситуации которую ты описал не возникнет (я думал об этом). Там видишь какая фигня, сначала ищется байт со значением 04h или 08h проверяется следующий за ним байт, является ли он меньше 0Fh и идет проверка является ли идущий за этими двумя байтами байт печатаемым символом
За типом файла идет short int = длине имени. Я так понимаю, более ничего полезного из дампа каталога получить не удастся...
|
|
|

26.03.2009, 12:36
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
HornetBlack, а я так понимаю, ты хочешь минус получить. Прошло больше года =\. Это археология =\
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|