# FileRestore **Repository Path**: kelioc/FileRestore ## Basic Information - **Project Name**: FileRestore - **Description**: 文件恢复 - **Primary Language**: C/C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2018-04-17 - **Last Updated**: 2021-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FileRestore # linux命令行下的 文件恢复 工具 ``` 项目目标: 尽可能多的找到文件 并保持归属结构. (不管什么系统 什么文件系统 存储的基本单位都是簇, 找到文件存储读取的最小单位 比如ntfs是mft文件记录,ext4.inode 项目起因: 2018-03-19 磁盘被格式化了 几乎近两年 所有开发的项目代码都在这个磁盘里,还包括一些重用的shell脚本, 磁盘是ntfs格式的,被挂载为网络路径过程中,不知道做了什么操作,文件全没了本来还是为是挂载错误 2018-03-21 ~2018-03-23 尝试使用winhex进行查找恢复,但是根本就无从下手。 2018-03-25 决定根据之前ntfs文件系统做的汇总,开启了这个项目 ,恢复自己数据的同时学习c++语法 (其实本来是想过用python,或go语言实现的,最终确定用c++ 原因有两个,1 比较靠近底层轻松扇区读取 而数据恢复程序主要得io开销就在扇区读取上,2 我喜欢读代码,而c++的代码才是所有项目的开发语言) 2018-03-26 环境搭建nb8.2 python插件,perl,go插件 , c++ 语法好虐人 ,C++还原程序想法初现 项目创建时间 2018-03-27 环境搭建 FileRestore编码继续 读取扇区ok 这个项目算是正式立项了 2018-04-17 创建第一个版本,能够读取ntfs正常的目录,简单恢复删除的文件 修改历史 2018-03-28 FileRestre dump方法扩展, 实现文本输出并添加头部信息, 并且添加唉数量控制参数,实现非字符串输出 复制几个比较重要的结构到ntfs.h 尝试结构到数据对应不过偏移出现问题,处理了半天还是有问题最终决定先留着这个问题 ,打印指针 编码文件重写和结构主要流程代码 ,findMFT,readfile, fileAttr 2018-03-29 结构存储对齐问题 #pragma pack(push,1) //http://blog.chinaunix.net/uid-25445243-id-2354324.html sectors_per_cluster 加了一个字节搞得后面的数据都不对 够劲了 处理内存分配异常问题 申请的空间比使用的空间少了一半 2018-04-02 shell ls,pwd , 目录存储 ,中文名 ,文件转存正确性 *2018-04-03 中文文件名(unicode to utf8), 文件名搜索 (遍历map), 文件内容确认(文件大小字段搜索) ,文件夹恢复(测试没有问题), 结构存储先不理会了 2018-04-04 文件大小问题修正 ok, 文件mft搜索偏移100M之后向前搜索, shell给出说明 寻找文件属性 没有找到的时候出现调用异常问题, 尝试通过静态变量实现同一个文件获取不同属性读取磁盘多次的问题 尝试添加nofindatttrException, 遇到类的继承和初始化问题 跳转之后向回找出现死循环问题的修正 2018-04-08 正式磁盘100G+ 代码运行发现 python目录没找到 (这必须得处理,正常访问都可以的文件,恢复不出来 什么鬼嘛) 恢复的文件 有的空目录没有被恢复出来, 文件名使用了短文件名 存在多个30属性的情况 ,处理方式是 采用全部属性取出再返回的方式 (虽然还是会出现 但是不管了) ok 许多文件挂靠到0号文件上 strncpy to memcpy(pid,(char *)&name->parent_directory,6); 搜索出的问题 ok 出现保存的文件大小和内容异常问题 文件大小问题 不应该找 30属性,而应该取80 属性 ok 长文件名之后 出现 111安装维护手册(修改反馈).docx 文件名转移内存溢出问题 解决办法是 申请的空间+8 ok *2018-04-10 数据恢复程序改版(拆分ntfs出来一个单独的文件,方便以后其他文件格式的介入) 编译调试, 函数优化 2018-04-12 boot改成struct类型 不要使用指针类型 确定了一下 mft数据运行的正确性 内存使用优化 17w文件2.4G缩小到300M(释放 ds->get,文件名只用指针而非固定255个字节 ) 删除的文件,无根的文件 写入到一个新的文件夹 优化shell输出 测试删除文件挨你和无根文件 优化next偏移导致的postion 错误 删除文件的的恢复(删除文件的父目录错误) , 验证多个运行下的文件读取 , 2018-04-13 1 现场删除文件恢复 ok 2 验证多个运行下的文件读取 确定了不过文件内容获取还是有问题 以后处理吧可能是磁盘分区的问题 (unsigned char) 3 目录输出 重名文件的过滤 ok 4 id通过目录信息校验 ok 晚上思考foreach,print_r 通过手机看了 c实现方法, 头脑风暴看了 php的原理, 变量,函数,类,原来这么简单 2018-04-16 程序实战 数据回复 问题多多,正式立项 6月 ext4数据恢复完成 ntfs恢复程序大批量数据恢复 rdisk脚本合并实现定位,搜索,回车继续,pageup down, 历史记录,左右等按键功能 7月 添加中文输入支持 实现位置的偏移历史 属性块分颜色显示背景 字体颜色显示模板方案 长目录粘贴造成的 __stack_chk_fail 问题 处理 8月 winhex 模板导入功能代码调试 ```