Как написать программу для взлоmа

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

Например, вход в учетную запись электронной почты без авторизации является частью взлома этой учетной записи. Получение доступа к компьютеру или мобильному телефону без авторизации – это взлом. Существует множество способов, которыми пользователь может взломать систему, и основная концепция взлома та же самая: взлом системы без какой-либо аутентификации.

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

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

Существуют разные типы хакеров, вот некоторые из них:

  • Черные хакеры. Хакеры Black Hat – это люди, которые неэтично проникли на сайт для получения данных с административного портала или для манипулирования данными. В основном они делают это для получения прибыли или для получения личных данных. Их основная цель – нанести компании серьезный ущерб, а это может привести даже к опасным последствиям.
  • Белые хакеры. Это хакеры, которые ищут ошибки и сообщают о них организациям или фирмам с соблюдением этических норм. Они авторизованы как пользователи для тестирования и проверки ошибок в сетях или веб-сайтах и сообщают об этом разработчикам или уполномоченным лицам. Хакер в белой шляпе обычно получает всю необходимую информацию о веб-сайте или сетевой системе, которые они тестируют, от самой фирмы. Взломав систему с авторизацией, они могут спасти сайт от злоумышленников в будущем.
  • Серые хакеры. Эти типы хакеров получают доступ к данным веб-сайта или сети и нарушают кибер-закон. Но у них нет таких же намерений, как у хакеров Black Hat. Они взламывают систему для общего блага, но они так же отличаются от белых хакеров, поскольку они используют уязвимости публично, а хакеры в белой шляпе делают это в частном порядке для фирмы или организации.

Использование Python для программирования взлома

Язык Python широко используется для общих целей, и это язык программирования высокого уровня. Это очень простой и мощный язык сценариев с открытым исходным кодом и объектно-ориентированный.

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

Как взламывают пароли?

Как известно, пароли веб-сайтов или файлов не хранятся в виде простого текста в базе данных веб-сайтов. В этом уроке мы собираемся взломать простой текст, защищенный паролем. В простом тексте пароли хранятся в хешированном (md5) формате.

Итак, пользователь должен взять input_hashed (который представляет собой хешированный пароль, хранящийся в базе данных), а затем он должен попытаться сравнить его с хешированием (md5) каждого простого текстового пароля, который можно найти в файле паролей.

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

Эти типы хакерских атак считаются «атаками по словарю».

Пример:

 
import hashlib 
print("# # # # # #  Password Hacking # # # # # #") 
         
# to check if the password is found or not in the text file. 
password_found = 0                                      
  
input_hashed = input(" Please enter the hashed password: ") 
  
password_document = input(" n Please enter the passwords file name including its path(root / home/): ") 
   
try: 
    # here, we will try to open the passwords text file. 
    password_file = open(password_document, 'r')              
except: 
    print("Error: ") 
    print(password_document, "is not found.n Please enter the path of file correctly.") 
    quit() 
  
  
# now, for comparing the input_hashed with the hashes of the words present in the password text file for finding the password. 
  
for word in password_file: 
    # to encode the word into utf-8 format 
    encoding_word = word.encode('utf-8')  
              
    # to Hash the word into md5 hash 
    hashed_word = hashlib.md5(encoding_word.strip())   
   
    # to digest that the hash into the hexadecimal value     
    digesting = hashed_word.hexdigest()         
       
    if digesting == input_hashed: 
        # to compare the hashes 
        print("Password found.n The required password is: ", word)   
        password_found = 1 
        break 
  
# if the password is not found in the text file. 
if not password_found: 
    print(" The password is not found in the ", password_document, "file")   
    print('n') 
print(" # # # # # # Thank you # # # # # # ") 

Вход 1:

 
# # # # # #  Password Hacking # # # # # # 
 Please enter the hashed password:  1f23a6ea2da3425697d6446cf3402124 
  
Please enter the passwords file name including its path(root / home/):  passwords.txt 

Выход:

Password found. 
 The required password is:  manchester123 
 
 # # # # # # Thank you # # # # # # 

Вход 2:

 
# # # # # #  Password Hacking # # # # # # 
 Please enter the hashed password:  b24aefc835df9ff09ef4dddc4f817737 
  
 Please enter the passwords file name including its path(root / home/):  passwords.txt 

Выход:

Password found. 
 The required password is:  heartbreaker07 
 
 # # # # # # Thank you # # # # # # 

Ввод 3:

# # # # # # Взлом пароля # # # # # #

Пожалуйста, введите хешированный пароль: 33816712db4f3913ee967469fe7ee982

