查看: 127688|回复: 695
收起左侧

[原创工具] 火流星(2011-2-15 FS.DLL更新---bug修复)

  [复制链接]
银砾石
发表于 2008-12-12 09:49:06 | 显示全部楼层 |阅读模式
本帖最后由 银砾石 于 2011-2-15 10:27 编辑


FS.DLL相关下载


console.rar (244.27 KB, 下载次数: 3431)


FS.DLL发布,此DLL提供文件系统解析接口,程序可以通过此接口分析底层。DLL本身不读取底层,读写接口由用户程序提供。
使用FS.DLL可以做到
红色未提供;深绿色已提供淡绿色根据已有功能可以简单实现,但未提供直接方法
寻找隐藏ROOTKIT文件
复制被其他程序保护的文件
删除驱动也删不了的文件
保护文件不被其他程序删除
隐藏文件不被其他程序发现

查看隐藏的流文件
查看隐藏的注册表启动项

删除被保护的注册表项
.
.
.
您的深度决定了fs.dll的深度。



注意:此DLL文件和以前的火流星并没有实际联系。


Q:为什么不继续开发火流星而是FS.DLL?
A:火流星由于开发时很多东西和界面直接相关,虽然在改版(2.0)时有所改进,但还是有较多的联系,不利于进一步开发;另外,不少语句用法都不规范,导致了程序频繁出错,修改的难度不亚于重新开始......原因还有其他,最终让我决定:放弃火流星而转为DLL库。(其实,也不算完全放弃,DLL库做好后,做一个类似火流星的程序将是非常容易的。)

附件说明:
火流星相关附件以“火流星:”开头;FS.DLL库文件相关文件以“FS:”开头;其他附件以“其他:”开头。


已知BUG(暂未更新)
Q:为什么解决状态为已解决的尚未更新?
A:由于在修改未解决的BUG中,往往会修改基础模块,在未恢复前,暂时不会上传。


BUG描述:NTFS分区改名后索引顺序错误引起的文件找不到,在目录下文件个数超过一个索引的情况下可能发生
发现日期:2009-12-15
解决状态:未解决
解决前处理办法:非必要情况不使用此功能、必须使用情况下新的名称与原来相似,如不能访问请检查磁盘并修复错误。


FS.DLL使用说明
更新日期2010-12-31
1.介绍

FS.DLL
提供了文件系统解析接口,程序可以通过此接口分析底层。DLL本身不读取底层,读写接口由用户程序提供。此接口提供的解析方法可能会和系统本身处理方法不同。
2.预定义
         以下关联到的所有字符串均为unicode,所有代码为C++
         常量系列
#define maxsize 255
#define commaxsize 4096
#define larmaxsize 65535

Fs
标识
#define fs_sign 21318
         返回值系列
#define FS_Normal 0x00
#define FS_NotExists 0x01
#define FS_NotDir 0x02
#define FS_Empty 0x03
#define FS_NotReady 0x04
#define FS_NotReg 0x05
#define FS_NotSupported 0x06
#define FS_DataChanged 0x07
#define FS_NameTooLong 0x08
#define FS_WriteFailed 0x09
#define FS_Abort 0x0a
#define FS_Ignore 0x0b
#define FS_Exists 0x10
#define FS_CLEAR_NORMAL 0x00
#define FS_CLEAR_ABORT 0x01
         文件系统
#define FileSystem_UNKNOW 0x00
#define FileSystem_FAT16 0x01
#define FileSystem_FAT32 0x02
#define FileSystem_NTFS 0x03
#define FileSystem_EXFAT 0x04
#define FileSystem_ISO9660 0x05
#define FileSystem_UDF 0x06
#define FileSystem_REG 0x1001
#define FileSystem_PARTITION 0x2001
         虚拟硬盘文件类型
#define DiksType_DISK 0x00
#define DiksType_VDI 0x01
#define DiksType_VHD 0x02
#define DiksType_VM 0x03
         已删除文件
#define DEL_UNDEFINED 0x00 //未定义
#define DEL_AUTO 0x01 //程序判断
#define DEL_RAR 0x02 //Rar压缩文件
#define DEL_PE 0x03 //PE文件
#define DEL_OFFICE 0x04 //office文件
#define DEL_JPG 0x05 //jpeg格式
         注册表
