• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Soft C# Antipublic (AP) by Guron

Доброго времени суток форумчане . Сегодня мы напишем локальный антипаблик почт\url да чего угодно.
Работать мы будем с mysql добавлять\проверять есть ли почта в АП.
vXM65Ae.png


Для начала создадим в mysql базу и таблицы.
(на пастебине ибо на форуме нельзя создать тему с таким кодом)
Дальше по коду все просто
Код:
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient; //библа для работы с mysql сервером

namespace AntiPublic
{
    internal class Program
    {
        private static string FNAME = string.Empty;

        [STAThread]
        private static void Main()
        {
            Console.Title = "AntiPublic (mp) byGuron";
            LoadBase(); //загрузка базы
            Sqlconn(); //функция проверки
        }

        private static void LoadBase()
        {
            var ofd = new OpenFileDialog {Filter = "All text|*.txt;*.csv;*.dic;*.log|All files|*.*" };

            if (ofd.ShowDialog() != DialogResult.OK) Environment.Exit(0); //если база не загружена пишем это и выходим с проги.
            FNAME = ofd.FileName;
        }

        private static void Sqlconn()
        {
            const string config = "server=localhost;user=root;password=123456;persistsecurityinfo=True;"; //данные для подключения к БД

            using (var con = new MySqlConnection(config))
            {
                con.Open(); // Открываем плдключение 1 раз

                var startDate = DateTime.Now;
                Console.WriteLine("Arbaiten...");

                using (var sw1 = new StreamWriter("Gur_ap_private.txt", true, Encoding.UTF8))
                using (var sw2 = new StreamWriter("Gur_ap_public.txt", true, Encoding.UTF8))
                using (var sw3 = new StreamWriter("Gur_ap_error.txt", true, Encoding.UTF8))
                //{
                    foreach (var str in File.ReadLines(FNAME)) //перечисляем строки
                    {
                        if (string.IsNullOrEmpty(str)) continue; //если стога пуста то проверяем следующую

                        var ch = str[0].ToString(); //це що бы разбивать бД на несколько таблиц. (потому как искать в 1 ляме проще чем в допустим 30лямах )
                        switch (ch)
                        {
                            case "1":
                            case "2":
                            case "3":
                            case "4":
                            case "5":
                            case "6":
                            case "7":
                            case "8":
                            case "9":
                            case "0":
                            case ".":
                            case "_":
                            case "-":
                                ch = "UnderDashDot09";
                                break;
                        }

                        var acc = str.Split(':', ';'); // оиделяем email от пароля
                        if (acc.Length != 2) // если это не email:pass то пшем в error
                        {
                            sw3.WriteLine(str);
                            continue;
                        }

                        var sql = $"INSERT INTO AntiMail.{ch} (mail, pass) VALUES ('{acc[0].ToLower()}', '{acc[1]}')"; //делаем запрос в БД
                        var comm = new MySqlCommand(sql, con);

                        try
                        {
                            comm.ExecuteNonQuery();
                            sw1.WriteLine(str);
                        }
                        catch (Exception e)
                        {
                            if (e.Message.Contains("Duplicate entry"))
                                sw2.WriteLine(str); //если строка присутствует то пишем в public
                            else
                                sw3.WriteLine(str); //иначе в private
                        }
                    }
                }

                Console.WriteLine(DateTime.Now - startDate);
                con.Close(); //по окончпании чека закрываем подключение
                Console.WriteLine("Готово!");
                Console.Read();
            }
        }
    }
}
Результат работы: 100к прочекало за 15сек.
gGMEhJh.png

Запускаем Start.bat ибо устанавливаем свой denver, xampp)
 
  • Не нравится
Реакции: Groxx, pedro и mrOkey

mrOkey

Grey Team
14.11.2017
967
976
BIT
0
госоподи, пойди убейся об стену с таким кодом, пожалуйста
 

Vertigo

Lex mea est Vulgate Linux
Gold Team
15.02.2017
1 318
3 999
BIT
1
госоподи, пойди убейся об стену с таким кодом, пожалуйста
Бро,вот ты и опять в статусе,не жести пожалуйста.
Объясни человеку что не так с кодом.
А то после такой критики,лукаса страшно ставить новорегу))
 
Последнее редактирование:
  • Нравится
Реакции: centr

N1GGA

Codeby Team
Platinum
16.07.2018
326
332
BIT
203
Бро,вот ты и опять в статусе,не жести пожалуйста.
Объясни человеку что не так с кодом.
А то после такой критики,лукаса страшно ставить новорегу))
Проблема в том, что некоторые начинающие кодеры быстро перепрыгивают с "Hello World!" на средние проекты. Крайне не рекомендую так делать, ибо до баз данных, в шарпе необходимо практиковаться с более простыми задачами, чтобы написать качественный код.
 
В

Василий1

mrOkey
Я напишу развёрнутый ответ, чуть позже

Где ответ?
 

mrOkey

Grey Team
14.11.2017
967
976
BIT
0
mrOkey
Я напишу развёрнутый ответ, чуть позже

Где ответ?
уфф, ну ок. Бесплатное ревью, раз уж пообещал, и то тоько из-за @Vertigo .

Честно сказать тут даже ревьюить нечего.
Начнём с бд.
1) Разбивать базу на 26 таблиц, из-за аргумента - так быстрее - бред.
- Это нарушение нормальной формы.
- Это идиотизм так как скорость поиска завист от плана запроса и инедексов. Данные в бд хранятся не как в файле. Советую погуглить этот момент, особенно обратить внимание на страници и на то как хранятся индексы.
- Но даже если оставить как есть, хотя не один здравомыслящий человек так не делает, то нет защиты от дублирования записей в разных таблицах. В конетексте одной - да есть. Но что если я добавлю запись Х в таблицу а,b,c и d. Это бред.

