Everything posted by Fernando Mercês
-
Delphi evoluiu
Eita, posta um hello, world aí pra gente ver! 🙂
-
Inscrições abertas para a turma 2023.1 do Do Zero Ao Um para pessoas pretas
Atualização: Inscrições esgotadas, pessoal. Obrigado a todos pelo interesse! Entender o contexto racial no Brasil não é simples, mas nem por isso deixamos de tentar. No ano passado lançamos o programa Do Zero Ao Um, que formou pessoas pretas para trabalharem em computação com foco em programação. Foram seis meses de aulas diárias pela internet, uma turma maravilhosa, professores voluntários empenhados, mentores incríveis e uma parceria sem igual com empresas que ingressaram nossos alunos em seus processos seletivos. E os contrataram. Acertamos, erramos, mas mais importante, aprendemos. Este ano queremos aprender mais. Abrimos hoje a pré-inscrição para a turma 2023.1 do programa, que desta vez será mais enxuto em sua duração (quatro meses) e terá foco em formar futuros profissionais de segurança da informação, tendo em vista nossa relevância na área e a carência de profissionais qualificados. Tivemos que fazer escolhas, pois a experiência com turmas muito heterogêneas nos mostrou que precisamos focar. Por isso, estabelecemos um limite de idade para estar turma, mas planejamos beneficiar outras faixas etárias em programas futuros. O Do Zero Ao Um é uma das formas que encontramos de tentar ajudar na devida reparação histórica com o povo preto no Brasil. Infelizmente, nosso trabalho é para que o óbvio aconteça: que pessoas pretas ocupem o espaço que queiram e desejam estar. E se quiserem estar na computação ou na segurança da informação, não mediremos esforços para abrir estes lugares. Estamos dispostos a absorver as críticas e aprender com elas. Só não estamos dispostos a parar de tentar. Se você se considera uma pessoa preta e tem interesse em migrar para a área de segurança da informação, leia mais sobre o programa aqui. Compartilhe nas suas redes, pois o programa é online e gratuito e falantes de português do mundo todo podem participar. Assim como a vida profissional dos formados na turma 2022.1 mudou para melhor, queremos transformar a carreira dos alunos deste ano também. Contamos com o seu apoio para tal. Por um Brasil mais justo, mais igualitário, mais como deve ser. 💚
-
edição de peograma executável
Olá, @allanval! Talvez tenha, mas você precisa se certificar de não estar cometendo crime (checar a licença). Se for correção de bug de um software da qual a empresa/pessoa desenvolvedora faliu/sumiu, então pode ser ok, mas ainda assim, é melhor se certificar primeiro. Tecnicamente você vai precisar estudar engenharia reversa. Tá no lugar certo. 🙂 Aqui tem um guia. Abraço e boa sorte!
-
Breakpoint em todos os Jumps
Acho que entendo como está pensando, mas já adianto que é um método pouco efetivo. De qualquer forma, acredito que precise de um script na maioria dos debuggers. No x64dbg dá pra fazer com tracing também (Debug -> Trace over/into...): Explicando: A condição que coloquei em Command Condition é que o resultado da função dis.match(cip, "^j") seja True. Essa função vai disassembler a instrução apontada por cip (eip ou rip) e ver se esta começa com j. Quando tal condição for atendida, o que está em Command Text vai executar. Pus dois comandos: um pra colocar um breakpoint no endereço atual e outro para desabilitar esse breakpoint, de modo que a execução continue. Fazendo isso você terá um breakpoint desabilitado em cada salto. Basta reiniciar o programa, habilitar todos os BPs e rodá-lo para atingir teu objetivo. Repare que se usar Trace over, não vai pegar os saltos dentro das funções. Se usar Trace into pega, mas vai ser bem mais lento (tracing em geral é lento mesmo). Abraço.
-
Problemas instalando O "Hyperion"
Show. Por nada. 🙂 Mesmo depois de instalar as runtime libraries conforme indiquei? Estranho... Abraço!
-
Problemas instalando O "Hyperion"
Opa, acho que tem uma confusão aí... Você não tem que compilar o make. O arquivo Makefile é lido pelo comando make, que já invoca o compilador pra você. Ou seja, é uma facilidade. Então, ao invés de você usar o compilador diretamente (com o comando gcc, por exemplo), você usa o comando make, porque quem fez o Hyperion já colocou um arquivo Makefile na pasta do projeto pra facilitar tua vida, entende? No entanto, o Windows não vem com o comando make nativo. Por isso, no readme.txt do projeto há a recomendação que você use o MinGW ou o Visual Studio. Dá um trabalhinho em qualquer um dos casos e reconheço que nada disso é óbvio para quem não está acostumado. De repente eu consigo fazer um vídeo mostrando o processo. Por hora, compilei aqui pra você, mas não testei o programa e nem sei o que ele faz. Recomendo rodar só em VM. Ah, vai precisar das runtime libraries do Visual C++ pra rodar. Um abraço. hyperion.rar
-
Problemas instalando O "Hyperion"
Opa, interessante. Não conhecia esse Hyperion. Dei uma olhada no readme.txt e tem isso: The crypter is a C project and can be compiled with the corresponding makefile (tested with Mingw and Visual Studio) Ou seja, a compilação é pra ser feita através do Makefile (comando make) no Windows (MinGW ou Visual Studio). De fato, o projeto inclui a windows.h e é um crypter pra PE. Tenta no Windows aí. 😉 Abraço.
-
Dúvida sobre o Virtual box
O recurso é consumido somente enquanto o VirtualBox estiver rodando alguma VM. Ao desligar a VM, tudo é liberado, como com qualquer outro software. Só o armazenamento em disco que se mantém, claro. 😉 Abraço.
-
Binutils 2.40 lançado: Veja as novidades
Quem segue o nosso fórum de releases já viu que o projeto GNU liberou a versão 3.40 do Binutils no último sábado. Baixei e compilei para ver o que tinha de diferente. Seguem os novos recursos direto do repositório oficial: Changes in 2.40: * Objdump has a new command line option --show-all-symbols which will make it display all symbols that match a given address when disassembling. (Normally only the first symbol that matches an address is shown). * Add --enable-colored-disassembly configure time option to enable colored disassembly output by default, if the output device is a terminal. Note, this configure option is disabled by default. * DCO signed contributions are now accepted. * objcopy --decompress-debug-sections now supports zstd compressed debug sections. The new option --compress-debug-sections=zstd compresses debug sections with zstd. * addr2line and objdump --dwarf now support zstd compressed debug sections. * The dlltool program now accepts --deterministic-libraries and --non-deterministic-libraries as command line options to control whether or not it generates deterministic output libraries. If neither of these options are used the default is whatever was set when the binutils were configured. * readelf and objdump now have a newly added option --sframe which dumps the SFrame section. A opção --show-all-symbols parece interessante de deixar sempre ativada, para o caso de qualquer endereço na saída do objdump coincidir com mais de um símbolo no binário. Não é comum, mas se acontecer, vale a pena saber. 🙂 Habilitar o output colorido em tempo de configuração me parece uma boa ideia e vai servir para os mantenedores de pacotes das distribuições deixarem o output do objdump colorido por padrão. Veja a diferença: Disassembly normal Disassembly colorido Lembrando que o objdump passou a suportar esse destaque de sintaxe em cores na versão 2.39 do Binutils. O que acontece agora é que existe uma opção em tempo de configuração (leia-se: ./configure) para deixá-la ativada por padrão. 😉 Outro destaque é o suporte ao dump de seções SFrame tanto no readelf quanto no objdump. Como a opção --gsframe já havia sido adicionada no as, o GNU Assembler, dá pra usá-la com a opção -Xassembler do gcc assim: gcc -Xassembler --gsframe -o binario.elf hello.c E com o readelf (ou objdump), usar a nova opção: $ objdump --sframe binario.elf binario.elf: file format elf64-x86-64 Contents of the SFrame section .sframe: Header : Version: SFRAME_VERSION_1 Flags: SFRAME_F_FDE_SORTED Num FDEs: 3 Num FREs: 8 Function Index : func idx [0]: pc = 0x1020, size = 16 bytes STARTPC CFA FP RA 0000000000001020 sp+16 u u 0000000000001026 sp+24 u u func idx [1]: pc = 0x1030, size = 16 bytes STARTPC[m] CFA FP RA 0000000000000000 sp+8 u u 000000000000000b sp+16 u u func idx [2]: pc = 0x1139, size = 59 bytes STARTPC CFA FP RA 0000000000001139 sp+8 u u 000000000000113a sp+16 c-16 u 000000000000113d fp+16 c-16 u 0000000000001173 sp+8 c-16 u As distros levam um tempinho até subir o novo pacote pra você atualizar no seu Linux. Se não quiser esperar, baixa do repositório oficial e compila. Seguem as instruções: $ wget https://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.xz $ sudo apt install texinfo flex bison libgmp-dev libmpfr-dev gcc make $ tar xf binutils-2.40.tar.xz $ cd binutils-2.40 $ ./configure --enable-colored-disassembly # já testa a nova opção ;-) $ make $ ./binutils/objdump --version GNU objdump (GNU Binutils) 2.40 Copyright (C) 2023 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) any later version. This program has absolutely no warranty.
-
Estrutura de dados em c
Bem-vindo, Daniel! Dá uma olhada aqui e adapta seu post? Abraço!
-
Invasão de memória de uma string sobre outra string
Pra você e sua família também. 🙂 Entendi. Bom, como exercício ok, mas em geral ID é numérico, até pela velocidade de comparação. 😉 Abraço!
-
Invasão de memória de uma string sobre outra string
Opa, bem vindo à comunidade! Me parece que a sua função compareAluno() tenta advinhar o que é para comparar (ID, nome ou CPF) através do tamanho da string. Isso é um problema porque tanto CANOME quanto CACPF expandem para 12, fazendo com a que na hora de comparar o CPF, a comparação do if na linha 346 retorne verdadeiro e o programa compare um CPF com um nome. A propósito, qual o motivo de você utilizar char[] nos IDs? Se os IDs vão conter só números, podem ser do tipo int. Abraço.
-
atividade de programação que tenho duvida
Oi @Washington. Feliz ano novo! 🙂 Mas é que você não apontou exatamente onde está sua dúvida, entende? Se você postar sua tentativa e apontar onde está sua dúvida, a gente tem como te ajudar melhor. Um abraço.
-
atividade de programação que tenho duvida
Oi Eric. Na real você não falou sobre sua dúvida. Por favor, leia o seguinte post afim de adaptar seu tópico: Um abraço!
-
Sujeira em firmware.bin
Oi Washington. Não existe "sujeira". O conteúdo de um arquivo binário são bytes que não necessariamente possuem representação textual. Para entender melhor o que falei, recomendo ler a seção Númreros -> O Byte e os capítulos Cadeias de Texto e Arquivos completos deste livro. Abraço!
-
Descompactação de firmware.bin
Tudo bem e você? Tem comando no Linux pra isso. 😉 Outra opção (online) é o CyberChef. Abraço!
-
Programa que entra em Diretório e copia tudo para o Diretório Anterior.
Ah, você precisa do xcopy então. O xcopy copia um diretório e todos os seus subdiretórios e arquivos para um dado destino. Isto é chamado de cópia recursiva. 😉
-
do function with sprintf
Hi @Mohsen. Welcome to our community. 🙂 A few things you should consider: Please edit your current post and format your C code as code by selecting it and clicking the <> button in the text editor. 😉 To your main problem: you are returning a pointer to a local (stack-allocated) buffer that only exists while get_time() is running. You can't do that. In C, you have a few options: Declare you return variable in the function that calls the desired function (in your case, it'd be in main()) and pass it to the desired function as reference. Here's an example: void get_time(char *currentTime) { // 3. receive the buffer as reference snprintf(currentTime, 80, "%s", "my text"); // 4. write to the buffer } int main(void) { char currentTime[80]; // 1. declare/allocate the buffer before calling the function get_time(_timstamp, dt, currentTime); // 2. pass a reference to the buffer printf("current time: %s \n", currentTime); // 5. buffer contains the string set by get_time() return 0; } As you will notice, I didn't complete the exercise for you. Instead, I've pointed out one way to solve it. 😉 You could also use a global variable or a dynamically-allocated buffer, but your solution depends on what you've studied. If you never studied pointers, then use a global variable. If you didn't study dynamic memory allocation, then use the pointer reference as shown. Other important fixes in your code: You mixed C and C++ headers and functions and this can become very messy very quickly. For example, string is different from char*. Mixing them will thrown errors. So, choose one language and stick with it. In your case, I recommend choosing C. Here's the fixes you need for that: Replace <string> by <string.h>. Remove <iostream>. Remove <cstring>. Remove the using directive. Don't use string. Use char* instead. Replace main() by main(void). sprintf() is insecure and decprecated. Use snprintf() instead. The latter needs the maximum number of characters to write (use the same size you've declared the buffer with). Surely there's more room for improvement, but I'll stop here for now. 🙂 Good luck!
-
Duolingo
O Duolingo é um app para smartphone que ajuda muito no estudo de um idioma. Todo dia uns 30 minutinhos de treino e em poucos meses seu nível de inglês vai pra outro patamar.
-
Trabalho da faculdade => Lista de supermercado em C (URGENTE!!!)
Olá! Por favor, leia e adapte seu tópico: Obrigado!
-
Programa que entra em Diretório e copia tudo para o Diretório Anterior.
@edummoreno se entendi bem, você quer copiar todos os arquivos de uma pasta para uma pasta um nível acima. Neste caso, não precisa descobrir os nomes de arquivos com força bruta (tentar todas as possibilidades até acertar), nem mesmo entrar na pasta. A partir da pasta destino dos arquivos, você faz (em batch): copy pasta1\*.* . copy pasta2\*.* . O “asterisco ponto asterisco” expande para todos os arquivos do diretório. Já o "ponto" significa "diretório atual". Isso resolve seu problema? Abraço!
- Palestra: Dominando a Engenharia Reversa no Linux
-
Preciso de ajuda para somar o valores dentro de um intervalo de um número digitado pelo usuario em c. Tentei pensar em alguma de resolver isso e nao consegui
Opa. Um intervalo são dois números, certo? Por que você tá lendo três números? Não ficou claro pra mim. Abraço, Fernando
-
Binários guardam informações da máquina que os criou ?
O endereço MAC da máquina não. No entanto, as seguintes informações podem estar disponíveis, dependendo do formato de exeuctável em uso e das opções configuradas no compilador e linker: Caminho completo de onde os arquivos de código-fonte estão armazenados, o que pode conter o nome de usuário da máquina. Versão do compilador e do linker utilizado, seja em texto puro, ou seja por padrões que permitam identificação, como os utilizados pelo DIE. Por exemplo, este arquivo contém a lógica que o DIE utiliza para identificar versões do Visual Studio. Data e hora que o arquivo executável foi gerado (somente em PE). Idioma de resources, o que pode sugerir o idioma do Windows de quem compilou o binário (somente em PE). Em tempo, sempre que postar código aqui, use o botão <> para formatar seu código como código. Olha a diferença: Sem formatação: #include <stdio.h> printf("Olá, mundo!\n"); Com formatação: #include <stdio.h> printf("Olá, mundo!\n"); Valeu!
-
contar caracteres de uma string
Olá! Bom, tem algumas coisas para serem esclarecidas aí 🙂 Em C, a função strlen() aceita um char* (não um char) como argumento. Este é um ponteiro para um tipo primitivo e é o jeito oficial de se implementar strings em C. Já em C++, a classe std::string é completamente diferente. Para determinar seu tamanho, ela possui uma função (método) length(). Aqui tem um exemplo de como utilizá-la. O trecho de código que você postou declara um array de objetos string com dez elementos (e não uma única string). Sendo assim, cada elemento do seu array pode ser uma string com tamanho diferente. PS.: C++ também trabalha com os tipos primitivos e com C strings. Abraço!