#define REG_KEY 101
3.导出函数
typedef bool (* FS_REGFIRE)(const wchar_t * regcode);
说明:注册FS.DLL,某些功能需要注册后才能使用。
参数:regcode,注册码,目前恒为“银砾石”。
返回值:true,注册成功;false,注册失败。
相关结构:无。
typedef wchar_t * (* FS_GETERROR)();
说明:取得错误信息。
参数:无。
返回值:错误信息。
相关结构:无。
typedef BYTE * (* FSREAD)(LARGE_INTEGER base,DWORD size) ;
typedef bool ( * FS_PRE_READ)(FSREAD FSIO_READ);
说明:读取磁盘指定位置base指定大小size的内容,其实现由应用程序提供。
相关结构:无。
typedef bool (* FSWRITE)(LARGE_INTEGER base,DWORD size,BYTE * mem) ;
typedef bool ( * FS_PRE_WRITE)(FSWRITE FSIO_WRITE);
说明:写入磁盘指定位置base指定大小size的内容,其实现由应用程序提供。
相关结构:无。
typedef USHORT (*FS_CLEAR)(FSCLEAR FSIO_CLEAR);
typedef USHORT (* FSCLEAR)(LARGE_INTEGER total,LARGE_INTEGER current,LARGE_INTEGER left) ;
说明:清除剩余空间函数,其实现由应用程序提供。
参数:total,总的剩余空间簇数;current,当前处理的簇号;left,还剩余多少簇未处理。
返回值:0:正常处理;1:跳出,不再清除当前及以后的所有簇;其他:跳过此簇不清除。
相关结构:无。
typedef void *
(* FS_ENUMFILE)(const wchar_t * path,void * node) ;
说明:枚举指定路径的文件及文件夹
参数:path,待枚举的路径;node,上次枚举的结果,传入后回收,也可以通过FS_DELETENODE回收。
返回值:含有文件名及其他相关信息的链表,链表结构视文件系统不同而不同。
相关结构:FS_ISO9660FS_NTFS FS_FATFS_TIMEFS_UDF
typedef int (* FS_COPYFILE)(const wchar_t * path,const wchar_t * Stream);
说明:复制文件
参数:path,待复制文件的全路径;stream,流文件名。某些文件系统支持流文件,如不是流文件,可以置NULL
返回值:见(2 预定义/返回值)。复制文件的内容由write功能输出。
相关结构:无。
typedef BYTE * (* FS_PRE_REG)(const wchar_t * path,const wchar_t * Stream);
说明:读文件内容到内存。可用于注册表操作。与FS_REL_REG成对使用。
参数:path,待读文件的全路径;stream,流文件名。某些文件系统支持流文件,如不是流文件,可以置NULL
返回值:读到内存的文件首地址。
相关结构:无。
typedef int (* FS_REL_REG)(BYTE * key);
说明:释放由FS_PRE_REG读取的内存。可用于注册表操作。与FS_PRE_REG成对使用,请勿释放其他内容。
参数:keyFS_PRE_REG返回的指针。
返回值:见(2 预定义/返回值)。
相关结构:无。
typedef void * (* FS_ENUMREG)(const wchar_t * RegPath,BYTE * key,void * node);
说明:枚举注册表。
参数:RegPath,注册表路径;key,由FS_PRE_REG返回或应用程序读取的指针;node,上次枚举的结果,传入后回收,也可以通过FS_DELETENODE回收。
返回:含有注册表键值等信息的链表。
相关结构:FS_REG
typedef int (* FS_DELETEFILE)(const wchar_t * path,const wchar_t * Stream,BYTE Mode);
说明:删除文件。
参数:path,待删除文件全路径;Stream,待删除流文件名,不是或不支持置NULLMode,删除模式。Mode可能取值:0x01删除目录区,0x02删除内容,0x03以上全部和簇链,0x04NTFS的包含其他,0x08回收空间。支持或操作。
推荐:当一般需要删除一个文件时推荐0x07,需要破坏一个文件时推荐0x06,需要删除一个错误文件时推荐0x01
相关结构:无。
typedef Partition * (* FS_ENUMPARTITION)(Partition * node);
说明:枚举分区。
参数:node,上次枚举的结果,传入后回收,也可以通过FS_DELETENODE回收。
返回值:含有分区信息的链表。
相关结构:Partition
typedef bool (* FS_DELETENODE)(void * node);
说明:删除链表。
参数:FS_ENUMFILE等功能返回的链表。
返回值:忽略。
相关结构:PartitionFS_ISO9660FS_NTFS FS_FAT FS_REGFS_UDF
typedef int (*FS_DELETEREG)(const wchar_t * RegPath,const wchar_t *
DeleteReg,const wchar_t *
FilePath,BYTE * key);
说明:删除注册表键值。
参数:RegPath,需要删除的键所在的(父)键;DeleteReg ,需要删除的键或值(相同名称的话值优先);FilePath,对应注册表文件所在路径;key,由FS_PRE_REG返回或应用程序读取的指针。
如果key为空的话,将由dll读取并释放,不为空的话,由主程序释放并忽略FilePath参数。只删除当前指定项,不递归删除其子项。
相关结构:无。
typedef int (* FS_RENAMEFILE)(const wchar_t *
path,const wchar_t *
NewName);
说明:重命名文件。
参数:path,待重命名文件全路径;NewName,新的文件名。文件名中“/”不支持。
返回值:见(2 预定义/返回值)。
相关结构:无。
typedef void *  (* FS_ENUMDELETED)(const wchar_t * path,void * node,BYTE Mode) ;
说明:枚举已删除文件,FATNTFS支持。
参数:path,待枚举路径; node,上次枚举的结果,传入后回收;Mode,见(2 预定义/已删除文件),请置0
相关结构:FS_NTFS FS_FAT
typedef USHORT (* FS_COPYFILE_D)(LARGE_INTEGER pos,DWORD offset,BYTE Mode);
typedef PVOID (* FS_ENUMFILE_D)(LARGE_INTEGER pos,DWORD offset,PVOID node);
typedef USHORT (* FS_DELETEFILE_D)(LARGE_INTEGER base, DWORD id,LPCTSTR Stream,BYTE Mode);
typedef USHORT (*FS_RENAMEFILE_D)(LARGE_INTEGER base, DWORD id,LPCTSTR NewName); typedef PVOID (*FS_ENUMDELETED_D)(LARGE_INTEGER base,IN DWORD id,PVOID node);
说明:相应功能的直接地址操作版。
参数:base,基地址;offsetid,偏移或mft号;其他参数参考对应功能说明。请从已返回链表中获取参数值。
返回值:参考对应功能。
相关结构:参考对应功能。
typedef DiskPos (* FS_QUERYDISKPOS)(LARGE_INTEGER pos);
说明:虚拟磁盘获取实际地址。支持vmware,virtual box,virtual pc虚拟磁盘文件。拆分或快照文件需要多个文件结合才能分析结构,此功能由应用程序提供。
参数:pos,原地址。
返回值:实际地址及长度信息。
相关结构:DiskPos
4.相关结构
class FS_TIME{
public:
WORD year;
BYTE month;
BYTE day;
BYTE zero;
BYTE hour;
BYTE minute;
BYTE second;
};
说明:日期时间信息。
typedef class ISO9660{
public:

WORD ErrorCode;

WORD fs;

WORD fstype;

BYTE filetype;

BYTE padding1;

TCHAR filename[maxsize];

LARGE_INTEGER filesize;

FS_TIME time;

LARGE_INTEGER base;

LARGE_INTEGER r_base;

DWORD offset;

ISO9660 * head;

ISO9660 * next;

ISO9660 * pre;
}FS_ISO9660;
说明:iso9660文件系统链表结构。
参数:Errorcode,错误信息,参考2.预定义。


