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

27.03.2009, 10:51
|
|
Новичок
Регистрация: 28.10.2007
Сообщений: 11
Провел на форуме: 86145
Репутация:
12
|
|
Сообщение от mailbrush
HornetBlack, а я так понимаю, ты хочешь минус получить. Прошло больше года =\. Это археология =\
Mailbrush, а я так понимаю, что тебе минусы девать некуда или ты можешь сказать что-нибудь полезное по обсуждаемой теме?
Во-первых, это не археология, т.к. FBSD на хостах до сих пор встречается довольно часто и нужно получить максимум из доступной инфы.
Во-вторых, я сейчас разрабатываю инструмент для детального исследования SI и обсуждаемая тема это только малая часть моей тулзы.
Итак?
|
|
|

30.03.2009, 09:42
|
|
Новичок
Регистрация: 28.10.2007
Сообщений: 11
Провел на форуме: 86145
Репутация:
12
|
|
После недолгих поисков на сайте www.kernel-api.org нашел документацию по форматам записей каталога EXT/EXT2. Итого имеем 3 варианта каталогов:
1. struct ext_dir_entry:
unsigned long inode
unsigned short rec_len
unsigned short name_len
char name [EXT_NAME_LEN]
2. struct ext2_dir_entry:
__u32 inode Inode number.
__u16 rec_len Directory entry length.
__u16 name_len Name length.
char name [EXT2_NAME_LEN] File name.
3. struct ext2_dir_entry2:
__u32 inode Inode number.
__u16 rec_len Directory entry length.
__u8 name_len Name length.
__u8 file_type
char name [EXT2_NAME_LEN] File name.
Первый и второй варианты практически идентичны (видимо для совместимости ext и ext2)
Дополнительно по типам и выравниванию:
#define EXT2_FT_UNKNOWN 0
#define EXT2_FT_REG_FILE 1
#define EXT2_FT_DIR 2
#define EXT2_FT_CHRDEV 3
#define EXT2_FT_BLKDEV 4
#define EXT2_FT_FIFO 5
#define EXT2_FT_SOCK 6
#define EXT2_FT_SYMLINK 7
#define EXT2_FT_MAX 8
/**
* EXT2_DIR_PAD defines the directory entries boundaries
*
* NOTE: It must be a multiple of 4
*/
#define EXT2_DIR_PAD 4
#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1)
#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \
~EXT2_DIR_ROUND)
Жаль, что до таблиц inode не добраться, но надо уметь довольствоваться малым... ))
Последний раз редактировалось HornetBlack; 30.03.2009 в 09:57..
|
|
|

23.08.2009, 22:31
|
|
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
Провел на форуме: 7875940
Репутация:
2362
|
|
Только сегодня наткнулся на эту тему, хотя скрипт уже юзал, тк нашел его на blacktoad'е.
Scipio, отличная вещь.
Решил немного сам покопаться.
идет поиск по байтам со значением 04 и 08 и причем следующий байт после них должен тоже быть не больше 0Fh
Там сначала идет нульбайт, далее 04 | 08 | 0a, потом идет длина имени папки/файла/ссылки. Поэтому твой скрипт не показывал файлы, в названиях которых более 16 символов.
Пытался вдуплить как определить удален файл/папка или нет. 2 часа пялился в hex-редактор, так ничего и не придумал.
Переписанный скрипт:
PHP код:
<html>
<head>
<title>FreeBSD dir parser</title>
<style>
body { background-color:#444;font: 9pt Lucida,Verdana;color:#fff;margin: 5; }
a { text-decoration:none; color:#df5; }
</style>
</head>
<body>
<form method="post">
Path: <input type="text" name="pole" value="<?=htmlspecialchars($_POST['pole']);?>"/> <input type="submit"/>
</form>
<pre>
<?php
error_reporting( 0 );
set_time_limit( 0 );
if ( isset( $_POST['pole'] ) )
$str = @file_get_contents( $_POST['pole'] );
if ( !empty( $str ) ) {
$content = array( 'dirs' => array(), 'files' => array(), 'links' => array() );
function getItem( $type, &$i ) {
$item_len = ord( $GLOBALS['str'][$i+1] );
if( $item_len && ( ord($GLOBALS['str'][$i+2]) != 0 ) ) {
$item = substr( $GLOBALS['str'], $i+2, $item_len );
if( strpos($item, "\0") !== false )
return;
$GLOBALS['content'][$type][] = substr( $GLOBALS['str'], $i+2, $item_len );
} else
$item_len = 0;
$i += 2 + $item_len;
}
$len = strlen( $str );
for( $i = 0; $i < $len; $i++ ) {
if( ord( $str[$i] ) != 0 )
continue;
$i++;
$char = ord( $str[$i] );
if( $char == 0x04 )
getItem('dirs', $i);
elseif( $char == 0x08 )
getItem('files', $i);
elseif( $char == 0x0a )
getItem('links', $i);
}
sort($content['dirs']);
foreach( $content['dirs'] as $item )
echo "<i>dir</i>\t[ ".$item." ]\n";
sort($content['files']);
foreach($content['files'] as $item)
echo "<i>file</i>\t".$item."\n";
sort($content['links']);
foreach($content['links'] as $item)
echo "<i>link</i>\t".$item."\n";
}
?>
</pre>
<a href="https://forum.antichat.ru/thread55237.html">Original https://forum.antichat.ru/thread55237.html</a>
</body>
</html>
__________________
включи голову
Последний раз редактировалось oRb; 01.11.2009 в 13:08..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|