CryptoLocker - 使用 Google Apps 脚本恢复云端硬盘文件版本
CryptoLocker - restore Drive file version with Google Apps Scripts
长话短说,我感染了 CryptoLocker 病毒。我的“正常”本地文件不是问题,因为我备份了这些文件。但是我使用的是 Google Drive Sync 客户端,我所有的 Drive 文件都被加密了。我没有备份它们,因为我认为 Google 驱动器已保存并且我的数据存储在世界各地(我知道我的错)。
现在我可以看到 Google Drive 提供了版本控制。这意味着我的旧上传仍在服务器上。我可以一个文件一个文件地恢复以前的版本,但是几千个文件,祝你好运。
我联系了 Google G Suite 支持团队(我正在为我的企业使用 Google G Suite)并询问他们是否可以通过一次批量操作恢复最新版本。答案是“不,你必须一个文件一个文件地做”。因此,我正在互联网上查找脚本、工具等。
我在 Google 云端硬盘帮助论坛“https://productforums.google.com/forum/#!topic/drive/p08UBFYgFs0https://productforums.google.com/forum/#!topic/drive/p08UBFYgFs0”中找到了一个 Google Apps 脚本。
1) 我将“Google Apps 脚本”应用程序添加到我的驱动器。
2) 我创建了一个新应用并通过了脚本:
function testSmallFolder() {
var smallFolder = DriveApp.getFolderById('FOLDER_ID_HERE');
var files = smallFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
var childFolders = smallFolder.getFolders();
while(childFolders.hasNext())
{
var childFolder = childFolders.next();
Logger.log(childFolder.getName());
var files = childFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
getSubFoldersAndDelete(childFolder);
}
}
function deleteRevisions(file)
{
var fileId = file.getId();
var revisions = Drive.Revisions.list(fileId);
if (revisions.items && revisions.items.length > 1)
{
for (var i = 0; i < revisions.items.length; i++)
{
var revision = revisions.items[i];
var date = new Date(revision.modifiedDate);
var startDate = new Date();
var endDate = new Date(revision.modifiedDate);
var fileName = Drive.Files.get(fileId);
if(revision.modifiedDate > "2017-02-16T10:00:00" && revision.modifiedDate < "2017-02-18T10:00:00" && revision.lastModifyingUserName == "ENTER_MODIFIED_USERNAME_HERE]]" && file.getName() !== "HELP_DECRYPT.URL" && file.getName() !== "HELP_DECRYPT.PNG" && file.getName() !== "HELP_DECRYPT.HTML")
{
Logger.log(' %s, Date: %s, File size (bytes): %s',file.getName(),
date.toLocaleString(),
revision.fileSize);
return Drive.Revisions.remove( fileId, revision.id);
}
}
} else
{
Logger.log('No revisions found.');
}
}function getSubFoldersAndDelete(parent)
{
parent = parent.getId();
var childFolders = DriveApp.getFolderById(parent).getFolders();
while(childFolders.hasNext())
{
var childFolder = childFolders.next();
var files = childFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
getSubFoldersAndDelete(childFolder);
}
return;
}
3) 脚本提供了 3 个函数“testSmallFolder” / “deleteRevisions” / “getSubFoldersAndDelete”。看起来函数“festSmallFolder”只能在某个文件夹上工作。第 2 行:FOLDER_ID_HERE
4) 我创建了一个文件夹并将我的文件移动到这个文件夹中。之后我得到了文件夹 ID (URL) 并将其添加到脚本中。
5) 在第37行你可以添加修改的开始和结束日期。我也在同一行调整了用户名。
6) 我保存了脚本和 运行 “testSmallFolder” 函数。
7) 我收到一条错误消息:“ReferenceError: "Drive" 未定义。 (第 27 行,文件 "Code")”。
第 27 行看起来像这样:“var revisions = Drive.Revisions.list(fileId);”.
我再次联系了 Google G Suite 支持,并就此错误向他们寻求帮助。他们的回答是“抱歉,我们不支持脚本。”
伙计们,现在我在这里向你们寻求帮助。也许我们可以获得这个脚本 运行 以便我可以恢复我的文件的最新工作版本。
非常感谢您提供的任何帮助。
看看 https://gitlab.com/strider/delockyfier 。这是 JavaScript 中的单页应用程序,您可能可以 运行 原样,或者如果您希望从中 运行 它,则可以轻松转换为 Apps 脚本。
您首先必须确保启用 Advance Drive Service,如下所述:
https://developers.google.com/apps-script/advanced/drive
进入您的脚本页面,单击资源 --> 然后单击 Google 高级服务,然后启用(必须是绿色!)驱动器 API。
也许警报会打开一个页面,您必须在该页面上启用脚本才能访问您的驱动器和文件夹(我认为只是第一次)。
这样做之后,如果你在脚本的第 2 行放置一个断点并且 运行 调试器在指令后指令,你可以毫无问题地通过 27 行,你可以在变量堆栈中看到所有字符串第一个文件,然后是第二个等等....
然后停下来,这次正常运行,一切都会好的。
祝你有一个美好的夜晚。
长话短说,我感染了 CryptoLocker 病毒。我的“正常”本地文件不是问题,因为我备份了这些文件。但是我使用的是 Google Drive Sync 客户端,我所有的 Drive 文件都被加密了。我没有备份它们,因为我认为 Google 驱动器已保存并且我的数据存储在世界各地(我知道我的错)。
现在我可以看到 Google Drive 提供了版本控制。这意味着我的旧上传仍在服务器上。我可以一个文件一个文件地恢复以前的版本,但是几千个文件,祝你好运。 我联系了 Google G Suite 支持团队(我正在为我的企业使用 Google G Suite)并询问他们是否可以通过一次批量操作恢复最新版本。答案是“不,你必须一个文件一个文件地做”。因此,我正在互联网上查找脚本、工具等。
我在 Google 云端硬盘帮助论坛“https://productforums.google.com/forum/#!topic/drive/p08UBFYgFs0https://productforums.google.com/forum/#!topic/drive/p08UBFYgFs0”中找到了一个 Google Apps 脚本。
1) 我将“Google Apps 脚本”应用程序添加到我的驱动器。
2) 我创建了一个新应用并通过了脚本:
function testSmallFolder() {
var smallFolder = DriveApp.getFolderById('FOLDER_ID_HERE');
var files = smallFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
var childFolders = smallFolder.getFolders();
while(childFolders.hasNext())
{
var childFolder = childFolders.next();
Logger.log(childFolder.getName());
var files = childFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
getSubFoldersAndDelete(childFolder);
}
}
function deleteRevisions(file)
{
var fileId = file.getId();
var revisions = Drive.Revisions.list(fileId);
if (revisions.items && revisions.items.length > 1)
{
for (var i = 0; i < revisions.items.length; i++)
{
var revision = revisions.items[i];
var date = new Date(revision.modifiedDate);
var startDate = new Date();
var endDate = new Date(revision.modifiedDate);
var fileName = Drive.Files.get(fileId);
if(revision.modifiedDate > "2017-02-16T10:00:00" && revision.modifiedDate < "2017-02-18T10:00:00" && revision.lastModifyingUserName == "ENTER_MODIFIED_USERNAME_HERE]]" && file.getName() !== "HELP_DECRYPT.URL" && file.getName() !== "HELP_DECRYPT.PNG" && file.getName() !== "HELP_DECRYPT.HTML")
{
Logger.log(' %s, Date: %s, File size (bytes): %s',file.getName(),
date.toLocaleString(),
revision.fileSize);
return Drive.Revisions.remove( fileId, revision.id);
}
}
} else
{
Logger.log('No revisions found.');
}
}function getSubFoldersAndDelete(parent)
{
parent = parent.getId();
var childFolders = DriveApp.getFolderById(parent).getFolders();
while(childFolders.hasNext())
{
var childFolder = childFolders.next();
var files = childFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
getSubFoldersAndDelete(childFolder);
}
return;
}
3) 脚本提供了 3 个函数“testSmallFolder” / “deleteRevisions” / “getSubFoldersAndDelete”。看起来函数“festSmallFolder”只能在某个文件夹上工作。第 2 行:FOLDER_ID_HERE
4) 我创建了一个文件夹并将我的文件移动到这个文件夹中。之后我得到了文件夹 ID (URL) 并将其添加到脚本中。
5) 在第37行你可以添加修改的开始和结束日期。我也在同一行调整了用户名。
6) 我保存了脚本和 运行 “testSmallFolder” 函数。
7) 我收到一条错误消息:“ReferenceError: "Drive" 未定义。 (第 27 行,文件 "Code")”。 第 27 行看起来像这样:“var revisions = Drive.Revisions.list(fileId);”.
我再次联系了 Google G Suite 支持,并就此错误向他们寻求帮助。他们的回答是“抱歉,我们不支持脚本。”
伙计们,现在我在这里向你们寻求帮助。也许我们可以获得这个脚本 运行 以便我可以恢复我的文件的最新工作版本。
非常感谢您提供的任何帮助。
看看 https://gitlab.com/strider/delockyfier 。这是 JavaScript 中的单页应用程序,您可能可以 运行 原样,或者如果您希望从中 运行 它,则可以轻松转换为 Apps 脚本。
您首先必须确保启用 Advance Drive Service,如下所述: https://developers.google.com/apps-script/advanced/drive 进入您的脚本页面,单击资源 --> 然后单击 Google 高级服务,然后启用(必须是绿色!)驱动器 API。 也许警报会打开一个页面,您必须在该页面上启用脚本才能访问您的驱动器和文件夹(我认为只是第一次)。 这样做之后,如果你在脚本的第 2 行放置一个断点并且 运行 调试器在指令后指令,你可以毫无问题地通过 27 行,你可以在变量堆栈中看到所有字符串第一个文件,然后是第二个等等.... 然后停下来,这次正常运行,一切都会好的。 祝你有一个美好的夜晚。