Ir para conteúdo
Entre para seguir isso  
gusdnide

[C#][Proxy Change]Sistema de tunelaçao!

Recommended Posts

Proxy Changer

JFYkihedQwu8ZbYmt1Om_Q.png

Salve galera, venho apresentar esse meu codigo velho que faziar para poder aprovar CC na netflix, pegava um Proxy do pais que desejava (mais precisamente uma lista) e trocava as configuraçoes globais do Windows de proxy, ou seja voce podia acessar qualquer navegador que o seu ip teria mudado!, vai ser bem simples apartir desse meu projeto desenvolvi algo maior que me ajuda até hoje, mas ainda falta alguns concertos ae quando tiver tudo OK eu posto aqui!

Bom beleza vamos la , primeiro vamos chamar as bibliotecas que usaremos!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Net;
using System.Threading;
using System.IO;

Ok, ja com as bibliotecas importadas, vamos adicionar nossas referencias que vamos chamar das API do windows ou especificamente da "wininet.dll" ok.

#region Referencias
  [DllImport("wininet.dll")]
  public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
#endregion

(Para saber mais sobre a funçao acima só acessar o site da Microsoft aqui ) Ok, agora vamos criar um metodo para chamar essa funçao de maneira correta na hora correta.

static bool MudarProxy(string Proxy, bool Habilitar)
        {
            RegistryKey RegInternet = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true); //Atribui a variavel RegInternet o registro onde fica as configuraçoes da internet no regedit
            RegInternet.SetValue("ProxyEnable", Habilitar); //Habilita o proxy
            RegInternet.SetValue("ProxyServer", Proxy); //Atribui o server proxy para o windows
            InternetSetOption(IntPtr.Zero, 0x27, IntPtr.Zero, 0); //Avisa o windows q ouve uma mudança nas configuraçoes da internet
            InternetSetOption(IntPtr.Zero, 0x25, IntPtr.Zero, 0); //Atualiza as configuraçoes da internet
        }

Para mais flags do InternetSetOption pode ser visto aqui, ok agora é só desenvolver o programa outra funçao simples de se fazer para checar se o proxy está funcionando, é fazer um teste com ele, se o site não responder ou der algum error é por que não esta funcionando Veja o exemplo:
 

static bool VerificarProxy(sProxy p)
        {            
            HttpWebRequest wc = (HttpWebRequest)WebRequest.Create("http://google.com");
            wc.Proxy = new WebProxy(p.IP, p.Port);
            wc.Timeout = 2000;
            try
            {
                wc.GetResponse();
                return true;
            }
            catch
            {
                return false;
            }
        }

O código do meu programa que fiz de teste:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Net;
using System.Threading;
using System.IO;
namespace ProxyChange
{
    class Program
    {
        #region Referencias
        [DllImport("wininet.dll")]
        public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
        #endregion
        #region Metodos
        static bool MudarProxy(string Proxy, bool Habilitar)
        {
            RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
            registry.SetValue("ProxyEnable", Habilitar);
            registry.SetValue("ProxyServer", Proxy);
            InternetSetOption(IntPtr.Zero, 0x27, IntPtr.Zero, 0);
            InternetSetOption(IntPtr.Zero, 0x25, IntPtr.Zero, 0);
        }
        static bool CheckContains(sProxy p)
        {
            foreach (sProxy p2 in ProxyTestados)
                if (p.getString() == p2.getString())
                    return true;
            return false;
        }
        static bool CheckProxy(sProxy p)
        {

            if (!CheckContains(p))
                ProxyTestados.Add(p);
            else
                return false;

            HttpWebRequest wc = (HttpWebRequest)WebRequest.Create("http://google.com");
            wc.Proxy = new WebProxy(p.IP, p.Port);
            wc.Timeout = 2000;

            try
            {
                wc.GetResponse();
                return true;
            }
            catch
            {
                return false;
            }
        }
        #endregion

