Bonjour, Habr! Dans les moments difficiles, nous vivons, n'est-ce pas? Les gens sont égoïstes, ne reconnaissent pas la valeur des œuvres des autres, aiment venir à tout prêt à la fois. La propriété intellectuelle pour beaucoup ne ressemble en général qu’à une plaisanterie bureaucratique: «Comment se fait-il que les informations soient gratuites, car c’est IN-FOR-MA-QI-I !!! 11». Je suis d'accord, idéalement c'est le cas. Ces anarchies, les humeurs et les philosophies rebelles des pirates / pirates clandestins, qui gardent les droits des gens ordinaires, ne me sont pas étrangères. Mais le paradoxe est que la vraie justice consiste également à rembourser chacun pour son travail et ses mérites, de sorte que dans la plupart des cas, le piratage est une entreprise antagoniste. Mais ici, la politique de prestation de services pour la protection de la propriété intellectuelle, proposée par un merveilleux vendeur comme InfoProtector, m'a provoqué une colère juste.
Sous la coupe, l'histoire de la façon dont j'ai acheté un cours vidéo payant est tombée précipitée après avoir réalisé que je ne pouvais pas en sauvegarder les vidéos pour les revoir à l'avenir, je me suis fâché contre ceux qui avaient caché ce logiciel quasi protecteur (qui, entre autres, est impitoyable traîne et mange beaucoup de ressources machine) et a décidé de rétablir un peu la justice ... Sans enfreindre la loi, bien sûr. Amen.
AVIS DE NON-RESPONSABILITÉ. Tout ce qui suit a été publié à des fins de recherche et est destiné à remplir une fonction exclusivement éducative. L'auteur n'est pas responsable de l'utilisation illégale des informations de ce poste et en aucun cas ne demande instamment de le percevoir comme un "guide d'action".
Comment c'était
C'était un week-end gratuit, et j'ai décidé de présenter le XXXX p honnêtement gagné. à un cours vidéo de cinq heures. Nous l'appellerons le «cours de recyclage pour le travailleur de la restauration» afin qu'il n'y ait pas de parallèles. En général, je ne suis pas partisan de la perception de l'information par le biais de cours vidéo (oh, très contre-productif), mais je n'ai pas pu y résister directement - j'ai été victime de bannières publicitaires colorées.
J'ai payé, une lettre s'est envolée dans le courrier contenant des liens pour télécharger des documents inventés (liens) par le randomiseur InfoProtector et a été envoyée à un CDN à proximité. Dans le corps de la lettre se trouve la gratitude de l'auteur pour l'achat et la clé d'enregistrement, qui a proposé d'activer l'achat.
Téléchargez l'archive. Le dossier d'archives. Le fichier exécutable se trouve dans le dossier.
Dans le fichier exécutable se trouve un œuf. Je lance exe'shnik - c'est ici qu'ils m'ont exposé toute la vérité, qui dans un récit gratuit sonne quelque chose comme ça (lu d'une voix nasillarde):
InfoProtector, un mécanisme de protection des informations numériques, a été appliqué à ce cours vidéo; pour le premier lancement (lire «activation du produit»), vous avez besoin d'un accès Internet; regarder des vidéos n'est possible qu'à partir de notre programme, de notre lecteur; l'installation du cours vidéo n'est possible que sur deux ordinateurs (le cours vidéo est lié à la configuration de l'environnement OS / matériel, comme il s'avère plus tard).
À ce stade, j'étais un peu contrarié. Autrement dit, non seulement ils m'ont appelé dès la porte une personne malhonnête qui ne serait privée que du travail de monétisation de quelqu'un d'autre, mais aussi le taux pour lequel j'ai payé un montant décent ne serait disponible que jusqu'à la réinstallation du système.
«Ça ne marchera pas», ai-je décidé et j'ai commencé une série d'expériences.
Restrictions d'InfoProtector
Afin de ne pas perdre de temps en vain, je me suis d'abord tourné vers le World Wide Web pour découvrir que les gens avaient déjà compris le mécanisme de protection de ces gars (toutes les subtilités du travail de protection, bien sûr, n'ont pas été révélées).
Ce que j'ai réussi à découvrir:
- La clé d'activation est générée de manière aléatoire lors du paiement du cours et est utilisée pour être un serveur authentifié qui, en cas de succès, envoie au client une clé AES pour déchiffrer le matériel vidéo disponible à partir du lecteur personnalisé de l'entreprise. L'inversion de l'application est longue et longue (c'est-à-dire peu pratique pour ce type de tâche), j'ai donc décidé de quitter ce chemin.
- L'utilisation des outils d'enregistrement d'écran est impitoyablement bloquée de plusieurs façons: vous ne pouvez pas lancer simultanément le lecteur et n'importe quel capture d'écran sur le même hôte, car le programme détecte les processus en cours avec leurs métadonnées: noms des titres des fenêtres; description des fichiers exécutables; noms des fournisseurs cousus dans les applications de capture d'exe'shniki; même un navigateur ouvert sur une page dont le nom contient le mot "Fraps", par exemple, fait également l'objet d'une alerte et d'un arrêt du lecteur.
- Les bacs à sable, les machines virtuelles et le contenu en streaming à partir de connexions à distance (rdesktop, RAdmin, TeamViewer) ne sont également pas une option - un logiciel intelligent peut les détecter au fil des ans, se tuant à chaque occasion.
Mais malgré les deux derniers points, le vecteur d'attaque le plus réel reste l'enregistrement d'écran, qui peut être implémenté de plusieurs manières:
- Trouvez un programme de capture qui ne contient pas de balises dans son nom / producteur / description qu'InfoProtector ne connaît pas et que, par conséquent, ce dernier ne déclenchera pas. Inconvénients: long, ennuyeux et non un fait, ce qui est en principe réalisable.
- Trouvez un produit open source avec les fonctionnalités nécessaires et compilez votre version de la capture d'écran, en remplaçant dans la source tout ce qui peut sembler suspect à la protection InfoProtector en théorie. Inconvénients: longs, ennuyeux, longs (généralement de tels projets sont plutôt encombrants, se composent de centaines (?) De fichiers et ont des tas de dépendances dans les sources, donc juste Ctrl-H ne fonctionne pas, vous n'avez pas besoin de le modifier afin que mimikatz ne coupe pas Windows Defender).
- Écrivez votre décision sur quelque chose de script afin de ne pas risquer avec un fichier exécutable compilé de nature inconnue (on ne sait pas ce que cette infection dira) qui implémente la fonctionnalité triviale de prendre rapidement des captures d'écran d'une zone sélectionnée de l'écran (heureusement, InfoProtector le permet) et l'écrire séparément piste sonore, qui s'est également avérée légitime et aussi simple que possible.
Les inconvénients du troisième paragraphe sont introuvables, vous pouvez donc continuer.
Capture d'écran de la planète!
Tout d'abord: voyons comment automatiser le processus de création d'un nuage de captures d'écran à l'aide d'un script. Bien sûr, ce sont: Python, et plus
OpenCV , et plus
MSS , et plus
PIL .
Le processus est extrêmement simple:
- Définissez la taille de la fenêtre du lecteur égale à la résolution de la vidéo de sortie que nous aimerions avoir (il est logique de prendre en compte l'emplacement des commandes de script - une fenêtre avec un terminal, par exemple, qui ne devrait pas tomber dans la zone d'enregistrement). Cela peut être fait avec un logiciel aussi merveilleux.
- Nous positionnons la fenêtre du lecteur de manière à trouver celle qu'il serait le plus facile d'expliquer au script - le coin inférieur droit de l'écran (je pense que le système de référence associé aux bordures de l'écran est l'option la plus pratique).
- Définissons un script déjà écrit (qui sera un peu plus bas) pour prendre des captures d'écran de cette zone.
- Nous ne touchons pas à ce système gênant pendant toute la lecture vidéo.
Script sous le spoiler:
fckInfoprotector.py#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Usage: python3 fckInfoprotector.py <WIDTH> <HEIGHT>
import sys
import numpy as np
import cv2
from mss.windows import MSS as mss
from PIL import Image
class Capturer:
def __init__(self, w, h, resolution='1080p', fps=24.975):
if resolution == '1080p':
self.monitor = {
'top': 1080 - h,
'left': 1920 - w,
'width': w,
'height': h
}
elif resolution == '1440p':
self.monitor = {
'top': 1440 - h,
'left': 2560 - w,
'width': w,
'height': h
}
else:
raise ValueError('Unsupported monitor resolution')
self.sct = mss()
self.vid = cv2.VideoWriter(
'output.avi',
cv2.VideoWriter_fourcc(*'XVID'),
fps=fps,
frameSize=(
self.monitor['width'],
self.monitor['height']
)
)
def mainloop(self):
while True:
sct_img = self.sct.grab(self.monitor)
sct_img_size = (sct_img.width, sct_img.height)
img = Image.frombytes(
'RGB',
sct_img_size,
sct_img.rgb
)
frame = cv2.cvtColor(
np.array(img),
cv2.COLOR_BGR2RGB
)
self.vid.write(frame)
if __name__ == '__main__':
if len(sys.argv) != 3:
print(f'Usage: {sys.argv[0]} <WIDTH> <HEIGHT>')
sys.exit()
w, h = (int(x) for x in sys.argv[1:3])
capturer = Capturer(w, h, fps=50.0)
try:
capturer.mainloop()
except KeyboardInterrupt:
print('Interrupted')
: Windows .
Windows 7: -> -> -> -> -> « »:
, :
, , .
VirtualDub.
:
:
, . . . , , 50- ( , )

,

:

, , .
F7! .
? .
-, , . -, , . , .
-, : ( NVIDIA, !), , , , , «», ?
-, : « DVD- !». , . , , ( ), , .
: , , -, (, ), , . , ().
, , – .
-, !