fs
fs标记,常量。


fstype
,文件系统类型,参考2.预定义。


filetype
,文件类型,1目录,0文件。


filename
,文件名。


filesize
,文件大小,以字节计。


time
,时间。


base
,基地址。


r_base
,实际地址。


offset
,偏移。


head
,指向链表头。


next
,指向链表下一个。


pre
,指向链表前一个。
typedef class NTFS {
public:

WORD ErrorCode;

WORD fs;

WORD fstype;

BYTE filetype;

TCHAR shortname[13];

TCHAR longname[maxsize];

LARGE_INTEGER filesize;

DWORD mftnum;

FILETIME ctime;

FILETIME mtime;

FILETIME mfttime;

NTFS * head;

NTFS * next;

NTFS * pre;

BYTE hardlinkname[commaxsize];

BYTE symboliclinkname[commaxsize];

BYTE streamname[commaxsize];
}FS_NTFS,*pFS_NTFS;
说明:NTFS文件系统链表结构。
参数:shortname,短文件名。


longname
,长文件名。


mftnum
MFT号。


ctime
,创建时间。


mtime
,修改时间。


mfttime
MFT修改时间。


hardlinkname
,硬连接。


symboliclinkname
,符号连接。


streamname
,流文件。


handlinkname,symboliclinkname,streamname
结构:WORD lengthsizeof(length) name
首两字节为名称的长度,接下来相应长度为名称,依次重复,直到length=0或超过