        #region Structs
        struct sProxy
        {
            public string IP { get; set; }
            public int Port { get; set; }
            public string getString()
            {
                return $"{IP}:{Port}";
            }
        }
        #endregion


        static List<sProxy> ListProxy;
        static List<sProxy> ProxyFuncionando;
        static List<sProxy> ProxyTestados;
        static string Arquivo = "";
        static int TempoTroca;

        [STAThread]
        static void Main(string[] args)
        {

            MudarProxy("", 0);
            Console.ForegroundColor = ConsoleColor.White;
            Console.Title = "Proxy Chaanger";
            ProxyTestados = new List<sProxy>();
            if (ListProxy == null)
                ListProxy = new List<sProxy>();
            if (ProxyFuncionando == null)
                ProxyFuncionando = new List<sProxy>();

            TempoTroca = 0;
            string Resp = "";
            if (ListProxy.Count == 0)
            {
                Console.Write("Digite o nome do arquivo de proxys: ");
                Resp = Console.ReadLine();
                if (!File.Exists(Resp))
                {
                    Console.WriteLine("Arquivo invalido!");
                    Console.ReadLine();
                    Console.Clear();
                    Main(args);
                    return;
                }
            }
            Arquivo = Resp;
            LerProxys();
            Console.Write("Digite quantos minutos para a troca de IP: ");
            Resp = Console.ReadLine();
            if (int.TryParse(Resp, out TempoTroca))
            {
                if (TempoTroca > 0 && TempoTroca < int.MaxValue)
                {
                    TempoTroca *= 60000;
                }
                else
                {
                    Console.WriteLine("Arquivo invalido!");
                    Console.ReadLine();
                    Console.Clear();
                    Main(args);
                    return;
                }
            }
            else
            {
                Console.WriteLine("Arquivo invalido!");
                Console.ReadLine();
                Console.Clear();
                Main(args);
                return;
            }
            new Thread(Rotina).Start();
            Console.ReadLine();
            MudarProxy("", 0);
            Environment.Exit(1);
        }
        static void LerProxys()
        {

            ListProxy.Clear();

            foreach (string Linha in File.ReadAllLines(Arquivo))
            {
                if (Linha.Contains(":"))
                {
                    string[] Div = Linha.Split(':');
                    int Porta = -1;
                    sProxy p;
                    if (int.TryParse(Div[1], out Porta))
                        p = (new sProxy() { IP = Div[0], Port = Porta });
                    else
                        continue;
                    if (!ProxyTestados.Contains(p))
                        ListProxy.Add(p);
                }
            }
        }
        static void TestarProxys()
        {

            int count = 1;
            foreach (sProxy p in ListProxy)
            {
                Console.Clear();
                Console.WriteLine("Testando Proxys...");
                Console.WriteLine($"{ListProxy.Count} proxys carregados!");
                Console.WriteLine($"Testando {count}/{ListProxy.Count} e {ProxyFuncionando.Count} estao funcionando!");
                if (CheckProxy(p))
                {
                    ProxyFuncionando.Add(p);
                }
                count++;
                Thread.Sleep(200);
            }
            ListProxy.Clear();
        }

        static void Rotina()
        {

            int Count = 0;
            while (true)
            {
                Console.Clear();
                Console.WriteLine("Procurando Proxy Funcionando!");
                Console.WriteLine("Aperte qualquer tecla para sair!");
                while (CheckProxy(ListProxy[Count]))
                {

                    Console.Clear();
                    Count++;
                    if (Count == ListProxy.Count)
                    {
                        Console.WriteLine("Os Proxys acabaram!");
                        Console.WriteLine("Desligando proxy...");
                        MudarProxy("localhost", 0);
                        Console.ReadLine();
                        return;
                    }
                }
                Console.Clear();
                sProxy AtualProxy = ListProxy[Count];
                Console.WriteLine($"Proxy Atual: {AtualProxy.getString()}");
                Console.WriteLine($"Proxima Troca: { DateTime.Now.AddMinutes(TempoTroca/60000).ToString() }");
                Console.WriteLine("Aperte qualquer tecla para sair!");
                MudarProxy(AtualProxy.getString(), 1);
                Thread.Sleep(TempoTroca);
                LerProxys();
            }
        }
    }
}

 

