Jump to content

Fernando Mercês

Administradores
  • Posts

    1,040
  • Joined

  • Last visited

Recent Profile Visitors

12,695 profile views

Fernando Mercês's Achievements

0

Reputation

  1. Opa, é jogo de Windows, @Eletro? PE?
  2. De nada. É, pra Delphi acho que é o melhor. Não precisa de outro programa. Dá pra encontrar uma code cave com o próprio x64dbg. No canal temos um vídeo sobre injeção de código, mas serve para injeção de dados também: Se não houver "holes" utilizáveis (o que é raro), dá pra criar uma seção também (assunto coberto no vídeo da parte 2). Mas não deixa de seguir o CERo até o final. Tu vai curtir! Abraço e boa sorte!
  3. Humm.. neste caso em específico eu acho mais fácil criar um registro para o SERVIDOR no DNS interno e simplesmente mapear producao$ para o novo lugar. Assim nem precisa alterar o programa. 😉 Se realmente for partir pra engenharia reversa, bem, já passei por um caso parecido. Eu diria que sua linha de pensamento de buscar a string no executável está certa. O que eu faria: Usaria o IDR para buscar o endereço do evento BtAdicionarClick. Usaria o x64dbg para colocar um breakpoint no endereço conseguido no passo acima. Seguiria a execução até encontrar onde a string é carregada. Certamente o CERO vai te ajudar. Se preferir ler, tem o livro gratuito Fundamentos de Engenharia Reversa também. Se tiver dúvidas durante o processo, pode postar aqui que a galera ajuda (screenshots, trechos de código, etc são bem vindos). 🤗 Abraço e boa sorte!
  4. Código interessante! Acho que o @Felipe.Silva vai curtir também! Ele publicou um artigo recentemente sobre alocação de memória aqui no Mente Binária. :) Marta, ao que me parece, sua myFree() não está funcionando. Criei uma main() básica: int main(void) { int *p = myMalloc(sizeof(int)); scanf("%d", p); printf("Before freeing it: %d\n", *p); myFree(p); printf("After freeing it: %d\n", *p); return 0; } E o conteúdo de p é impresso na tela, mesmo depois da chamada à myFree(): % ./marta <<< 42 Before freeing it: 42 After freeing it: 42 Em que momento você recebe um runtime error? Abraço, Fernando
  5. Imagina. Foi uma sugestão mesmo, pra ficar melhor pra todos. Tá tudo certo. ;) Acho que neste caso precisaria ser alguém que conheça de Arduino. Eu não sei o que são essas DDRD, PORTC, etc. Você sabe? Talvez ajude relembrar os operadores em C. Por exemplo, o código abaixo: PORTD |= (1<<3); É o mesmo que: PORTD = PORTD | 8; Ou seja, é uma operação OU do valor desta variável/porta com "1 com 3 bits deslocados para a esquerda", que dá no mesmo que "multiplicar por 2 três vezes", que seria 1x2x2x2 que é igual a 8. O resultado é atualizado na própria variável/porta. Os links vão te ajudar a entender. Agora a razão pela qual o código faz isso, não sei te dizer. :( Vou ver se consigo ajuda de alguém que entenda de Arduino. Abraço, Fernando
  6. Opa! Seria legal você editar seu post pra formatar seu código como código (é o botão com os símbolos <> aqui no editor) e usar a opção de realce de sintaxe em C. Porque aí fica assim ó: unsigned int i,n,k,d,y; unsigned long previousTime = 0; byte hours = 12; // start time byte minutes = 15; byte seconds = 00; int val; void setup() { DDRD = 0xFE; DDRB = 0xFF; DDRC = 0xFE; PORTC = 0x01; PORTD = 0x03; PORTB = 0x00; if(hours == 12) hours = 0; } Muito melhor de ler. :) Sobre o programa em si, a sua dúvida é aonde exatamente? Qual parte do código que você não entendeu? Abraço, Fernando
  7. A Hex-Rays surpreendeu todo mundo agora. Liberou a versão mais recente do IDA, a 7.6, no modelo freeware. Só isso já seria muito bom, mas eles foram além: O IDA 7.6 freeware inclui um descompilador online (cloud-based) gratuito! Pois é, pessoas... Parece que a concorrência exercida pelo Ghidra realmente está sendo saudável para a comunidade. Ao disparar o plugin de descompilação (F5), o programa deixa claro que este recurso na versão gratuita suporta somente binários de 64-bits, dentre outros avisos: Ao continuar, a descompilação é concluída e códiogo em pseudo-C é exibido ao lado. Veja o exemplo descompilando o notead.exe nativo do Windows: Os recursos de interação como renomear variáveis e funções no descompilador estão habilitados, uma notícia muito boa para a comunidade! Além do descompilador, a versão 7.6 do IDA freeware inclui: Modo escuro Tá na moda né? E o IDA não ficou de fora. Se você for em Options -> Colors e mudar o Theme para dark, vai ter um visual assim: Organização de dados em pastas Sendo um disassembler interativo, a versão 7.6 oferece a opção de organizar os dados em pastas. Isso vale para vários locais. Um deles é a janela de funções. É possível agora criar pastas e organizar as funções dentro delas. Para isso, basta clicar com o botão direito do mouse na janela de funções e escolher Show folders. Depois é só selecionar as funções desejadas e escolher Create folder with items. E mais: Suporte a binários compilados em Go. Suporte ao novo Apple M1. Rebasing mais rápido. Sincronização entre o descompilador online e o disassembly. Lembando que o disassembler em si suporta binários de 32-bits também (PE, ELF e Mach-O). Só o descompilador que não.
  8. Interessante. Temos aqui também: https://mentebinaria.gitbook.io/engenharia-reversa/apendices/ferramentas#disassemblers Abraço!
  9. Avançou bem! :) Algumas observações aí: Você não precisa desse "funcionário fantasma" (kkkkk) só pra manter a soma. Basta uma variável do tipo int (que precisa ser declarada na main) e no final do segundo loop você pode fazer algo como soma = soma + func[i].salario; No seu printf no final você tá assumindo que o primeiro elemento do array (vetor) func tá na posição 1, mas na verdade arrays em C começam em zero, logo, o primeiro elemento é func[0] e o segundo é func[1]. Ainda no printf, parece que tem mais "percents" do que variáveis para substituí-los. Confere aí. O número de "percents" tem que ser igual ao número de argumentos depois dessa string que tem os "percents". Uma dica pra ajudar a não se perder é pular linha no printf pra deixar mais legível. C permite isso. Só prestar atenção nas vírgulas e não esquecer de fechar parênteses no fim. Tipo: printf("%s : R$ %d\n%s : R$ %d\n", func[0].nome, func[0].salario, func[1].nome, func[1].salario); Boa sorte!
  10. Olá! Que bom que você está tentando. Vira e mexe aparecem pessoas aqui que só querem as repostas. O problema disso é que não aprendem. :( Indo ao assunto, bom, você vai precisar adicionar uma função. No momento o seu programa só tem uma função, a main. Para completar esse exercício você vai precisar de mais uma, que o exercício já te dá o nome, salarioCargo. Ela retorna o total pago, então você já sabe que o retorno da função é do tipo int (já que tá usando este tipo para o salário no programa todo). A função recebe 2 parâmetros: um vetor para a estrutura de funcionários e uma string. A declaração então ficaria mais ou menos assim: int salarioCargo(Funcionario *funcionarios, char *cargo) { // seu código daqui } No código, você vai precisar iterar (usando um loop, tipo for ou while) pelo vetor de funcionários e comparar seus cargos com o cargo passado para a função. A partir daí somar os valores de seus salários. Pontos importantes: Na main, o jeito como você tá preenchendo as informações dos 5 funcionários é pouco otimizado. Seria melhor declarar um vetor de funcionários e fazer um loop para preencher as informações deles (for i=0; i<5; i++). Assim você já vai ter o vetor pra passar pra função salarioCargo também. O exercício é seu, por isso por favor, nunca peça para alguém fazê-lo (não to dizendo que você fez isso - pelo contrário, você não fez, mas só deixando claro que ninguém vai fazer pra você, afinal você é a futura programadora que está se formando e o mercado vai contar com você ☺️). Pode contar com a gente para todas as suas dúvidas. Pode ser que você precise revisitar suas notas, reler livros etc para entender sobre funções, arrays (vetores), ponteiros e loops para completar este exercício. Abraço, Fernando
  11. Opa! O exercício é esse mesmo! A coluna que você destacou exibe a posição dos bytes em grupos de 16 bytes. Analisemos a posição 0x210 por exemplo. Nela, há o byte 0x58. Já na posição 0x211, temos o byte 0x03, entende? Vai contando pra direita de um em um. 😉 Quando chegar no fim da linha, no caso da linha da posição 0x210, será o byte na posição 0x21F, que é 0x00. O próximo já é a posição 0x220, que é o byte 0x44. E assim segue... E aí. Qual é o byte na posição 0x2f4? 🙂 Abraço!
  12. Nussa, jamais pensaria nisso! haha boa fica, Felipe! 🙂
  13. Boa noite! Ah, é um .exe? No Linux, o edb só suporta os formatos nativos (ELF, a.out, etc). Tenta com um ELF nativo do sistema, tipo o /bin/ls. ;) Abraço!
  14. Salve! Bem vindo! Executa sim, sem necessidade de converso. Não faltou uma permissão de execução aí não (chmod +x arquivo)? Abraço!
×
×
  • Create New...