Poste com a bandeira preta ou Como eu não coloquei seu curso em vídeo no rastreador

captain_flint.jpg

Olá Habr! Em tempos difíceis, vivemos, não é? As pessoas são egoístas, não reconhecem o valor dos trabalhos de outras pessoas, gostam de chegar a tudo pronto ao mesmo tempo. A propriedade intelectual para muitos em geral não parece mais que uma piada burocrática: “Como é que essa informação deve ser gratuita, porque isso é IN-FOR-MA-QI-I !!! 11”. Eu concordo, o ideal é que seja assim. Essas suas anarquias, os humores rebeldes e filosofias de hackers / piratas clandestinos, que guardam os direitos das pessoas comuns, não são estranhos para mim. Mas o paradoxo é que a verdadeira justiça também deve retribuir a todos por seu trabalho e mérito; portanto, na maioria dos casos, a pirataria é uma empresa antagônica. Mas aqui a política de fornecer serviços para a proteção da propriedade intelectual, proposta por um fornecedor maravilhoso como o InfoProtector, me causou uma raiva justa.

Sob o corte, a história de como eu comprei um curso de vídeo pago caiu em precipício depois de perceber que não poderia salvar os vídeos dele para re-visualizá-lo no futuro. Fiquei irritado com aqueles que ocultaram esse software quase protetor (que, entre outras coisas, é impiedoso atrasa e consome muitos recursos da máquina) e decidiu restaurar um pouco a justiça ... Sem violar a lei, é claro. Amém.
AVISO LEGAL. Todos os itens a seguir foram publicados para fins de pesquisa e se destinam a desempenhar uma função exclusivamente educacional. O autor não é responsável pelo uso ilegal de informações deste post e, em nenhum caso, não deseja percebê-las como um "guia de ação".

Como foi


Foi um fim de semana grátis, e eu decidi apresentar o honestamente merecido XXXX p. em um curso de vídeo de cinco horas. Vamos chamá-lo de "Curso de atualização para o profissional de catering" para que não haja paralelos. Em geral, não sou adepto da percepção de informações por meio de tutoriais em vídeo (ah, é muito contraproducente), mas não pude resistir diretamente a ela - fui vítima de banners publicitários coloridos.

Paguei, uma carta voou para o correio contendo links para baixar os materiais inventados (links) pelo randomizador InfoProtector e cuspiu em uma CDN próxima. No corpo da carta, está a gratidão do autor pela compra e a chave de registro, que propôs ativar a compra.

Faça o download do arquivo. A pasta de arquivamento. O arquivo executável está na pasta No arquivo executável é um ovo. Eu lancei exe'shnik - foi aqui que eles me expuseram toda a verdade, que em uma recontagem livre soa algo parecido com isto (lido em uma voz nasal):
O InfoProtector, um mecanismo de proteção de informações digitais, foi aplicado a este curso em vídeo; para o primeiro lançamento (leia “ativação do produto”), você precisa de acesso à Internet; assistir a vídeos é possível apenas em nosso programa, em nosso player; a instalação do curso em vídeo é possível apenas em dois computadores (o curso em vídeo está vinculado à configuração do ambiente de SO / hardware, como será mostrado mais adiante).

Nesse ponto, fiquei um pouco chateado. Ou seja, não só eles me chamaram de porta de uma pessoa desonesta que só seria privada do trabalho de monetização de outra pessoa, mas também a taxa pela qual paguei uma quantia decente só estaria disponível para mim até que o sistema fosse reinstalado.

"Não vai dar certo", decidi e comecei uma série de experimentos.

Restrições do InfoProtector


Para não perder tempo em vão, para começar, virei para a World Wide Web para descobrir que as pessoas já haviam descoberto o mecanismo de proteção desses caras (todas as sutilezas do trabalho de proteção, é claro, não foram divulgadas).

