2017-02-22 1 views
1

Kurz gesagt, ich wurde vom CryptoLocker-Virus infiziert. Meine "normalen" lokalen Dateien sind nicht das Problem, weil diese Dateien ich sichern. Aber ich habe den Google Drive Sync-Client verwendet und alle meine Drive-Dateien wurden verschlüsselt. Ich habe sie nicht gesichert, weil ich dachte, dass Google Drive sicher ist und meine Daten auf der ganzen Welt gespeichert sind (meine Schuld ist mir bekannt).CryptoLocker - Wiederherstellung der Laufwerksdateiversion mit Python-Skript

Jetzt kann ich sehen, dass Google Drive Versionierung bietet. Das bedeutet, dass meine alten Uploads noch auf dem Server sind. Ich kann die vorherige Version Datei nach Datei, aber um mehrere tausend Dateien, viel Glück wiederherstellen. Ich kontaktierte das Google G Suite-Supportteam (ich verwende Google G Suite für mein Unternehmen) und fragte, ob sie die neueste Version in einer Massenaktion wiederherstellen können. Die Antwort war "Nein, du musst es Datei für Datei machen". Deshalb habe ich im Internet nach Skripten, Tools etc. gesucht.

Ich habe ein Python-Skript "bitbucket.org/snippets/cyclick/EBbEG" gefunden, das mir erlauben sollte, die Preview-Version wiederherzustellen.

  1. installieren Python "python.org/ftp/python/2.7.12/python-2.7.12.msi".

  2. Führen Sie "CMD" aus.

  3. Laden Sie das Pip-Modul "bootstrap.pypa.io/get-pip.py" herunter.

  4. Kopieren Sie es in den Ordner "Scripts".

  5. Führen Sie das Skript über CMD "Python get-pip.py".

  6. Schalten Sie die Drive API und OAuth-Client-ID generieren: developers.google.com/drive/v3/web/quickstart/python

  7. die JSON-Datei heruntergeladen haben, legte sie in den „.credentials“ Ordner und umbenannt in "client_secret.json". (wie in Zeile 28 erwähnt)

  8. Installieren Sie Google Bibliothek unter CMD "pip install --upgrade google-api-python-client".

  9. Danach kopierte ich das Skript und speicherte es als "cleanup.py".

# This script removes the file revision created by the Zepto Ransomware and 
 
# renames the file back to what it was before infection. 
 
# This file CHANGES the drive. USE IT AT YOUR OWN RISK. I'M NOT RESPONSIBLE FOR ANY LOSE. 
 
# 
 
# Requirements : 
 
# * Avoid encoding problem by setting the python encoding before running the script 
 
# $ export PYTHONIOENCODING=utf8 
 
# * Turn on the Drive API and generate a OAuth client ID : https://developers.google.com/drive/v3/web/quickstart/python 
 

 
from __future__ import print_function 
 
import httplib2 
 
import os 
 
import json 
 

 
from apiclient import discovery 
 
import oauth2client 
 
from oauth2client import client 
 
from oauth2client import tools 
 

 
try: 
 
    import argparse 
 
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() 
 
except ImportError: 
 
    flags = None 
 

 
# If modifying these scopes, delete your previously saved credentials at ~/.credentials/drive-python-quickstart.json 
 
SCOPES = 'https://www.googleapis.com/auth/drive' 
 
CLIENT_SECRET_FILE = 'client_secret.json' 
 
APPLICATION_NAME = 'Drive API Python Quickstart' 
 

 
def get_credentials(): 
 
    """ 
 
    Gets valid user credentials from storage. 
 

 
    If nothing has been stored, or if the stored credentials are invalid, 
 
    the OAuth2 flow is completed to obtain the new credentials. 
 

 
    Returns: 
 
     Credentials, the obtained credential. 
 
    """ 
 
    home_dir = os.path.expanduser('~') 
 
    credential_dir = os.path.join(home_dir, '.credentials') 
 
    if not os.path.exists(credential_dir): 
 
     os.makedirs(credential_dir) 
 
    credential_path = os.path.join(credential_dir, 'drive-python-quickstart.json') 
 

 
    store = oauth2client.file.Storage(credential_path) 
 
    credentials = store.get() 
 
    if not credentials or credentials.invalid: 
 
     flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) 
 
     flow.user_agent = APPLICATION_NAME 
 
     if flags: 
 
     credentials = tools.run_flow(flow, store, flags) 
 
     else: 
 
     # Needed only for compatibility with Python 2.6 
 
     credentials = tools.run(flow, store) 
 
     print('Storing credentials to ' + credential_path) 
 
    return credentials 
 

 
def deleteFilesWithSuffix(suffix, service): 
 
    results = service.files().list(
 
     corpus="domain", 
 
     spaces="drive", 
 
     pageSize=1000, 
 
     orderBy="folder,modifiedTime desc,name", 
 
     q="name contains '" + suffix + "'", 
 
     fields="nextPageToken, files(id, name)" 
 
     ).execute() 
 
    items = results.get('files', []) 
 
    if not items: 
 
    print('No files found.') 
 
    else: 
 
    for item in items: 
 
     if item['name'].endswith(suffix): 
 
     try: 
 
      deleteFile = service.files().delete(fileId=item['id']).execute() 
 
      print("Deleted file : " + item['name']) 
 
     except Exception as e: 
 
      print("Could not delete file : " + item['name'] + ". Details : " + str(e)) 
 

 