Введите имя файла паролей, включая путь к нему (root / home /): passwords.txt

Выход:

Пароль не найден в файле passwords.txt.

Объяснение:

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

Затем необходимо открыть текстовый файл, но если он не найден в указанном месте, выводится сообщение об ошибке «Файл не найден».

Затем мы сравниваем введенный хешированный пароль с хешированными словами, присутствующими в текстовом файле, чтобы найти правильный пароль; для этого мы должны закодировать слова в формате utf-8, а затем хешировать слова в хеш md5 и перевести хешированное слово в шестнадцатеричные значения.

Если переведенное значение равно входному хэш-паролю, он распечатает найденный пароль и его правильное значение. Но если пароль не найден, это означает, что значение не совпадает с введенным хеш-паролем. Будет напечатано «Пароль не найден».

Заключение

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

Изучаю Python вместе с вами, читаю, собираю и записываю информацию опытных программистов.

Взлом программ для чайников

Время на прочтение
5 мин

Количество просмотров 434K

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

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

Я не буду углубляться в детали и использовать сложные инструменты для взлома. Всё будет расписано «для чайников», т.е. все инструменты будут простыми, легкодоступными и бесплатными. А основным будет Reflector, декомпилятор программ под .NET

В качестве подопытного кролика я выбрал Expresso — анализатор регулярных выражений. Данная программа бесплатная, в лицензии вроде бы ничего не указано про взлом, но при этом без регистрации она будет работать всего 60 дней. Другими словами, вред от взлома данной программы минимальный, к тому же внутреннее её устройство очень уж хорошо подходит для тренировки. Буду надеяться, что автор данной программы не обидится на меня.