O que eu consegui descobrir:

  1. A chave de ativação é gerada aleatoriamente ao pagar pelo curso e é usada para ser um servidor autenticado, que, se bem-sucedido, envia ao cliente uma chave AES para descriptografar os materiais de vídeo disponíveis no player personalizado da empresa. A reversão do aplicativo é demorada e demorada (ou seja, impraticável para esse tipo de tarefa), então decidi deixar esse caminho.
  2. O uso de ferramentas de gravação de tela é implacavelmente bloqueado de várias maneiras: você não pode iniciar simultaneamente o player e qualquer capturador de tela no mesmo host, porque o programa detecta processos em execução com seus metadados: nomes de títulos de janelas; descrição de arquivos executáveis; nomes de fornecedores costurados em aplicativos de captura exe'shniki; mesmo um navegador aberto em uma página cujo nome contenha a palavra "Fraps", por exemplo, também é objeto de um alerta e desligamento do player.
  3. Caixas de areia, máquinas virtuais e conteúdo de streaming de conexões remotas (rdesktop, RAdmin, TeamViewer) também não são uma opção - o software inteligente pode detectá-los ao longo dos anos, matando-se a cada oportunidade.

Mas, apesar dos dois últimos pontos, o vetor de ataque mais real permanece a gravação da tela, que pode ser implementada de várias maneiras:

  1. Encontre um programa de captura que não contenha palavras de farol em seu nome / produtor / descrição que o InfoProtector não conheça e que, portanto, o último não será acionado. Contras: longo, chato e não um fato, que em princípio é factível.
  2. Encontre um produto de código aberto com a funcionalidade necessária e compile sua versão da captura de tela, substituindo na fonte tudo o que possa parecer suspeito para o InfoProtector em teoria. Contras: longo, chato, demorado (geralmente esses projetos são bastante pesados, consistem em centenas (?) De arquivos e têm montes de dependências nas fontes, portanto, apenas o Ctrl-H não funciona, você não precisa editá-lo para que o mimikatz não corte o Windows Defender).
  3. Escreva sua decisão em algum script para não arriscar com um arquivo executável compilado de natureza desconhecida (não se sabe o que essa infecção dirá) que implementa a funcionalidade trivial de tirar rapidamente capturas de tela de uma área selecionada da tela (felizmente, o InfoProtector permite) e anotá-las separadamente trilha sonora, que também se mostrou legítima e simples.

As desvantagens do terceiro parágrafo não foram encontradas, para que você possa prosseguir.

Captura de tela do planeta!


Primeiro: vamos descobrir como automatizar o processo de criação de uma nuvem de capturas de tela usando um script. Obviamente, são eles: Python, e mais OpenCV , e mais MSS e mais PIL .

O processo é extremamente simples:

  1. Defina o tamanho da janela do player igual à resolução do vídeo de saída que gostaríamos de ter (é lógico levar em consideração o local dos controles de script - uma janela com um terminal, por exemplo, que não deve cair na área de gravação). Isso pode ser feito com um software tão maravilhoso.
  2. Posicionamos a janela do player em uma posição que descubra qual seria mais fácil de explicar para o script - o canto inferior direito da tela (acho que o sistema de referência associado às bordas da tela é a opção mais conveniente).
  3. Vamos definir o script já escrito (que será um pouco menor) para tirar screenshots dessa área.
  4. Não tocamos nesse sistema estranho durante toda a reprodução do vídeo.

Script sob o 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: -> -> -> -> -> « »:

1.png

, :

2.png



, , . VirtualDub.

:

3.png

:

4.png

, . . . , , 50- ( , ) $X$, $X$ :

$X=captured\_video\_duration\times 50\div original\_video\_duration$


5.png

, , .

F7! .


? .

-, , . -, , . , .

-, : ( NVIDIA, !), , , , , «», ?

-, : « DVD- !». , . , , ( ), , .

: , , -, (, ), , . , ().

, , – .

-, !

Source: https://habr.com/ru/post/pt449970/


All Articles