Ir para conteúdo
Fórum Script Brasil
  • 0

Modificação Binária


Denis Bittencourt Muniz

Pergunta

Olá galera! Teria jeito de modificar, digamos, bruscamente um aplicaitvo?? Exemplo (em C):

#include <stdio.h>

int main()
{
printf("A");
return 0;
}

No caso, queria, depois do programa compilado, modificar a letra (string) "A" por "B" (string). Dando mais detalhes, faria um aplicativo em VB6 para ler o binário do aplicativo em C e alterar a 'string' que "printf" usa.

No caso, queria saber se isso é possível (creio que sim) e alguma técnica de uso, um ponto de partida.

Falows galera!

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

acredito que seja possivel sim (não me pergunte como) com assembly...

afinal, se o codigo c é compilado pra assembly, você deve poder alterar com assembly.

porque ouvi dizer que fazem mais o menos isso pra descobrir seriais de jogo por exemplo. os caras abrem o codigo assembly do exe. olhando o codigo (e olhando muito bem mesmo), os caras descobrem a logica pra fazer o serial.

se o exe é apenas um codigo em assembly, não vejo porque não possa ser alterado. agora em vb6 isso seria foda...

o ponto de partida que vejo seria... aprender assembly!!

mas vamo esperar alguém que manje mais que eu postar aí

Link para o comentário
Compartilhar em outros sites

  • 0

Creio que você tenha querido dizer "sutilmente" ao invés de "bruscamente", não? Porque, ao meu ver, trocar uma string não é mudança brusca, e sim sutil. Quanto ao caso, se você abrir o executável em um editor hexadecimal (ou no Edit do prompt, com a opção de arquivo binário) você encontrará suas strings intactas no mesmo. Substituindo-as por strings de mesmo tamanho (ou menor) você não terá problemas. Só strings maiores do que as originais é que não sei dizer exatamente o que você precisaria fazer (creio que em algum lugar do código deva existir o tamanho da mesma, que deveria ser alterado neste caso).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

valeu galera!

Fiz um aplicativo em C e funcionou como eu esperei, mas feito em VB6 (Native/P-Code) não deu resultados positivos, mas beleza, vou tentar achar uma solução, se possível.

Falows!

Link para o comentário
Compartilhar em outros sites

  • 0

olha a sintaxe do UNIX para uma chamada do kernel para escrita


        mov     edx,len;tamanho da mensagem
        mov     ecx,msg;mensagem
        mov     ebx,1  ;saida: codigo 1 significa (stdout)
        mov     eax,4  ;número da chamada de sistema: código 4 significa (sys_write)
        int     0x80   ;chamada do kernel

Link para o comentário
Compartilhar em outros sites

  • 0

Perto da função printf você vai encontrar o endereço onde a string está localizada dentro do arquivo. Aí, você tem duas opções: Ou edita a string, como o Graymalkin sugeriu, ou edita o endereço. A primeira opção é mais fácil. O único problema é que a string nova não pode ser maior que a antiga. A segunda opção é mais chata porque você vai precisar procurar um espaço vazio dentro do binário, colocar a string lá, e mudar o endereço na chamada da função. Em compensação, vai funcionar com qualquer string. Você só precisa se certificar de que a sua string não está no meio do código do programa.

E, só lembrando, o último caractere da string tem que ser um \0. ;)

Té mais.

Link para o comentário
Compartilhar em outros sites

  • 0

Bem lembrado iSoron!

É importante ter em mente quando se tentar realizar alterações de strings em executáveis, que nem sempre regiões aparentemente "vazias" pode ser utilizadas.

Durante a compilação, as áreas destinadas a dados (DS - data segment) e a código (CS - code segment) costumam ficar próximas, e é fácil detonar um programa com uma sobreposição.

Se foi definido um segmento extra de dados (ES - extra segment), a operação pode ficar mais simples.

Outro toque... se for mudar endereços de chamadas, tenha muita cautela, ou pode fazer com que o programa alterado detone seu windows. Chamadas ao sistema operacional ou à Bios são perigosas quando manipuladas sem um profundo conhecimento.

Abs,

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...