commaxsize
typedef class UDF{
public:

WORD ErrorCode;

WORD fs;

WORD fstype;

BYTE filetype;

BYTE padding1;

WCHAR filename[maxsize];

LARGE_INTEGER filesize;

//
BYTE padding2;

FS_TIME ctime;

FS_TIME mtime;

LARGE_INTEGER base;

LARGE_INTEGER r_base;

DWORD offset;

BYTE streamname[commaxsize];

UDF * head;

UDF * next;

UDF * pre;
}FS_UDF;
说明:UDF文件系统链表结构。特别说明:使用r_base而不是base作为FS_ENMUFILE_D的参数。
typedef class
FAT {
public:

WORD ErrorCode;

WORD fs;

WORD fstype;

BYTE filetype;

TCHAR shortname[13];

TCHAR longname[maxsize];

LARGE_INTEGER filesize;

LARGE_INTEGER base;

LARGE_INTEGER r_base;

DWORD offset;

DWORD clust;

FS_TIME ctime;

FS_TIME mtime;

FAT * head;

FAT * next;

FAT * pre;
}FS_FAT,*pFS_FAT;
说明:FAT文件系统链表结构。
参数:clust,簇号。
typedef class REG{
public:

WORD ErrorCode;

WORD fs;

WORD fstype;

WORD regtype;

DWORD base;

DWORD r_base;

TCHAR name[maxsize];

BYTE data[larmaxsize];

DWORD datalen;

FILETIME mtime;

REG * head;

REG * next;

REG * pre;
}FS_REG,*pFS_REG;
说明:注册表链表结构
参数:regtype,键类型。REG_KEYREG_SZREG_BINARYREG_DWORDREG_MULIT_SZREG_EXPAND_SZ。请依各自类型分析其内容。


data
,注册表键值数据。


datalen
data的长度。
class Partition
{
public:

WORD ErrorCode;

WORD fs;

WORD fstype;

LARGE_INTEGER StartPos;

LARGE_INTEGER Size;

BYTE Active;

BYTE Flag;

Partition * head;

Partition * next;

Partition *pre;
};
说明:枚举分区。
参数:startpos,分区开始位置。


size
,分区大小。


Active
,是否为活动分区。


Flag
,分区类型,同MBR定义。
class DiskPos
{
public:

LARGE_INTEGER pos;

DWORD left;

USHORT IsFind;

USHORT DiskType;
};
说明:虚拟磁盘分析返回实际地址。
参数:pos,目标地址在虚拟磁盘中的实际地址。


left
,实际地址后block剩余大小。


IsFind
,是否找到。未找到请置缓存为0


DiskType
,虚拟磁盘文件类型。
以下为火流星说明:
(由于内容太多,全部放到附件的“火流星说明相关.rar”中)
未命名.JPG
1.PNG
2.PNG
未命名.PNG
控制台例子程序使用界面.PNG

fire.rar

273.71 KB, 下载次数: 1992

