Jump to content

Nitczi

Members
  • Joined

  • Last visited

  1. Nitczi changed their profile photo
  2. Opa galera, bom dia/tarde! Estou começando a fazer engenharia reversa na biblioteca libflutter.so, o intuito é para desativar o ssl pinnig e conseguir interceptar o tráfego em alguns app do meu celular. Minha questão é a seguinte, algumas das ferramentas que automatizam esse processo tentam encontrar valores Hard-coded (para essa biblioteca, o indicado era tentar encontrar a ssl_client ou a ssl_server), para localizar a função que faz a verificação se o certificado SSL é confiável ou não (consegui encontrá-la depois de um tempo mas não pelas strings). A função que faz essa verificação ssl, e a que eu tenho que encontrar, é essa abaixo: O ponto é, quando você procura por essas strings na biblioteca elas são encontradas, mas em outros offsets e não na função, e não tem nenhuma referência à função de verificação. Porém essa função na minha biblioteca não tem as strings "ssl_client" e "ssl_server" diretamente. Eu acredito que na verificação de IF/ELSE, dependendo do resultado, ele vai formar o offset que irá direcionar para aquela string, mas como eu posso comprovar isso? Abaixo tem a imagem de como essas strings Hard-coded deveriam aparecer, e logo abaixo é como aparece na biblioteca que estou analisando. Também estarei deixando anexado a biblioteca que estou analisando para que possam entender melhor(A função está com nome FUN_00696870). Só para demonstrar, as strings "ssl_client" e "ssl_server" aparecem na biblioteca dessa forma: libflutter.so
  3. Olá pessoal, boa noite! Estou abrindo esse tópico pois preciso de ajuda para um entendimento em um código em assembly que aparece no livro "Programação em Baixo Nível - Igor Zhirkov" na página 52 ele mostra um código que tem o objetivo de mostrar o valor do registrador RAX, segue abaixo: section .data codes: db "0123456789ABCDEF" section .text global _start _start: mov rax, 0x1122334455667788 mov rdi, 1 mov rdx, 1 mov rcx, 64 ; Cada 4 bits devem ser exibidos como um dígito hexadecimal ; Use o deslocamento (shift) e a operação bit a bit AND para isolá-los ; o resultado é o offset no array 'codes' .loop: push rax sub rcx, 4 ; cl é um registrador, a parte menor de rcx ; rax -- eax -- ax -- ah + al ; rcx -- ecx -- cx -- ch + cl sar rax, cl and rax, 0xf lea rsi, [codes + rax] mov rax, 1 push rcx syscall pop rcx pop rax test rcx, rcx jnz .loop mov rax, 60 xor rdi, rdi syscall O que eu não estou conseguindo compreender é: Na linha onde está "sar rax,cl" vi que isso é uma operação de bit shifting para a direita, pesquisei em alguns sites para ver como ficaria essa operação e o resultado é sempre 5, mas rodando o programa o resultado é 1, por que? Não entendi o propósito do programa em si, quem souber explicar fico muito grato. Tentei procurar na internet e utilizar o ChatGPT mas ainda não consegui entender na totalidade a ponto de saber explicar para alguém, quem puder me ajudar agradeço muito.
  4. Valeu meu amigo. Não tinha chegado até o final da aula, eu tinha definido uma planilha de estudo e hoje seria apenas para praticar Engenharia Reversa, no caso o que seria dado na aula. Aí deixei amanhã reservado para fazer os códigos em C, mas valeu mesmo pela ajuda!
  5. Opa, Boa Tarde! Minha primeira interação aqui no Fórum, gostaria de saber se alguém tem disponível, ou sabe de algum outro sample, o arquivo de anti-debug da aula 24 do CERO, não consegui achar exemplos na internet nem aqui no fórum.