Ir para conteúdo
forkgoldin

Comandos além da lógica

Recommended Posts

Pessoal, eu comecei estudar C faz muito tempo e já estudei tudo que consegui encontrar, loops, condições, arquivos, ponteiro, vetores, etc, mas tudo isso só cria o programa dentro dele mesmo, ou guarda e pega informações de fora, mas tipo, como eu faço pra sair da "Lógica de programação" e usar comandos do SO, por exemplo, sei que tem o system que acessa o cmd/terminal, mas só tem ele? como são feitos os malwares que fazem algo além de encher memória ou modificar dados, por exemplo? e como eu poderia fazer um programa que modifique o plano de fundo após um certo tempo ou que pegue as senhas do wifi por exemplo sla, já me indicaram ler a documentação, mas só encontro em inglês e não manjo muito, já me indicaram bibliotecas tbm, mas parece que todas só minimizam o trabalho de algumas contas ou alguns comandos, com algumas funções (tipo a string.h ou math.h), bom queria saber como funciona esses programas como malwares ou aqueles q mudam algo do sistema operacional

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo vai da lógica de programação, e a base da linguagem que você sabe. Caso não souber, pesquise no Google. Por exemplo, um programa fica "pesado" quando há uma demanda muito grande de memória, ou seja, quando o acúmulo de processamento de dados é estrondoso. Ou seja, manipulando várias variáveis de uma vez, num loop, podemos fazer a façanha de travar o PC. E por aí vai, caso quiser algo "que rode fora do programa", sempre que não souber procure no Google, recomendo em inglês... por conter grande parte do conteúdo.

Por exemplo, sobre mudar o Wallpaper da Área de Trabalho encontrei facilmente: https://cboard.cprogramming.com/cplusplus-programming/78647-changing-desktop-wallpaper.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora



  • Conteúdo Similar

    • Por KA9
      Saudações a todos , estou recrutando voces para um grupo com nome confidencial com vagas para até + 2 admins.
      Caso alguem tiver interesse chama no telegram com o seguinte ID: @recrutaadmbp , mais informações quando entrar em contato.
      REQUISITOS
      + MATURIDADE +
      + COMPROMETIMENTO +
      Conhecimentos Minimos: 
      Html + CSS + JS (Básico)
       
      Att: k9
    • 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.
    • Por gusdnide
      Proxy Changer

      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(); } } } }  
×

Informação Importante

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