Для начала краткий ликбез по структуре .NET программы, для тех кто не знаком с разработкой под данный Framework: весь код, написанный на любом .NET языке (C#, Visual Basic, F#, Delphi.NET) компилируется в особый Intermediate Language, называемый обычно IL или MSIL. Это что-то типа ассемблера, только весьма умного и обладающего весьма мощными инструкциями. И это, в принципе, такой же равноправный язык как и C#, только синтаксис похуже (а возможности больше). Кроме того, в программе на .NET активно используются метаданные, т.е. вся информация о классах, метода, пропертях, атрибутах и всём остальном сохранена в исполняемом файле.

Т.е. на самом деле, декомпиляция программы не очень верное понятие в данном случае. Она и так вся в открытом виде лежит, а инструменты в виде Reflector’а занимаются тем, что приводят конструкции MSIL к соответствующим конструкциям C# или другого языка, повышая читабельность кода.

Перейдём, собственно, к взлому.

0. Обнуление триала

Собственно, это даже не взлом, а полулегальный способ продлить срок использования неактивированной программы. Заключается он в том, что находится место, где хранится дата первого запуска и меняется/уничтожается. После этого всё можно пользоваться программой до следующего срока.

Посмотрим на нашего подопытного рефлектором. Немного погуляв по коду, находим интересную строчку в конструкторе MainForm:

Открываем редактор реестра, идём в HKEY_CURRENT_USERSoftwareUltrapicoExpresso и видим следующие ключи:

Удаляем их и получаем ещё 60 дней работы.

Данный вариант, конечно, прост и очевиден, но если он даже был бы сложнее — потребовалось бы чуть больше времени провести в рефлекторе, чтобы выяснить все места, куда пишется информация и зачистить их.

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

1. Написание keygen’а

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

Открываем рефлектор и ищем код на предмет классов содержащих License или Registration, видим:

При вводе имени и кода по имени вычисляется некий хеш, который и сравнивается с кодом.

Данный хеш использует DES и всякие префиксы

Байты конвертятся в строку с помощью данного метода.

Теперь всё выяснилось, открываем IDE и копируем все необходимые куски кода (или сами реализовываем). Осталось только выяснить, какие значения у Prefix, Suffix и параметры реализации MyDES. Я их приводить не буду, это уже технические детали.

В результате генерируем ключ на любое имя и видим:

Бинго!

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

2. Использование враппера

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

  1. Указать программе, что лицензия уже проверена
  2. Указать программе, что лицензия корректна

Как это сделать? Я уже упоминал о наличии метаданных в исполняемых файлах в начале, этим и воспользуемся. Посмотрим как запускается программа и как проверяется лицензия:

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

Воспользуемся этим. Сделаем новый проект, добавим Reference на Expresso.exe и запустим его через себя:

Смотрим, что получилось:

Ну кто бы сомневался.

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

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

Но все эти защиты приведут к тому, что злоумышленник будет использовать

3. Физический взлом программы

Тут уже всё серьёзно. Программа целиком декомилируется в MSIL а из него уже собирается обратно (помните, я писал, что MSIL это такой же язык как и C#?). Для декомпиляции нам понадобится утилита из SDK под названием ildasm, а для компиляции компилятор из .NET Framework ilasm.

Запускаем ildasm, открываем Expresso.exe и сохраняем дамп в .il файл. Находим уже рассмотренный метод IsRegistered и добавляем немножко своего кода (без меток):

Потом берём ilasm и собираем всё назад (не забыв подключить ресурсы).

Что делает данный код: устанавливает нужное имя для регистрации (не обязательно), и возвращает статус, что всё хорошо.

Чтобы было понятнее, так это выглядит в рефлекторе, в C#

Т.е. вполне очевидно, что теперь всё будет хорошо:

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

При этом некоторые вещи в MSIL можно сделать очень красиво, например поменять две переменные местами — 4 симпатичных строчки (на C# меньше, но некрасиво).

Чем жертвует злоумышленник: подписью программы, теперь она уже не автора, а его. В некоторых случаях это проблема, если в программе используется множество библиотек. Тогда злобному хакеру придётся разбирать их все и собирать их заново, но если он с этим справится, то у него будет «своя» версия программы подписанная его ключом.

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

Заключение

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

Кодинг
49,276

Перебор пароля Python

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

Еще по теме: Взлом WiFi на Python

Для начала надо выбрать язык. Я решил выбрать Python, так как он приятней глазу, и на нем будет проще объяснить, как работает процесс перебора паролей.

Итак, начнем. Какие модули нам необходимы? Только один — random! Импортируем его.

Далее, надо определиться с переменными. Нам нужны 6.

correctPassword = «1234» # Вводим пароль, который нужно забрутить

wrongPasswords = [] # В этот список будут добавляться уже подобранные пароли, чтобы не повторяться

password = «» # В эту переменную будет записываться сгенерированный пароль,  и, если он ложный, пойдет в wrongPassword

length = 4 # Длина пароля. Эта переменная нужна будет в будущем

chars = «1234567890»  # Символы, из которых будет генерироваться пароль.

run = True # Думаю, не стоит объяснять

Вот и все необходимые переменные.

Теперь необходимо создать цикл. В нем все и будет выполняться. Также добавим в него строчку для обнуления переменной password

Переходим к самому интересному — генерации и перебору паролей.

Сначала создадим цикл for, для генерации пароля. Тут нам и пригодится переменная length.

for i in range(length):

    password += random.choise(chars)

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

if password not in wrongPasswords:

    print(password)

    if password != correctPassword:

        wrongPasswords.append(password)

    else:

        run = False

        break

print(password + » is correct»)

Вот и все! Все работает!

Надеюсь, кому-то данная статья помогла, кому-то просто была интересна.

Весь код полностью:

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

import random

correctPassword = «1234»

wrongPasswords = []

password = «»

length = 4

chars = «12e4567890»

run = True

while run:

    password = «»

    for i in range(length):

        password += random.choise(chars)

    if password not in wrongPasswords:

        if password != correctPassword:

            print(password)

            wrongPasswords.append(password)

        else:

            run = False

            break

print(password + » is correct»)

Еще по теме: Простой кейлоггер на Python

ВКонтакте

Twitter

Facebook

OK

Telegram

WhatsApp

Viber

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
 /***************************************************/
 /* Подбор символов, которые вводит пользователь    */
/***************************************************/
 
#include <stdio.h>
#include <stdlib.h>
#define NUM 94 // размер массива
void fctArr(char a[NUM]); // введение и подбор значений
int main(void)
{
        char arrSym[NUM] = {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', // массив
                            'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z',
                            'x', 'c', 'v', 'b', 'n', 'm', 'Q', 'W', 'E', 'R',
                            'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F',
                            'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B',
                            'N', 'M', '`', '~', '!', '@', '#', '$', '%', '^',
                            '&', '*', '(', ')', '-', '_', '=', '+', '{', '}',
                            '[', ']', '"', '|', '\', '/', '?', ',', '.', '<',
                            '>', ':', ';', '1', '2', '3', '4', '5', '6', '7',
                            '8', '9', '0'
                           };
    fctArr(arrSym); // вызов функции для введения и подбора значений
    return 0;
}
 
void fctArr(char a[NUM])
{
        char sym_0, sym_1, sym_2, sym_3, sym_4, sym_5, sym_6, sym_7;
        int i;
    printf("Enter 8 symbol:n");
    scanf("%c%c%c%c%c%c%c%c", &sym_0, &sym_1, &sym_2, &sym_3, &sym_4, &sym_5, &sym_6, &sym_7);
 
    for(i = 0; i < NUM; i++) // перебирает для введенного значения значение с массива
        {
            if(sym_0 == a[i])
            {
              printf("n1 symbol [%c] = [%d]", a[i], i);
              break;
            }
        }
 
    for(i = 0; i < NUM; i++)
    {
        if(sym_1 == a[i])
            {
              printf("n2 symbol [%c] = [%d]", a[i], i);
              break;
            }
    }
 
    for(i = 0; i < NUM; i++)
    {
        if(sym_2 == a[i])
            {
              printf("n3 symbol [%c] = [%d]", a[i], i);
              break;
            }
    }
 
    for(i = 0; i < NUM; i++)
    {
        if(sym_3 == a[i])
            {
              printf("n4 symbol [%c] = [%d]", a[i], i);
              break;
            }
    }
 
    for(i = 0; i < NUM; i++)
    {
        if(sym_4 == a[i])
            {
              printf("n5 symbol [%c] = [%d]", a[i], i);
              break;
            }
    }
 
    for(i = 0; i < NUM; i++)
    {
        if(sym_5 == a[i])
            {
              printf("n6 symbol [%c] = [%d]", a[i], i);
              break;
            }
    }
 
    for(i = 0; i < NUM; i++)
    {
        if(sym_6 == a[i])
            {
              printf("n7 symbol [%c] = [%d]", a[i], i);
              break;
            }
    }
 
    for(i = 0; i < NUM; i++)
    {
        if(sym_7 == a[i])
            {
              printf("n8 symbol [%c] = [%d]", a[i], i);
              break;
            }
    }
    printf("nn");
    system("pause");
}
from datetime import datetime, timedelta
import time
import vk
import requests
import random
import sys
from colorama import init
import colorama
from os import system, name
import os
init(autoreset=True)



class color:
    Red = '33[91m'
    Green = '33[1;32m'
    Yellow = '33[93m'
    Blue = '33[94m'
    Magenta = '33[95m'
    Cyan = '33[96m'
    White = '33[97m'
    Grey = '33[90m'
    BOLD = '33[1m'
    ITALIC = '33[3m'
    UNDERLINE = '33[4m'
    END = '33[0m'


    
# define our clear function
def clear():

    # for windows
    if name == 'nt':
        _ = system('cls')

    # for mac and linux(here, os.name is 'posix')
    else:
        _ = system('clear')


#vars
color.Cyan

color.END
infinite = 3
token_passed = 0
menu = str(color.Green + '[' + color.Yellow + '1' + color.Green + '] Поиск пользователя по ID [' + color.Yellow + '2' + color.Green + '] Информация о текущем пользователеn['+ color.Yellow + '3' + color.Green + '] Скачать диалоги [' + color.Yellow + '4' + color.Green + '] Скачать вложения из диалогаn[' + color.Yellow + '5' + color.Green + '] Оставить комментарий [' + color.Yellow + '6' + color.Green + '] Спам комментариямиn[' + color.Yellow + '7' + color.Green + '] Отправить сообщение [' + color.Yellow + '8' + color.Green + '] Поиск сообщения по фразеn[' + color.Yellow + '0' + color.Green + '] Выход' + color.END)

while token_passed == 0:
    token = input('Введите токен: ')
    color.END
    session = vk.Session(access_token=token)
    api = vk.API(session ,v='5.92', lang='ru')
    try:
        api.users.get()
        token_passed = 1
    except vk.exceptions.VkAPIError:
        print(color.Green + 'Токен недействителен!' + color.END)
        token_passed = 0
        pass

token_dir = os.path.join(f"{token}")

if not os.path.exists(token_dir):
    os.mkdir(token_dir)
os.chdir(token_dir)

#Сделать коммент
def do_comment():
    clear()
    post_comment = input(color.Yellow + 'ID пользователя(прим: 11111111) >>> ' + color.Green)
    color.END
    postid = input(color.Yellow + 'ID записи(в ссылке после wall******_) >>> ' + color.Green)
    color.END
    mess = input(color.Yellow + 'Текст комментария >>> ' + color.Green)
    color.END
    try:
        api.wall.createComment(owner_id=post_comment,post_id=postid,message=mess)
    except vk.exceptions.VkAPIError:
        print(color.Green + 'У этого пользователя для вас закрыты комментарии.n' + color.END)
        return
    print(color.Green + 'Комментарий отправлен!nn' + color.END)

#Инфа по айди
def info_by_id():
    clear()
    user_id = input(color.Yellow + 'ID пользователя >>> ' + color.Cyan)
    color.END

    user_info = api.users.get(user_ids=user_id, fields='relation, activity, can_write_private_message, online, sex')
    info = user_info[0]
    full_name = str(info.get('first_name') + ' ' + info.get('last_name'))
    link = 'https://vk.com/id' + str(info.get('id'))
    status = info.get('activity')
    check_pm = info.get('can_write_private_message')
    relation = info.get('relation')
    in_friends_check = info.get('can_access_closed')
    is_closed_check = info.get('is_closed')
    relation_list = ['не указано', 'не женат', 'не замужем', 'есть друг', 'есть подруга', 'помолвлен', 'помолвлена', 'женат', 'замужем', 'всё сложно', 'в активном поиске', 'влюблён', 'влюблена', 'в гражданском браке',]
    male = int(info.get('sex'))

    if male == 2: sex = 'Мужской'
    else: sex = 'Женский'

    if is_closed_check == True:
        is_closed = 'закрыта'
    else:
        is_closed = 'открыта'
    if in_friends_check == True:
        in_friends = 'есть'
    else:
        in_friends = 'нет'
    if check_pm == 0:
        pm = 'закрыты'
    elif check_pm == 1:
        pm = 'открыты'
    if relation == 0 or str(relation) == 'None':
        show_r = str(relation_list[0])
        sp = str('Половинка: нет')
    if relation == 1:
        if male == 2:
            show_r = str(relation_list[1])
        else: show_r = str(relation_list[2])
        sp = str('Половинка: нет')
    elif relation == 2:
        if male == 2:
            show_r = str(relation_list[3])
        else: show_r = str(relation_list[4])
        try:
            rp = dict(info.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/id' + partner_id + 'n' + 'Имя половинки: ' + show_partner)

    elif relation == 3:
        if male == 2:
            show_r = str(relation_list[5])
        else: show_r = str(relation_list[6])
        try:
            rp = dict(info.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + ' ' + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/id' + partner_id + 'n' + 'Имя половинки: ' + show_partner)
    elif relation == 4:
        if male == 2:
            show_r = str(relation_list[7])
        else: show_r = str(relation_list[8])
        try:
            rp = dict(info.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + ' ' + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/id' + partner_id + 'n' + 'Имя половинки: ' + show_partner)
    elif relation == 5:
        show_r = str(relation_list[9])
        try:
            rp = dict(info.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + ' ' + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/id' + partner_id + 'n' + 'Имя половинки: ' + show_partner)
    elif relation == 6:
        show_r = str(relation_list[10])
        sp = str('Половинка: нет')
    elif relation == 7:
        if male == 2: show_r = str(relation_list[11])
        else: show_r = str(relation_list[12])
        try:
            rp = dict(info.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + ' ' + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/id' + partner_id + 'n' + 'Имя половинки: ' + show_partner)
    elif relation == 8:
        show_r = str(relation_list[13])
        try:
            rp = dict(info.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + ' ' + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/' + partner_id + 'n' + 'Имя половинки: ' + show_partner)

    print(color.Cyan + "===========================n" + f"Имя: {full_name}n" + f"Ссылка: {link}n" + f"Статус: {status}n" + f'Семейное положение: {show_r}n' + f"Личные сообщения: {pm}n" + f'Страница {is_closed}n' + f'Возможность просмотра страницы: {in_friends}nn' + f'{sp}n' + '===========================' + color.END)

#Скачать истории диалогов
def dl_history():
    clear()
    print(color.Cyan + "Данная функция доступна в нашем Телеграм боте! : @Vk_Tokenner_bot ! Для выхода в главное меню нажмите Q"  + color.END)
    choice = input('>>> ')
    if choice == 'Q' or choice == 'q':
        return
    
#Получение инфы о странице
def page_info():
    clear()
    print(color.Yellow + '[' + color.Cyan + '1' + color.Yellow + '] Записать в profile_info.txt [' + color.Cyan + '0' + color.Yellow + '] Вывести в командную строкуn' + color.END)
    to_txt = int(input(color.Yellow + '>>> '))

    info = api.account.getInfo()

    info1 = api.account.getProfileInfo()

    male = int(info1.get('sex'))

    if male == 2: sex = 'Мужской'
    else: sex = 'Женский'

    pro = ['не указано', 'не женат', 'не замужем', 'есть друг', 'есть подруга', 'помолвлен', 'помолвлена', 'женат', 'замужем', 'всё сложно', 'в активном поиске', 'влюблён', 'влюблена', 'в гражданском браке',]
    relation = int(info1.get('relation'))
    if relation == 1:
        if male == 2:
            show_r = str(pro[1])
        else: show_r = str(pro[2])
        sp = str('Половинка: нет')
    elif relation == 2:
        if male == 2:
            show_r = str(pro[3])
        else: show_r = str(pro[4])
        try:
            rp = dict(info1.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/id' + partner_id + 'n' + 'Имя половинки: ' + show_partner)

    elif relation == 3:
        if male == 2:
            show_r = str(pro[5])
        else: show_r = str(pro[6])
        try:
            rp = dict(info1.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + ' ' + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/id' + partner_id + 'n' + 'Имя половинки: ' + show_partner)
    elif relation == 4:
        if male == 2:
            show_r = str(pro[7])
        else: show_r = str(pro[8])
        try:
            rp = dict(info1.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + ' ' + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/id' + partner_id + 'n' + 'Имя половинки: ' + show_partner)
    elif relation == 5:
        show_r = str(pro[9])
        try:
            rp = dict(info1.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + ' ' + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/id' + partner_id + 'n' + 'Имя половинки: ' + show_partner)
    elif relation == 6:
        show_r = str(pro[10])
        sp = str('Половинка: нет')
    elif relation == 7:
        if male == 2: show_r = str(pro[11])
        else: show_r = str(pro[12])
        try:
            rp = dict(info1.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + ' ' + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/id' + partner_id + 'n' + 'Имя половинки: ' + show_partner)
    elif relation == 8:
        show_r = str(pro[13])
        try:
            rp = dict(info1.get('relation_partner'))
            passed = 1
        except TypeError:
            sp = str('Половинка: нет')
            passed = 0
            pass
        if passed != 0:
            show_partner = str(rp.get('first_name') + ' ' + rp.get('last_name'))
            partner_id = str(rp.get('id'))
            sp = str('Половинка: vk.com/' + partner_id + 'n' + 'Имя половинки: ' + show_partner)

    else:
        show_r = str(pro[0])
        sp = str('Половинка: нет')
    name = str(info1.get('first_name') + ' ' + info1.get('last_name'))


    twofactor = int(info.get('2fa_required'))
    if twofactor == 1: tf = 'Включена'
    else: tf = 'Не включена'

    country = str(info.get('country'))
    ids1 = api.users.get()
    ids = str(ids1[0]['id'])
    link = str('vk.com/id' + ids)
    birthday = str(info1.get('bdate'))
    status = str(info1.get('status'))
        
    

    end = str('====================' + 'n' + 'Имя и фамилия: ' + name + 'n' + 'Пол: ' + sex + 'n' + 'Страна: ' + country + 'n' + 'Статус:' + status + 'n' + 'Дата рождения: ' + birthday + 'n' + 'Ссылка: ' + link + 'n' + 'Двухфакторная аутентификация: ' + tf + 'n' + 'Семейное положение: ' + show_r + 'n' + 'n' + sp + 'n' + '====================')
        
    if to_txt == 1:
        with open('profile_info.txt', 'tw', encoding='utf-8') as f:
            f.write(end)
            f.close()
        print(color.Green + f'Информация о профиле записана в {token}\profile_info.txt !nn' + color.END)
    elif to_txt == 0:
        print(color.Cyan + end + 'nn')

#Отправка сообщений
def send_message():
    clear()
    print(color.Cyan + "Данная функция доступна в нашем Телеграм боте! : @Vk_Tokenner_bot ! Для выхода в главное меню нажмите Q"  + color.END)
    choice = input('>>> ')
    if choice == 'Q' or choice == 'q':
        return

#Дамп вложений из диалога
def dl_attachments_from_dialog():
    clear()
    print(color.Cyan + "Данная функция доступна в нашем Телеграм боте! : @Vk_Tokenner_bot ! Для выхода в главное меню нажмите Q"  + color.END)
    choice = input('>>> ')
    if choice == 'Q' or choice == 'q':
        return
        

#Поиск в диалоге по сообщению
def search_by_word():
    peer_Id = int(input(color.Yellow + 'ID пользователя >>> ' + color.Green))
    color.END
    query = str(input(color.Yellow + 'Фраза, по которой будем искать >>> ' + color.Green))
    color.END
    search = api.messages.search(q=query, peer_id=peer_Id)
    print(search)

#Спам комментариями
def spam_comments():
    clear()
    while True:
        user_ids = input(color.Cyan + 'ID пользователя >> ')
        user_info_get = api.users.get(user_ids=user_ids, fields="wall_comments, uid")
        user_id = user_info_get[0]['id']
        comment_allowed = user_info_get[0].get("wall_comments")
        if comment_allowed == 0:
            print(color.Green + 'У этого пользователя закрыты комментарии.n')
            return
        else:
            break
    wall_id_list = []
    try:
        wall = api.wall.get(owner_id=user_id, count=200)
    except vk.exceptions.VkAPIError:
        print(color.Green + 'У этого пользователя закрыт профиль.n')
        return 

    for z in wall['items']:
        wall_id_list.append(z.get('id'))
    print(color.Cyan + 'Какими комментариями будем спамить? (В конце каждого комментария должен быть символ ; )')
    comments = input(color.Cyan + '>>> ')
    comment_list = comments.split(';')
    try:
        print(color.Yellow + 'Нажмите CTRL+C чтобы остановить работу спама.')
        while True:
            for wall_ in wall_id_list:
                for comment in comment_list:
                    try:
                        api.wall.createComment(owner_id=user_id, post_id=wall_, message=comment)
                        time.sleep(.6)
                    except vk.exceptions.VkAPIError:
                        time.sleep(10.0)
                        pass
    except KeyboardInterrupt:
        print(color.Green + 'Спам прерван пользователем.n')
        pass

#Скачать фото с страницы
def photo_flood():
    clear()
    

#menu
while infinite < 5:
    init()
    print(menu)
    color.Yellow
    cmd = str(input('>>> '))
    color.END
    if cmd == '0': break
    elif cmd == '1': info_by_id()
    elif cmd == '2': page_info()
    elif cmd == '3': dl_history()
    elif cmd == '4': dl_attachments_from_dialog()
    elif cmd == '5': do_comment()
    elif cmd == '6': spam_comments()
    elif cmd == '7': send_message()
    elif cmd == '8': search_by_word()
    elif cmd == '9': photo_flood()
    elif cmd == '':
        clear()
        continue
    else: print(color.Green + 'Некорректный ввод!' + color.END)

    print(color.Green + 'Вы хотите продолжить? [0, N, no, нет] Нет [1, Y, yes, да] Даn' + color.END)
    color.Yellow
    y = input('>>> ')
    color.END
    if y == "0" or y == 'no' or y == 'N' or y == 'нет':
        clear()
        break
    if y == "1" or y == 'yes' or y == 'Y' or y == 'да':
        clear()
        continue

Перевод статьи Аншита Шармы «5 Best Programming Languages for Hacking».

Этичный хакинг

Какие языки программирования используют хакеры?

Как и программирование, хакинг стал опасно популярным в последнее время. Благодарить за это стоит фильмы-блокбастеры, которые пробудили у молодых людей интерес к хакингу.

Каждый второй подросток мечтает стать хакером, поскольку видит, что его любимые кинозвезды занимаются хакингом на экране. Такие фильмы как «Алгоритм», «Матрица» и «Хакер» очень повлияли на молодежь. Лично я смотрел «Алгоритм» 10 раз и мне по-прежнему нравится та реалистичная манера, в которой все было изображено.

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

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

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

1. Python

Python для хакинга

Этот язык программирования хорошо известен благодаря своей простоте. Кроме того, это один из самых популярных языков, которые изучаются первыми в лучших университетах США.

Python предоставляет великолепную платформу разработки для построения наших собственных инструментов, которые в этичном хакинге называются инструментами атаки.

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

Подобно JavaScript, Python также является очень гибким. Он широко используется в различных сферах, от создания веб-приложений до биоинформатики. Python это язык хакеров – я прочитал об этом в книге О’Коннора «Violent Python: A Cookbook for Hackers, Forensic Analysts, Penetration Testers and Security Engineers» и верю в это. Для многих хакеров именно этот язык является первым, поскольку с него легко начинать.

2. Java

Java и хакинг

Да, Java. Этот язык изначально был выпущен со слоганом «напиши один раз и запускай где угодно». Это должно было подчеркнуть его кросс-платформенные свойства. С помощью Java мы можем делать много всего. Все IT-профессионалы, хоть разработчики, хоть хакеры, ценят этот язык за его гибкость.

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

Если вы возьметесь искать руководства по Java-хакингу, то найдете их в большом количестве. Причина этому – Android. Большая часть пользователей припадает на системы Android, и это облегчает хакерам доступ к целевой аудитории. С другой стороны, Java дает им возможность испытать свои навыки.

3. Ruby

Ruby код

В сфере исследований безопасности (этичного хакинга) Ruby очень быстро завоевал популярность. На этот язык повлияли Perl, Smalltalk, Eiffel, Ada и Lisp. Подобно Python, он легок для написания и чтения, а также приятен в работе.

Многие компании, такие как Shopify, Twitter, GitHub, ищут специалистов со знанием Ruby. Конечно, вам нужно знать PHP, C++, HTML и т. д., но Ruby – хороший вариант для старта. Это также один из моих любимых языков программирования. Как и в случае с JavaScript, его легко изучить, но навыки сложно довести до совершенства.

4. JavaScript

JavaScript

JavaScript широко используется в веб-разработке. Это один из самых гибких языков, какие мне когда-либо доводилось использовать. Apple сделал JavaScript объектом первого класса в Yosemite, позволив использовать его вместо AppleScript для разнообразных сценариев и кастомизаций на уровне системы.

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

Начинающим может быть трудно заниматься отладкой и сложно изучить некоторые концепции вроде асинхронности, прототипов, объектов и т. п. Но со временем каждый может справиться.

5. C/C++

C/C++

Это великолепный пример языка программирования. Именно его первым изучают в школах и колледжах, и для этого есть множество причин. Он очень портативный и может использоваться на разных платформах. Коротко говоря, это мощный, эффективный и быстрый язык, который используется при создании программ для Linux, Windows и т. д.

Также C/C++ используется для написания и разработки эксплойтов.

Хотя C++ является более мощным языком, чем C, и используется во множестве программ, оба эти языка предлагают отличный функционал. Основная особенность C++ – набор предопределенных классов, представляющих собой типы данных, которые могут быть созданы несколько раз. Этот язык также облегчает объявление пользовательских классов и многое другое.

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

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


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

Добрый всем день или вечер. Я начинаю перевод статьей

Ссылка скрыта от гостей

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

Что вам понадобится:

1) Операционная система Linux. Я использую Kali Linux для этой серии статьей. Вы можете использовать любой другой Linux дистрибутив или даже Windows, если вы знаете как установить GNU/GCC компилятор для этой ОС. Я рекомендую Kali Linux, потому что GCC предустановлен на нем.

2) GNU/GCC компилятор. Это компилятор ,который мы будем использовать для написания наших программ. Если вы не знаете что такое компилятор, это просто программа, которая превращает наш код (С, С++, Java) в машинный код (1 и 0). Чтобы проверить есть ли у вас установленный GCC, просто выполните следующую команду:

На выходе вы должны получить следующее:

635686328581420328.jpg

Если на выходе вы получили «command not found» ошибку, вы должны будете установить GCC этой командой:

Код:

apt-get update && apt-get install gcc

3) Текстовый редактор, это может быть любой текстовый редактор например: GVim, gedit и т.д.

Почему программирование важно для хакеров?

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

1) Написание собственного вредоносного ПО.
При программировании собственного вредоносного ПО, нет зарегистрированного для него ключа(подписи), таким образом делая его почти невозможным для обнаружения для AV (антивирус).

2) Хакерские инструменты обычно имеют открытый исходный код.
Это означает, что каждый может получить доступ к исходному коду. Когда вы знаете язык на котором написана программа, то сможете сделать ее лучше.

3) Написание собственных эксплойтов.
Хотя я рекомендую Ruby и Metasploit Framework для этой цели, Ruby все еще довольно медленный по сравнению с C или C++. Если вам нужно чтобы эксплойт был быстрым, вы можете написать его на C/C++.
Я решил сделать серию о C/C++, поскольку C++ — мощный язык и используется во многих программах и играх. C является менее мощным, но все еще довольно низкоуровневым языком , который тесно взаимодействует с CPU (ЦП). Встраиваемые устройства обычно запрограммированы так же на языке C. Многое от светофоров до микроволновок скорее всего работают на каком-то ПО, которое написано на С.

Что будет в этой серии статей ?

Прежде всего мы должны освоить азы С/С++. Как только это будет сделано, мы сможем делать интересные вещи. Планы:

  1. Сделать вирус
  2. Перепрограммировать некоторые инструменты хакеров написанные на С/С++
  3. Написать другие программы.

Пока что это все друзья! В следующей статье мы напишем первую программу.

Источник:

Ссылка скрыта от гостей

Понравилась статья? Поделить с друзьями:
  • Как написать программу для windows на python
  • Как написать программу для win ce
  • Как написать программу для mp3 плеера
  • Как написать программу для iphone на windows
  • Как написать программу для elm327