[PYTHON] Un petit script pour l'autodéfense des logiciels malveillants

Passez-vous vos journées à travailler à domicile? La semaine dernière, j'ai été précipité sur les lieux pour la première fois depuis longtemps A l'intérieur du train, Corona était comme un mensonge

Qu'est-ce que Corona ...: penser:

Augmentation de la demande de sécurité

En dehors de cela, de nos jours, lorsque le nombre de personnes restant à la maison a augmenté, à propos de la sécurité des terminaux Je pense que j'ai plus de pensées.

Récemment, j'ai entendu et entendu des nouvelles telles que des logiciels malveillants tels que EMOTET Je pense que si vous avez peur, votre vigilance peut augmenter temporairement.

Mais quand la date et l'heure viennent, une telle vigilance diminue, et j'accède à des sites étranges, Il y a aussi la possibilité d'intégrer des choses étranges dans votre site préféré Ce n'est pas sans ça.

Comment de tels logiciels malveillants peuvent faire de mauvaises choses sur nos appareils Vous devez vous inscrire au démarrage automatique. Ainsi, en vérifiant le programme qui démarre automatiquement chaque jour, Si cela devient une chance de remarquer une personne suspecte qui se faufile en nous ...!

bouhan_camera_dorobou[1].png

Donc en utilisant un outil pratique appelé "autorunsc.exe" J'ai écrit un script qui collecte les journaux pour le programme de démarrage automatique.

importer une partie

import subprocess
import zipfile
import os
import sys
import urllib.request as req
import pandas as pd
from glob import glob
from plyer import notification
from alittleuseful import loglotate

# pip install pandas
# pip install plyer
# pip install git+https://github.com/ardnico/main

bien que je publie personnellement sur github, Une bibliothèque pour écrire des journaux Nous avons publié d'autres fonctionnalités étranges, mais si vous le souhaitez, veuillez les utiliser. Je suis heureux. .. ..

Définition de nom

csv_file = f'{os.getcwd()}\\out.csv'
rcsv_file = f'{os.getcwd()}\\out_old.csv'
enc = "utf-16"
URL = "https://download.sysinternals.com/files/Autoruns.zip"
zip_file = "A.zip"
path='.'
logger = loglotate(
    logname = "StartUpSec",
    outputdir = [os.getcwd()],
    lsize = 100000,
    num = 20,
    timestanp = 1 # 1:on other:off
)

Nommage statique et partie appel de fonction

Fonction: Télécharger autorunsc.exe

def download_tool(tf:bool):
    # file download
    if tf == False:
        logger.write('[INFO]Because the tool has not existed, the one will download')
        req.urlretrieve(URL,zip_file)
        with zipfile.ZipFile(zip_file, 'r') as z_file:
            try:
                z_file.extractall(path=path)
                logger.write("[SUCCESS]Tool download succeeded")
            except Exception as e:
                logger.write('[ERROR]Failed to download or unzip autorunsc.exe')
                logger.write(f'[ERROR]{e}')
                sys.exit(0)

Si "autorunsc.exe" n'existe pas, utilisez request Téléchargez l'outil. Le téléchargement se fera jusqu'à la décompression ZIP.

Fonction: De l'exécution de "autorunsc.exe" à la comparaison des programmes de démarrage automatique

def get_log():
    if os.path.exists(rcsv_file) == True:
        try:
            os.remove(rcsv_file)
        except Exception as e:
            logger.write('[ERROR]Failed to remove oldcsvfile')
            logger.write(f'[ERROR]{e}')
            sys.exit(0)
    if os.path.exists(csv_file) == True:
        try:
            os.rename(csv_file,rcsv_file)
            df_old = pd.read_csv(rcsv_file,encoding=enc)
        except Exception as e:
            logger.write('[ERROR]Failed to rename oldcsvfile')
            logger.write(f'[ERROR]{e}')
            sys.exit(0)
    else:
        df_old = ''
    with open(csv_file, mode='w', encoding=enc) as fp:
        cp = subprocess.run([f'{os.getcwd()}\\autorunsc.exe','-nobanner','-c','-a','*'], encoding=enc, stdout=fp)
    try:
        if df_old == '':
            flag = 0
        else:
            flag = 2
    except:
        if len(df_old.index) <= 0:
            flag = 0
        else:
            flag = 1
    if flag==0 or flag==2:
        logger.write("[INFO]StartUp Program's log has created")
    else:
        with open(csv_file,encoding=enc) as f:
            data = f.read().split('\n')
        with open(rcsv_file,encoding=enc) as f:
            data2 = f.read().split('\n')
        l_diff = list(set(data)^set(data2))
        if len(l_diff) > 0:
            logger.write("[DIFF INFO]The difference of the startup program has existed")
            for i in l_diff:
                logger.write(f"[DIFF]{i}")
                notification.notify(
                    title='The difference of startup program has existed',
                    message=i,
                    app_name='Diff notify'
                )
        else:
            logger.write("[INFO]The difference did not exsist")

C'est devenu un peu long à cause du traitement des fichiers CSV, Le mouvement est le suivant.

  1. Faire pivoter le fichier CSV
  2. Comparez le contenu du dernier CSV et du fichier CSV précédent
  3. S'il y a une différence, écrivez dans le journal + notification pop

Partie exécution

if __name__ == "__main__":
    os.chdir(r"C:\python\notebooks\StartUpProgramSec")
    tooltf = os.path.exists(f"{os.getcwd()}\\autorunsc.exe")
    download_tool(tooltf)
    get_log()
    logger.write("[INFO]The process completed")

c'est tout.

Rendez votre travail à la maison plus sûr, même un peu J'espère qu'il se répandra ... tomneko1215B1328_TP_V.jpg

Recommended Posts

Un petit script pour l'autodéfense des logiciels malveillants
Conseils pour ouvrir une scène avec une référence brisée dans un script
(Pour moi) Flask_2 (liste et pour, étend, et un peu plus)
Remarques sur l'intégration du langage de script dans les scripts bash
Remarque 2 pour intégrer le langage de script dans un script bash
Créer un script Python pour Wake on LAN (Wake on LAN over NAT [5])
Essayons un script shell
Fait une commande pour FizzBuzz
Un peu plus sur le FIFO
Un peu coincé dans le chainer