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 行,你可以在变量堆栈中看到所有字符串第一个文件,然后是第二个等等.... 然后停下来,这次正常运行,一切都会好的。 祝你有一个美好的夜晚。