CryptoLocker - 使用 Google Apps 脚本恢复云端硬盘文件版本

Posted

技术标签:

【中文标题】CryptoLocker - 使用 Google Apps 脚本恢复云端硬盘文件版本【英文标题】:CryptoLocker - restore Drive file version with Google Apps Scripts 【发布时间】:2017-07-13 03:57:24 【问题描述】:

长话短说,我感染了 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" is not defined。 (第 27 行,文件“代码”)“。 第 27 行如下所示:“var revisions = Drive.Revisions.list(fileId);”。

我再次联系了 Google G Suite 支持人员,并就此错误向他们寻求帮助。他们的回答是“抱歉,我们不支持脚本。”

现在我在这里向你们寻求帮助。也许我们可以让这个脚本运行,这样我就可以恢复我的文件的最新工作版本。

非常感谢您提供的任何帮助。

【问题讨论】:

【参考方案1】:

看看https://gitlab.com/strider/delockyfier 。这是 javascript 中的单页应用程序,您可以按原样运行,或者如果您希望从那里运行它,也可以轻松转换为 Apps 脚本。

【讨论】:

【参考方案2】:

您首先必须确保启用 Advance Drive Service,如下所述: https://developers.google.com/apps-script/advanced/drive 进入你的脚本页面,点击 Resources --> 然后点击 Google Advances Services,然后启用(必须是绿色的!)Drive API。 也许警报会为您打开一个页面,您必须在该页面上启用脚本以访问您的驱动器和文件夹(我认为只是第一次)。 之后,如果您在脚本的第 2 行设置断点并在 istruction 之后运行调试器 istruction,则通过第 27 行没有任何问题,您可以在变量 stack 中看到第一个文件的所有字符串,然后对于第二个等等...... 然后停止并这次正常运行,一切都会好的。 祝你晚安。

【讨论】:

非常感谢!它现在正在工作。就多了一个问题。现在我只能在一个文件夹(ID)上应用脚本,子文件夹中的文件不会被恢复。你知道是否也有一种简单的方法可以恢复子文件夹中的文件?

以上是关于CryptoLocker - 使用 Google Apps 脚本恢复云端硬盘文件版本的主要内容,如果未能解决你的问题,请参考以下文章

近期的技术问题让云供应商进行预设加密

使用 Google 表单更新现有的 Google 表格

使用 Google Data API 使用 C# 访问 Google 电子表格

在google drive使用google.colab云服务

Google Cloud 的使用

使用 Google 脚本创建和/或更新邮件合并 Google 文档