Editado por gusdnide
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Somente 75 emoticons máximos são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar editor

×   You cannot paste images directly. Upload or insert images from URL.

Entre para seguir isso  



  • Conteúdo Similar

    • Por fabercat
      Para movimentar um pouco esse fórum vou deixar minha humilde contribuição.

      Creio que todos já conheçam a vulnerabilidade recentemente descoberta pelo criador do HashaCat  Jean Steube , se não leia  aqui: 

      https://hashcat.net/forum/thread-7717.html

      Pois bem, como a adm do forum wifilibre kcdtv descreveu nesse post:

      https://hashcat.net/forum/thread-7717-page-3.html

      é possivel utilizar wpa_supplicant no modo debug para recuperar o PMKID de um AP.

      Assim sendo, a um mês atrás resolvi aprender Python e fiz esse Script:

      https://github.com/Sinf0r0s0/pmkidauto

      (não reparem na bagunça   )

      esse script faz( ou tenta..)

      1. Scaneia todos os APs

      2.Tenta obter os hashes PMKID  e os salva em um arquivo no formato compatível com hashcat -m 16800

      3. Usando uma Wordlist pequena, tenta recuperar  a senha com um cracker  interno(muito lento).

      4. Salva as senhas recuperadas em um arquivo.

      para rodar o program vc precisa como dependência, apenas python e wpa_suplicant.

      obs:.esse script não roda em windows.

      segue:
      apt-get install python wpasupplicant
       
      para rodar o script de permissão:
      chmod 751 pmkidauto.py
       
      e os parametros  -i  (use iwconfig para saber o nome do seu adaptador wifi)

      e -w que é uma wordlist pequena porque o cracker incluído no script é bastante lento (pode ser uma com datas).

      para obter wordlists aqui um bom site:

      https://weakpass.com/

      exemplo de uso:
      sudo pmkidauto.py -i wlan0 -w wordlist.txt
      (não esqueca do sudo)

      o programa gera 3 arquivos:

      hashcat16800.hash => onde salva os PMKIDs encontrados no formado Hashcat -m 16800

      pmkidauto.potfile  => salva as senhas encontradas.

      wpa_supp.conf wpa  => Arquivo de configuração do wpa_supplicant

      Os aquivos gerados são totalmente compatíveis com o programa hashcat.

      protip:

      Um uso interessante seria capturar os hashes usando um cel android e depois crackear na "placa de video" usando hashcat.

      este script foi testado com sucesso em:
      PC com Ubuntu 18
      Smartphone android com root + linux deploy
      VM ubuntu no windows 10 
      Raspberry PI 3

      Caso queiram modificar ou reescrever do zero sintam-se a vontade  
    • Por r0dr1gu3es156
      #include <stdio.h>
      #include <string.h>
      #include <stdlib.h>
      #include <malloc.h>
      typedef struct Celula_str *Apontador;
      typedef struct Celula_str {
        int Item; 
        char nome[30];
        Apontador Prox;
      } Celula;
      typedef struct TipoFila {
        Apontador Frente;
        Apontador Tras;
        int qtdItens;
      } TipoFila;
      TipoFila *Criar_Fila(){
          TipoFila* f = (TipoFila*) malloc(sizeof(TipoFila));
          f->Frente = NULL;
          f->Tras = NULL;
          f->qtdItens = 0;
          return f;
      };
      void Liberar_Fila(TipoFila *f){
          free(f);
      };
      int E_Vazia(TipoFila *f){
          return f->qtdItens == 0;
      };
      int Enfileira(TipoFila *f, int i, char b[]){
          
          Celula *Nova_Celula = (Celula*) malloc(sizeof(Celula));
          Nova_Celula->Item = i;
          strcpy (Nova_Celula->nome, b);
          
          if (E_Vazia(f)){
              Nova_Celula->Prox = NULL;
          }else{
              Nova_Celula->Prox = f->Tras;
          }
          f->Tras = Nova_Celula;
          f->qtdItens++;
      };
      int Desenfileirar(TipoFila *f, char *nomed[], int *numerod){
          Celula *i;
          if(!E_Vazia(f)){
              i = f->Frente;
              f->Frente = i->Prox;
              strcpy(*nomed, i->nome);
              *numerod = i->Item;
          free(i);
          }else{
          Printf("Fila vazia");
          return 0;    
          }
          f->qtdItens--;
          return 1;
      };
      int MostrarFila(TipoFila *f){
          Celula *p = f->Frente;
          
          while(p != f->Tras){
              printf("Numero:%d\n Nome:%s\n ", p->Item,p->nome);
              p = p->Prox;
          }    
          printf(" Numero:%d\n Nome:%s\n", p->Item,p->nome);
      };
       
      int Quant_Fila(TipoFila *f){
          return f->qtdItens;
      };
      int Mostrar_Caract(TipoFila *f){
          printf("Numero:%d\n Nome:%s\n ",f->Frente->Item,f->Frente->nome);
      };
      int Avioes_Aguardam(TipoFila *f){
           if(!E_Vazia(f)){
          printf("%d avioes estao aguardando para decolar.\n",f->qtdItens);
           }else{
               printf("nao a avioes aguardando para decolar.\n");
           }
      };
      int Autorizar_Decolagem(TipoFila *f){
          Celula *p;
          char *nm[30];
          int *num;
          if(!E_Vazia(f)){
              Desenfileirar(f,nm,num);
              printf("Aviao-Numero:%d\n Nome:%s\n authorized!n");
          }else{
              printf("Sem avioes para decolar");
          }
      };
      void Adicionar_Aviao_Decolagem(TipoFila *f){
          char nm[30];
          int num=0;
          printf("Digite os dados do aviao a ser inserido na fila de decolagem:\n\n");
          printf("Numero:");
          scanf("%d",&num);
          printf("Nome:");
          scanf("%s",&nm[30]);
          Enfileira(f, num, nm);  //add aviao
          printf("Aviao:%d\n %s\n adicionado com sucesso. ", num, nm[30]);
      //    Menu();
      };
      void Listar_Aviao_Decolagem(TipoFila *f){
          Celula *i;
          if(!E_vazia(f)){
              i = f->Frente;
              while(i != f->Tras){
                  printf("aviao: %d\n %s\n", i->Item,i->nome);
                  i = i->Prox;
              }
              printf("aviao: %d\n %s\n", i->Item,i->nome);
          }else{
              printf("sem avioes para decolar");
          }
      };
      void Caracter_Proximo_Decolar(TipoFila *f){
          if(!E_Vazia(f)){
              system("clear");
              printf( "O proximo a decolar sera:\n\n");
              Mostrar_Caract(f);
          }else{
              printf( "Nao existem avioes para decolar.\n\n");
          }
      }

      void opcao(TipoFila *FILA,int opt){
        
         switch(opt){
             case 1:
             Avioes_Aguardam(FILA);
             break;
             case 2:
             Autorizar_Decolagem(FILA);
             break;
             case 3:
             Adicionar_Aviao_Decolagem(FILA);
             break;
             case 4:
             Listar_Aviao_Decolagem(FILA);
             break;
             case 5:
             Caracter_Proximo_Decolar(FILA);    
             break;
             
             default:
          printf("Comando invalido\n");
         }    
         
      };
      int main(){
          TipoFila *Ptp;
          Ptp = Criar_Fila();
          int opt;
          do{
            opt=Menu();
              opcao(Ptp,opt);
          }while(opt);
             free(Ptp);
             return 0;
      };
    • Por skyroot012
      # coding: utf-8
      import socket
      Host = "  "#ip do servidor
      Port = 5678  #Escolha uma porta por exemplo 5678
      tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      orig = (Host, Port)
      tcp.bind(orig)
      tcp.listen(1)
      while True:
          con, cliente = tcp.accept()
          print('Conectador por', cliente)
          while True:
              msg = con.recv(1024)
              if not msg: break
              print(cliente, msg)
          print("Finalizando conexão do cliente", cliente)
          con.close()
       
    • Por qebuqci
      Eai rapaziada, beleza?
      Então to começando a programar em C e estou com dificuldade em fazer um negócio. Eu quero criar uma estrutura e um ponteiro que guarde os valores referentes a cada membro da estrutura. Algo semelhante a isso
      typedef struct { char nome[20], marca[20]; } ESTRUTURA; int main(void) { ESTRUTURA *ponteiro; int i, quantidade;
      Ai aqui entra um loop de repetição (for i até quantidade) pra eu associar cada valor do ponteiro->nome, ponteiro->marca. Tanto quanto for necessário. Por exemplo, se eu quiser fazer um cadastro de três marcas por exemplo, eu quero um ponteiro que suporte isso na memória e cada valor aponte pra um membro da estrutura.
      scanf("%d",&quantidade); ponteiro=(char *) malloc (quantidade*sizeof(ESTRUTURA)); for (i=1;i<=quantidade;i++) { scanf("%s",ponteiro->nome); scanf("%s,ponteiro->marca); } criaArquivo(ponteiro); free(ponteiro); return 0; }
      Bom, a questão é, eu quero salvar todos os dados cadastrados num arquivo depois. Então, eu criei uma função que recebe o ponteiro em que estão e joga isso pro ponteiro arquivo. E até aqui beleza, ele cria o arquivo, mas o arquivo só salva o primeiro valor da primeira posição de memória. No caso do exemplo que eu dei, digamos que eu quisesse cadastrar 3 marcas e 3 nomes. Ele alocaria dinamicamente o espaço necessário e cadastraria tudo certinho, agora na hora de passar pro arquivo, somente o primeiro nome do primeiro cadastro é salvo.
      Eu não entendi isso, eu não passei o ponteiro inteiro pra função criaArquivo?
      Eu estou salvando no arquivo desse jeito
       
      void criaArquivo(char *ponteiro) { FILE *arquivo; arquivo=fopen("teste.txt","w"); fprintf(arquivo,"%s",ponteiro); fclose(arquivo); } Se eu pedir na função criaArquivo pra ele printar esse ponteiro que ele recebe, ele não recebe o ponteiro inteiro com todos os dados cadastrados na main, ele recebe somente o valor daquela posição de memória. Somente do primeiro ponteiro->nome. Ai isso é que quebra, porque eu já tentei chamar na main, criaArquivo(ponteiro+1). Achando que a próxima posição de memória teria ponteiro->marca. E ele cria o arquivo sem nada, como se não tivesse valor cadastrado ali
      Então assim, deixando claro as minhas dúvidas, eu defini um ponteiro com tamanho A bytes. Quando eu passo ele pra outra função, ele não vai com o tamanho A de memória, ele vai somente o valor da primeira célula de memória, certo? Como eu faço pra pegar o resto?
    • Por Pain
      Segue o Link do Canal no Youtube: https://www.youtube.com/playlist?list=PLa75BYTPDNKZWYypgOFEsX3H2Mg-SzuLW
      Já vi essas aulas  e o professor explica muito bem! Ele vai até alocação dinâmica.
×
×
  • Criar Novo...

Informação Importante

Ao usar este site, você concorda com nossos Termos de Uso.