Статьи Имитация взлома или как обманывают хекеры вконтакте

Discussion in 'Статьи' started by Veil, 19 Mar 2017.

  1. Veil

    Veil Banned

    Joined:
    21 May 2015
    Messages:
    2,025
    Likes Received:
    3,355
    Reputations:
    72
    Предупреждение: Все авторские права и сама статью принадлежат нашему форумчанину
    SooLFaa.
    [​IMG]

    Как и обещал публикую очередную статью нашего друга по форуму SooLFaa.

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

    Казалось бы, "Да чё нам стоит - дом построить", залез в исходный код элемента, нажал редактировать элемент, поменял в вёрстке на нужный элемент. Профит. Дело это, конечно, хорошее, но беда в том, что ничего из этого не выйдет и после перезагрузки страницы наш счет вернется на прежний. Что же давайте это поправим....

    Итак, пишем собственного бота для работы со стороннем браузером на C# или прокси сервер.

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

    Поехали.

    Открываем Visual Studio, создаем консольный проект. А далее устанавливаем следующий пакет.
    Code:
    Install-Package Titanium.Web.Proxy
    Как это сделать?

    Открываем Консоль диспетчера пакетов
    [​IMG]

    И в окне вводим команду выше.

    А далее всё просто. Пишем следующий код.
    Code:
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                ProxyServer proxy = new ProxyServer();
    
                proxy.TrustRootCertificate = true;
                proxy.BeforeRequest -= OnRequest; // Подписываем методы запрос
                proxy.BeforeResponse -= OnResponse; // Подписываем методы ответа
                proxy.ServerCertificateValidationCallback -= OnCertificateValidation; // Получени сертификата для SSL
                proxy.ClientCertificateSelectionCallback -= OnCertificateSelection;
    
               // Создаем точки входа и исключения
                ExplicitProxyEndPoint explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Any, 8000, true);
                proxy.AddEndPoint(explicitEndPoint);
                proxy.Start();
    
                var transparentEndPoint = new TransparentProxyEndPoint(IPAddress.Any, 8001, true)
                {
                    GenericCertificateName = "google.com"
                };
    
                proxy.AddEndPoint(transparentEndPoint);
    
                foreach (ProxyEndPoint endPoint in proxy.ProxyEndPoints)
                    Console.WriteLine("Listening on '{0}' endpoint at Ip {1} and port: {2} ",
                        endPoint.GetType().Name, endPoint.IpAddress, endPoint.Port);
    
                // Устанавливаем прокси
                proxy.SetAsSystemHttpProxy(explicitEndPoint);
                proxy.SetAsSystemHttpsProxy(explicitEndPoint);
    
                Console.Read();
    
                proxy.BeforeRequest -= OnRequest;
                proxy.BeforeResponse -= OnResponse;
                proxy.ServerCertificateValidationCallback -= OnCertificateValidation;
                proxy.ClientCertificateSelectionCallback -= OnCertificateSelection;
                proxy.Stop();
            }
    
            public static async Task OnRequest(object sender, SessionEventArgs e)
            {
                Console.WriteLine(e.WebSession.Request.Url);
    
                requestHeaders = e.WebSession.Request.RequestHeaders;
    
                var method = e.WebSession.Request.Method.ToUpper();
                if ((method == "POST"))
                {
                    byte[] bodyBytes = await e.GetRequestBody();
                    await e.SetRequestBody(bodyBytes);
                    string bodyString = await e.GetRequestBodyAsString();
                    await e.SetRequestBodyString(bodyString);
                }
            }
    
            public static async Task OnResponse(object sender, SessionEventArgs e)
            {
                var responseHeaders = e.WebSession.Response.ResponseHeaders;
                if (e.WebSession.Request.Method == "GET" || e.WebSession.Request.Method == "POST")
                {
                    // Если всё ок возвращаем ответ
                    if (e.WebSession.Response.ResponseStatusCode == "200")
                    {
                        if (e.WebSession.Response.ContentType != null && e.WebSession.Response.ContentType.Trim().ToLower().Contains("text/html"))
                        {
                            byte[] bodyBytes = await e.GetResponseBody();
                            await e.SetResponseBody(bodyBytes);
                            // если запрашиваем вконтакте
                            if (e.WebSession.Request.Url.Contains("vk.com"))
                            {
                                //то изменяем верстку
                                string body = e.GetResponseBodyAsString();
                                await e.SetResponseBodyString(body.Replace(@"<span class=""current_text"">W.E.L.C.O.M.E..</span>", @"<span class=""current_text"">Специально для Codeby</span>"));
                            }
                            else
                            {
                                string body = await e.GetResponseBodyAsString();
                                await e.SetResponseBodyString(body);
                            }
                        }
                    }
                }
            }
    
            public static Task OnCertificateValidation(object sender, CertificateValidationEventArgs e)
            {
                if (e.SslPolicyErrors = System.Net.Security.SslPolicyErrors.None)
                    e.IsValid = true;
    
                return Task.FromResult(0);
            }
    
            public static Task OnCertificateSelection(object sender, CertificateSelectionEventArgs e)
            {
                return Task.FromResult(0);
            }
        }
    }
    Меня просили пилить видосики к статьям, вот Вам видосик.



    Большое человеческое спасибо автору статей SooLFaa за разрешение публикации его статьи.
    Ждем от таких их же интересных статей в дальнейшем.
     
    #1 Veil, 19 Mar 2017
    Last edited: 19 Mar 2017
  2. Majgap

    Majgap Member

    Joined:
    4 Jan 2016
    Messages:
    14
    Likes Received:
    12
    Reputations:
    0
    Когда есть лохи делишки у нас не плохи! :)
     
    Veil likes this.
  3. LynXzp

    LynXzp Elder - Старейшина

    Joined:
    21 Oct 2007
    Messages:
    147
    Likes Received:
    22
    Reputations:
    0
    UserJS и кастомные CSS тоже могут это сделать. И изобретать велосипед не надо. Хотя конечно кто с чем работает тот так все и видит.
     
  4. SooLFaa

    SooLFaa Members of Antichat

    Joined:
    17 Mar 2014
    Messages:
    530
    Likes Received:
    499
    Reputations:
    154
    Эммм кастомные CSS?! Причем тут они? Задача была написать по факту прокси сервер. Чтобы любая тачка и любой браузер на лету мог видоизменять траффик. Это я приурочил как пример, в вкшке менял строку, а так идея куда глобальнее, чтобы с этим траффиком можно было в итоге программно работать ну и опять же кроссбраузерность.
     
    _________________________
    Veil likes this.
  5. SooLFaa

    SooLFaa Members of Antichat

    Joined:
    17 Mar 2014
    Messages:
    530
    Likes Received:
    499
    Reputations:
    154
    Просьба к ТС только. Если форкаешь, то без уважаемых и дорогих друзей. На этом форуме есть люди, которые куда респектабельнее меня.
     
    _________________________
    Veil likes this.
  6. LynXzp

    LynXzp Elder - Старейшина

    Joined:
    21 Oct 2007
    Messages:
    147
    Likes Received:
    22
    Reputations:
    0
    А в посте:
    Ну... менять верстку и менять траффик не совсем одно и то же.
    Greasemonkey и stylish есть практически для всех браузеров, а для которых нет - есть другие. А CSS и JS они в любом браузере одинаковы.

    Конечно с их помощью все не сделаешь, прокси более универсально, но опять таки - для простых примеров они лучше подходят из-за скорости разработки и проверки, нажал Ctrl+S в скрипте - и сайт перерисовался.
     
  7. SooLFaa

    SooLFaa Members of Antichat

    Joined:
    17 Mar 2014
    Messages:
    530
    Likes Received:
    499
    Reputations:
    154
    Окей. А если задача скажем редиректить пользователя со всех сайтов оканчивающихся на домен .ru?
     
    _________________________
    Veil likes this.
  8. MadFun.

    MadFun. Member

    Joined:
    8 May 2007
    Messages:
    32
    Likes Received:
    28
    Reputations:
    20
    Лучшее начало статьи, я считаю.