#include
#include
int readstream( handle hfile, bool bisdirectory, char* filename )
printf( "\n" );
return 0; }
*/if( !bisdirectory ) //如果不是目錄,就執行此段
//讀取原始檔內容
char len64[25];
dword orgfilelen;
zeromemory( len64, sizeof( len64 ) );
//將i64轉為dword型
sprintf( len64, "%u", sid.size );
orgfilelen = atol( len64 );
//跳過檔案內容
dword filelenl, filelenh;
success = ::backupseek( hfile, orgfilelen, null, &filelenl, &filelenh, &lpcontext );
if( !success )
} while( dwread )
//讀取資料流名稱
buffer = (uchar*)malloc( sid.dwstreamnamesize + 2 ); //動態申請快取
memset( buffer, 0, sid.dwstreamnamesize + 2 ); //快取清空
success = ::backupread( hfile, (lpbyte)buffer, sid.dwstreamnamesize, &dwread, false, false, &lpcontext );
if( !success )
if( dwread ) //讀取數不為0
//讀取資料流檔案內容大小
zeromemory( len64, sizeof( len64 ) );
//將i64轉為dword型
sprintf( len64, "%u", sid.size );
orgfilelen = atol( len64 );
printf( "\t\t[%ws] -> %u byte\n", buffer, orgfilelen ); //結果輸出,直接輸出資料流名稱,用空格分隔
free( buffer ); //釋放快取
count ++; //資料流個數加1 }
//跳過資料流檔案內容
dword filelenl, filelenh;
success = ::backupseek( hfile, orgfilelen, null, &filelenl, &filelenh, &lpcontext );
if( !success )
} return count; }
void getfiledatastream( char* filename, bool bisdirectory )
if( !bisdirectory ) //不是目錄
if( dwfilesize == 0 ) //大小為0
} count = readstream( hfile, bisdirectory, filename );
if( count )
::closehandle( hfile ); }
void findallfilesindirectory( char* dir, bool bisrecursion )
if( *(dir+dirstrlen) == '\\' ) //在字串最後新增"\*.*"
char* path = (char*)malloc( max_path + 1 ); //申請記憶體
memset( path, 0, max_path + 1 );
memcpy( path, dir, max_path );
strcat( path, "\\*.*" ); //查詢當前目錄下的*.*檔案(即所有檔案)
//這裡查打此目錄下的所有檔案
handle hfile;
win32_find_data findfile;
//開始查詢資料夾下的所有檔案及目錄
hfile = findfirstfile( path, &findfile );
if( hfile != invalid_handle_value ) //存在檔案或目錄
else if( strcmp( findfile.cfilename, "." ) != 0 \
&& strcmp( findfile.cfilename, ".." ) != 0 ) //下一級目錄
else //不遞迴,只檢視該子目錄
} } while( findnextfile( hfile, &findfile ) ); //還有檔案或目錄 }
free( path ); //釋放記憶體 }
void usage() //用法幫助
void main( int argc, char* argv )
if( argc == 2 ) //掃瞄不遞迴的目錄
else
} else //加了兩個引數來執行
} else if( ( argv[2][0] == '-' ) && ( argv[2][2] == '\0' ) ) //第二個引數的第乙個字元為引數號
} else //錯誤的引數
} }
catch(...)
}
NTFS資料流隱寫
最近做題遇到了幾個是ntfs資料流隱寫的題目,感覺很有趣,就深入的學習一下。知識面較淺。建立乙個資料交換流檔案的方法,命令為 宿主檔案 準備與宿主檔案關聯的資料流檔案 首先,分出乙個很小的盤,來測試用。先在f盤中新建乙個空的文字檔案,命名為m0re.txt,建立乙個ntfs資料流,已經成功的隱藏資訊...
NTFS的交換資料流ADS應用
ntfs的交換資料流ads應用 ntfs是windows常用的檔案系統格式。該格式支援交換資料流 alternate data streams,縮寫ads 特性。該特性可以讓多個檔案流使用同乙個檔名,便於系統管理和使用檔案。這樣,乙個檔名可以包含乙個主檔案流和多個非主檔案流。其中,主檔案流可以以檔名...
資料流建立檔案
以前一直是把檔案轉為資料流存入資料庫儲存,例項多是應用在儲存上。如今需要把excel檔案以二進位製流存入資料庫中,當使用者需要做excel資料分析時,得先把資料流建立為乙個檔案,然後再對這個檔案進行處理。上傳檔案以二進位制儲存資料庫中,insus.net在這裡就不做演示了,因為在insus.net的...