Код
мне очень сложно писать это без мата.
- автор не вкурсе за ООП и не умеет в него. Совсем.
- автор использует ооп язык для скриптовой задачи.
- автор не понимает что такое программирование.
Теперь подробнее:

Во-первых, весёлый оффтопик:
Код:
 Console.Title = "AntiPublic (mp) byGuron";
Пихать авторство везде где только можно, тем более в такой говнокод - заранее портить себе репутацию в комьюнити.

теперь более серьёзные вещи.
Код:
private static string FNAME = string.Empty;
- не соблюдён С# конвеншен по наименованию. Приватные поля именнуюся через венскую нотацию. Или просто с мальнкой буквы в стиле lowerCamelCase
- переменная инвалид - у неё ампутирована первая часть. Автор букв пожалел на неё.
- из наименовании переменной не ясна её семантика. Зачем она тут. Что это за наименование файла. Какого файла. Зачем он тут?

Код:
private static void Main()
        {
            Console.Title = "AntiPublic (mp) byGuron";
            LoadBase(); //загрузка базы
            Sqlconn(); //функция проверки
        }
Какого чёрта метод Main вдруг стал приватным? Автор явно не понимает зачем это сделал. Какой смысл **** в этом? (Вопрос риторический, так как смысл делать приватным метод Main 0, zero, нуль )

Код:
 LoadBase(); //загрузка базы
И название метода, и комментарий - говорят как бы о загрузки бд. Думаете там загружается база данных? А вот *** там открывается диалоговое окно чтоб юзер мог файл загрузить. Диалоговое окно **** в консольном приложении! Это говорит как минимум о том что автор не умеет из аругментов путь читать.

Код:
Sqlconn(); //функция проверки
Какого чёрта функция проверки называется Sqlconn. Причём опять же, автор неимеет не малейшего понятия как должны выглядеть наименования. Автор называет методы как ему душа велит, а не в зависимости от того что они делают.

Код:
        private static void LoadBase()
        {
            var ofd = new OpenFileDialog {Filter = "All text|*.txt;*.csv;*.dic;*.log|All files|*.*" };

            if (ofd.ShowDialog() != DialogResult.OK) Environment.Exit(0); //если база не загружена пишем это и выходим с проги.
            FNAME = ofd.FileName;
        }
что нужно знать об этом методе? Автор дал возможность грузить любой файл в программу. Зачем? Потому что автор не имеет ни мальейшего понятия, что он делает.
Код:
//если база не загружена пишем это и выходим с проги.
В данной строке не выводится сообщение о том что база не загружена. Выводится стандартное сообщение о выходе.
ofd - автору опять жалко букв. Почему?
условие в одну строку? строк видать тоже жалко.
И наконец мы узнаём что оказывается в, FNAME записывается наименование входящего файла.
- почему бы переменной не дать подходящее название?
- почему бы методу просто не вернуть наименование входящего файла?
- зачем этот сайд эффект?
- ещё очень много вопросов, которые я не задам, потому что мне теперь тоже становится жалко символов.
Ответ один - автор не имеет ни мальейшего понятия, о том, что он делает.

Код:
private static void Sqlconn()
        {
            const string config = "server=localhost;user=root;password=123456;persistsecurityinfo=True;"; //данные для подключения к БД
Что мы понимаем на этой строке?
- автор не знает термина connection string.
- автор запрещает менять бд без перекомпиляции исходников
- автор хранит пароли в открытом виде в коде
всё выше сказанное говорит о том, что автор не имеет ни мальейшего понятия, о том, что он делает.

обратите внимание на эту конструкцию:
Код:
var ch = str[0].ToString(); //це що бы разбивать бД на несколько таблиц. (потому как искать в 1 ляме проще чем в допустим 30лямах )
                        switch (ch)
                        {
                            case "1":
                            case "2":
                            case "3":
                            case "4":
                            case "5":
                            case "6":
                            case "7":
                            case "8":
                            case "9":
                            case "0":
                            case ".":
                            case "_":
                            case "-":
                                ch = "UnderDashDot09";
                                break;
                        }
она не имеет никакого смысла вообщ
это просто присвоение переменной ch строки UnderDashDot09.
прилюбом этом кейсе у сh одно и тоже значение. И да вся это херь заменяется 2 строками кода.


Код:
 var acc = str.Split(':', ';');
у оператора сплит нет перегрузки для двух чар аргументов к слову.

Код:
var sql = $"INSERT INTO AntiMail.{ch} (mail, pass) VALUES ('{acc[0].ToLower()}', '{acc[1]}')"; //делаем запрос в БД
                        var comm = new MySqlCommand(sql, con);

                        try
                        {
                            comm.ExecuteNonQuery();
                            sw1.WriteLine(str);
                        }
                        catch (Exception e)
                        {
                            if (e.Message.Contains("Duplicate entry"))
                                sw2.WriteLine(str); //если строка присутствует то пишем в public
                            else
                                sw3.WriteLine(str); //иначе в private
                        }
я не знаю что такое чекер АП, но вот что делает код
берёт строку из файла
смотрит пара ли это login:pass (login;pass)
добавляет в бд
Если случился эксепшен дубликат найден! Любой эксепешен который содержит в себе дубликат!

Короче, я устал писать. Автор сделал извращённую команду uniq с 26ую таблицами и полным говнокодом.
Я щас разобрал только то, что явно броасается в галза, так как мне жалко *** символов для этого говнотопика.
 
Последнее редактирование:
G

Guron_18

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

Спасибо за внимание.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!