火流星:v1.5.6版本,请用v2.0.0.8fix2版本

o_r.rar

243.78 KB, 下载次数: 1548

其他:以前写的object right,设置窗口啦,进程什么的权限的

set.rar

16.17 KB, 下载次数: 1527

火流星:v2.0.0.7对应配置文件

antidel.rar

78.95 KB, 下载次数: 1319

火流星:开放v1.5.5源代码(BCB6.0)

Fire2.0.rar

350.03 KB, 下载次数: 2456

火流星:v2.0.0.9 fix(不知道fix几了,老是出错,基础不行啊)

fc.rar

424.84 KB, 下载次数: 1434

其他:中国福利彩票辅助软件(双色球+3D),无使用说明。

火流星说明相关.rar

4.73 KB, 下载次数: 1567

火流星:一些说明

FileMask 作者olly.rar

708.19 KB, 下载次数: 1522

FS:2009-10-18版本

Test Rule.rar

193.57 KB, 下载次数: 1338

其他:删除及恢复特权(非工具,慎用)

FS.DLL.rar

74.76 KB, 下载次数: 1398

FS:2009-12-11

FileMask.part1.rar

781.25 KB, 下载次数: 1699

FS:2009-12-11版本 by olly

FileMask.part2.rar

298.93 KB, 下载次数: 1740

FS:2009-12-11版本 by olly

FS一个应用.rar

152.34 KB, 下载次数: 1520

FS:一个应用

fs.rar

112.34 KB, 下载次数: 1576

fs.dll:2010-12-31更新,使用说明。

评分

参与人数 18技术 +1 经验 +225 魅力 +1 人气 +34 收起 理由
tawny2008 + 90 + 5 支持更新
wo1234 + 1 又更新了,支持~
边缘vip + 75 + 1 这个功能不错,感谢更新!
angel13th + 1 好勤奋的更新呀。。。
拿贝马凡 + 1 支持原创

查看全部评分

dl123100
发表于 2008-12-12 12:07:58 | 显示全部楼层
看起来跟uplus的原理有点相似。见过磁盘级东东的危害,不敢乱用。

[ 本帖最后由 dl123100 于 2008-12-12 15:38 编辑 ]
痛苦的信仰
发表于 2008-12-12 17:51:23 | 显示全部楼层
谢谢分享
angel13th
发表于 2008-12-12 20:43:26 | 显示全部楼层
是不是和uplus类似?期待多种磁盘分区的版本出现
最后的枫叶
发表于 2008-12-12 21:18:43 | 显示全部楼层
听了介绍不敢用了
1e3e
头像被屏蔽
发表于 2008-12-12 21:31:58 | 显示全部楼层
谢谢分享,收藏
bocs
发表于 2008-12-12 21:41:17 | 显示全部楼层

有没有相关的更详尽资料?

可以把相关的应用技术及限制公布啊,比如正在占用的文件删除等……是不是启动后删除啊?
银砾石
 楼主| 发表于 2008-12-12 22:56:04 | 显示全部楼层
原帖由 bocs 于 2008-12-12 21:41 发表
可以把相关的应用技术及限制公布啊,比如正在占用的文件删除等……是不是启动后删除啊?


目前限制是仅可用于FAT32格式
同时,一些错误的文件名比如"xx.  3"这类的会找不到,所以不能操作--当然,除非用磁盘编辑工具,你是不可能建立这样的文件的

删除的话是直接删,包括正在使用的,甚至是.和..。
余乐
发表于 2008-12-12 23:29:04 | 显示全部楼层
透露第一个功能的原理,,,其他自己研究去吧
保护:以HEX方式在磁盘上查找该文件或文件夹,查到的话以HEX方式,如果是英文的就修改其第一个字符为小写,如果是中文即把第一个字改成随机乱码,来达到保护的目的
英文目录的话还行,但是如果是中文目录就会破坏第一个字,推荐把保护过的文件名留一份在注册表或建立一个文件来保存,,,
ysice
发表于 2008-12-13 20:18:15 | 显示全部楼层
感谢分享
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-12-22 21:19 , Processed in 0.158360 second(s), 20 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表