-
Nitczi changed their profile photo
-
Engenharia reversa na biblioteca libflutter.so
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
-
Programação em Baixo Nível - print_rax.asm
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.
-
Sample da Aula 24 do Cero
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!
-
Sample da Aula 24 do Cero
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.