def renameFile(fileId, originalFilename, service): 
 
    try: 
 
    print("Renaming file " + fileId + " to " + originalFilename) 
 
    service.files().update(fileId=fileId, body={'name': originalFilename}, fields='name').execute() 
 
    except Exception as e: 
 
    print("Could not rename file " + fileId + "/Details : " + str(e)) 
 

 
def revertFiles(suffix, service): 
 
    results = service.files().list(
 
     corpus="domain", 
 
     spaces="drive", 
 
     pageSize=1000, 
 
     orderBy="folder,modifiedTime desc,name", 
 
     #q="modifiedTime > '2016-09-04T12:00:00'", 
 
     q= "name contains '" + suffix + "'", 
 
     fields="nextPageToken, files(id, name)" 
 
    ).execute() 
 
    items = results.get('files', []) 
 
    if not items: 
 
    print('No files found.') 
 
    else: 
 
     for item in items: 
 
     details = service.files().get(fileId=item['id'], fields="lastModifyingUser,name").execute() 
 
     if details['name'].endswith(suffix): 
 
      print("About to handle file " + details['name'] + " having id " + item['id']) 
 
      revs = service.revisions().list(fileId=item['id'], fields="kind,revisions").execute() 
 
      allrev = revs['revisions'] 
 
      lastRev = allrev[-1] 
 
      if not lastRev['originalFilename'].endswith(suffix): 
 
       # there was a rename problem during previous run -> fix it 
 
       originalFilename = lastRev['originalFilename'] 
 
       renameFile(item['id'], originalFilename, service) 
 
      elif len(allrev) > 1: 
 
       origRev = allrev[-2] 
 
       if lastRev['originalFilename'].endswith(suffix): 
 
        try: 
 
        print("Removing last revision of file " + details['name']) 
 
        revDel = service.revisions().delete(fileId=item['id'], revisionId=lastRev['id']).execute() 
 
        originalFilename = origRev['originalFilename'] 
 
        renameFile(item['id'], originalFilename, service) 
 
        except Exception as e: 
 
        print("Could not process file : " + details['name'] + "/Details : " + str(e)) 
 

 
def main(): 
 
    credentials = get_credentials() 
 
    http = credentials.authorize(httplib2.Http()) 
 
    service = discovery.build('drive', 'v3', http=http) 
 

 
    deleteFilesWithSuffix('_HELP_instructions.html', service) 
 
    revertFiles('zepto', service) 
 

 
if __name__ == '__main__': 
 
    main()

  1. ich das Skript über CMD „Python cleanup.py“ lief.

Ich erhalte eine Fehlermeldung:

C:\Python27\Scripts>python cleanup.py 
 
Traceback (most recent call last): 
 
    File "cleanup.py", line 133, in <module> 
 
    main() 
 
    File "cleanup.py", line 125, in main 
 
    credentials = get_credentials() 
 
    File "cleanup.py", line 48, in get_credentials 
 
    credentials = store.get() 
 
    File "C:\Python27\lib\site-packages\oauth2client\client.py", line 407, in get 
 
    return self.locked_get() 
 
    File "C:\Python27\lib\site-packages\oauth2client\file.py", line 54, in locked_get 
 
    credentials = client.Credentials.new_from_json(content) 
 
    File "C:\Python27\lib\site-packages\oauth2client\client.py", line 302, in new_from_json 
 
    module_name = data['_module'] 
 
KeyError: '_module'

Was habe ich falsch gemacht? Ist es möglich, dass etwas mit der credentials/jason-Datei nicht stimmt?

Jetzt bin ich hier Jungs und bitten Sie um Hilfe. Vielleicht können wir dieses Skript ausführen, damit ich die letzte funktionierende Version meiner Dateien wiederherstellen kann.

Ich schätze wirklich jede Hilfe, die Sie zur Verfügung stellen können.

Antwort

0

Schauen Sie sich diese Seite an? Https://github.com/hut6/google-drive-restore

Haben Sie Schritt 1 ausprobiert?

Sie müssen das Google Admin SDK und die Google Drive-APIs in der Google Developers Console unter einem Kunden hinzufügen. Laden Sie die JSON-Anmeldeinformationsdatei herunter, und fügen Sie sie dem Stammverzeichnis als "credentials.json" hinzu.

+1

Ich habe sowohl "Google Admin SDK" und "Google Drive API" aktiviert, aber immer noch dieselbe Fehlermeldung. Ist es möglich, dass der Fehler mit den Anmeldeinformationen (JSON-Datei) zusammenhängt? Ich legte die JSON-Datei auf C: root, auch in einem Ordner ".Credentials" auf C: und die gleichen Schritte in meinem Benutzerordner. Keine Änderung. Irgendeine Idee? – x0100

Verwandte Themen