Material assembly

Fala pessoal!
estou fuçando um programa, de curioso comecei a mexer com assembly, mas material para ele é difícil de encontrar
em fim, como estou “brincando”, não pretendo aprender os fundamentos de assembly, estou querendo alterar o valor de uma variável de um programa já compilado, mas nao consigo de forma nenhuma, só acho tutoriais ensinando os fundamentos

em fim, o que eu estou querendo fazer, é simples (eu acho) o programa recebe um valor de uma linha do arquivo.ini, mas queria alterar seu código para ao invés dele receber o conteúdo desse arquivo.ini ele recebe o valor por parâmetro
acredito que ele recebe todos os valores do arquivo ini, e armazena em um vetor, dai seria só alterar o vetor que utilizaria

exemplo:

string ip = arquivo[10] // atribui a variavel ip o valor da linha 11 no arquivo.ini

seria substituir arquivo[10] para args[0]

realmente, muito simples no código fonte, mas no assembly não parece tão facil
Em tempo de execução (pelo editor OllyDbg) consigo procurar o endereço da memoria e alterar com o programa em execução, mas no codigo compilado não consigo

será que vou ter que realmente aprender todos os fundamentos só para fazer uma alteração dessa?
alguem sabe algum material?

Isso deveria estar em Outras Linguagens?!? >> http://www.guj.com.br/forums/show/20.java

Desculpe se eu estiver enganado! :slight_smile:

tem esse livro aqui http://www.erica.com.br/detalhes.asp?cod=4261

Tio, é bem mais complicado que parece - normalmente crackers (que são aqueles carinhas que mexem em programas já compilados e fazem com que seja possível, por exemplo, desabilitar a proteção de código) não mudam a funcionalidade de um programa (que é o que você quer fazer) mas simplesmente desabilitam a funcionalidade (por exemplo, onde é feito uma verificação de um flag que indica se a licença é válida, põem uma instrução JMP (Jump) ou coisa parecida, para passar por cima desse código.
No seu caso você quer mudar o lugar de onde você quer pegar os dados, o que não costuma ser trivial em termos de mexer em código já compilado.

O que você está querendo fazer não possui solução simples.
Eu fiz um teste bem bobo aqui e tive o seguinte resultado. Eu fiz dois códigos em C, um que colocava um valor em uma variavel e outro que coloca um valor passado por parametro na mesma variavel:

int main(int argc, char **argv) { char c = 10; return 0; }

int main(int argc, char **argv) { char c = *argv[0]; return 0; }

Depois eu rodei o seguinte comando para gerar a listagem em assembly correspondentes aos dois arquivos:

gcc -c -g -Wa,-ahl=main.s main.c

Ess comando gera uma listagem assembly um pouco mais legivel, ele adiciona alguns comentarios que ajudam a localizar os pontos do código C que correspondem a um ponto do assembly.
Enfim, gerando os respectivos arquivos assembly e comparando com um diff, cheguei ao seguinte resultado:

4:main.c **** char c = 10; 24 .loc 1 4 0 25 000e C644240F movb $10, 15(%esp)

4:main.c **** char c = *argv[0]; 24 .loc 1 4 0 25 000e 8B450C movl 12(%ebp), %eax 26 0011 8B00 movl (%eax), %eax 27 0013 0FB600 movzbl (%eax), %eax 28 0016 8844240F movb %al, 15(%esp)

Como pode ver, não é só mover um valor para um registrador, você tem de fazer mais algumas operações e isso não é trivial.

[quote=mi.rodrigues]Isso deveria estar em Outras Linguagens?!? >> http://www.guj.com.br/forums/show/20.java

Desculpe se eu estiver enganado! :slight_smile: [/quote]

Foi mal pessoal, nem reparei.

matheuslmota realmente, parecia simples imaginando, mas realmente a coisa é bem mais complicada… se não como o entanglement falou, seria tudo questão de dar um jump no codigo de programas que precisam de validação…
No momento meu objetivo não é estudar Assembly ja que não tem muita ligação com meu objetivo profissional, então acho que essa idéia de mexer no codigo compilado deixa pra la :stuck_out_tongue:

A linguagem vai depender da arquitetura usada pelo processador usado para compilar o programa também.

Não vai ser algo trivial … querendo ou não voce VAI ter que aprender algo em baixo nivel para fazer isso.

veja se isso da uma esclarecida:

De qualquer maneira, se você realmente quer fazer isso, pode tentar usar esta ferramenta:

https://www.hex-rays.com/products/ida/index.shtml