Fórum Desviando execução #229644

03/05/2004

0

Existe alguma forma de deviar a execução do programa para qualquer parte do mesmo programa, usando um comando do tipo ´execute as informações apartir( 10124 Bytes)´


Ou seja executar da aqueles bytes do programa pra frente!!!! :roll:


Rodrigovollo

Rodrigovollo

Responder

Posts

03/05/2004

Beppe

É possível sim, mas é totalmente inusitado ter que fazer isso, sem contar que é uma tarefa altamente propensa a erros.


Responder

Gostei + 0

04/05/2004

Rodrigovollo

É possível sim, mas é totalmente inusitado ter que fazer isso, sem contar que é uma tarefa altamente propensa a erros.



Mais eai como é q eu vou fazer isso ????????????. por onde eu começo??


Responder

Gostei + 0

04/05/2004

Beppe

asm jmp $12345678 end;



Responder

Gostei + 0

05/05/2004

Blivio

A sintaxe é essa mesma? Dá erro.


Responder

Gostei + 0

05/05/2004

Rodrigo_rcp

A sintaxe é essa mesma? Dá erro.


é apenas um exemplo.


Responder

Gostei + 0

05/05/2004

Beppe

É, é sim...o assembly do Delphi deveria compilar isto(não testei). Como é pra dar pau mesmo, tenta usar call.

asm call $12345678 end;


Lógico que este endereço não contém códigos executáveis, então não espere nenhum resultado não-catastrófico...


Responder

Gostei + 0

06/05/2004

Blivio

Prezado amigo, tanto usando JMP como CALL, dá o seguinte erro: [b:a0b5f653d9]Invalid combination of opcode and operands[/b:a0b5f653d9].

Se puder ajudar, agradeço muito.


Atenciosamente,

Blivio.


Responder

Gostei + 0

07/05/2004

Rodrigovollo

É, é sim...o assembly do Delphi deveria compilar isto(não testei). Como é pra dar pau mesmo, tenta usar call.
asm call $12345678 end;


Vou testar se isso vai dar certo, depois eu posto aqui... :wink:


Responder

Gostei + 0

07/05/2004

Beppe

No caso do Delphi, call´s e jmp´s recebem sempre(leia-se: só faz sentido) um nome(label ou nome de função). Eu nunca tinha feito passando um endereço imediato. O Delphi usa uma sintaxe diferente em alguns casos, talvez
call [$12345678]

ou
mov eax, $12345678
call eax

Eu ainda só não entendi pq desta necessidade... :?:


Responder

Gostei + 0

07/05/2004

Tatuweb

Colegas,

há diferença entre as instruções assembly. A que mais se encaixa seria:
[color=olive:2ac3ed9a6a]JMP DWORD PTR [$12345678][/color:2ac3ed9a6a]

Isso é diferente de
[color=olive:2ac3ed9a6a]JMP DWORD PTR $12345678[/color:2ac3ed9a6a]

que é diferente de
[color=olive:2ac3ed9a6a]MOV EAX, $12345678
CALL EAX[/color:2ac3ed9a6a]

que é diferente de muitas outras combinações. A instrução JMP $12345678 postada pelo Beepe não está errada. Só que ela não é permitida usando o assembler inline. Se fosse compilada no MASM, por exemplo, não geraria erro nenhum. Lembre-se Assembler Inline não é o mesmo que Assembly. Outra coisa: as instruções de um programa não começa no inicio do arquivo. Portanto

Existe alguma forma de deviar a execução do programa para qualquer parte do mesmo programa, usando um comando do tipo ´execute as informações apartir (10124 Bytes)´


não vai funcionar. Todos os arquivos executáveis Win32 obedecem a um padrão de formato que chamamos de PE (Portable Executable). Sendo assim para que vc inicie um segundo EXE embutido vc teria que inicialmente descobrir o ´Entry Point´ do exe1 e modificar afim de apontá-lo para o ´Entry Point´ do seu EXE e, após executadas as intruções do seu EXE apontar novamente para que execute as instruções do EXE1.

Sabe quando vc vai conseguir o que pretende usando assembler inline? Só quando o tio Bill aderir ao OpenSource :) ou seja, nunca. Ou vc faz o programa em assembly (talvez em VC++) ou esqueça.

Sinceramente, até hoje só vi um tipo de aplicação utilizar isso: vírus. Se o seu objetivo não é esse, vc pode por exemplo guardar o EXE em forma de recurso e extraí-lo quando quiser executa-lo. Não é viável mas é o que se pode fazer. Em se tratando de programação sempre haverá uma segunda opção para se criar uma rotina. Diga o que quer fazer e tentaremos ajudar.

:?: :?:


Responder

Gostei + 0

10/05/2004

Rodrigovollo

Colegas, há diferença entre as instruções assembly. A que mais se encaixa seria: [color=olive:d07af69204]JMP DWORD PTR [$12345678][/color:d07af69204] Isso é diferente de [color=olive:d07af69204]JMP DWORD PTR $12345678[/color:d07af69204] que é diferente de [color=olive:d07af69204]MOV EAX, $12345678 CALL EAX[/color:d07af69204] que é diferente de muitas outras combinações. A instrução JMP $12345678 postada pelo Beepe não está errada. Só que ela não é permitida usando o assembler inline. Se fosse compilada no MASM, por exemplo, não geraria erro nenhum. Lembre-se Assembler Inline não é o mesmo que Assembly. Outra coisa: as instruções de um programa não começa no inicio do arquivo. Portanto [quote:d07af69204]Existe alguma forma de deviar a execução do programa para qualquer parte do mesmo programa, usando um comando do tipo ´execute as informações apartir (10124 Bytes)´


não vai funcionar. Todos os arquivos executáveis Win32 obedecem a um padrão de formato que chamamos de PE (Portable Executable). Sendo assim para que vc inicie um segundo EXE embutido vc teria que inicialmente descobrir o ´Entry Point´ do exe1 e modificar afim de apontá-lo para o ´Entry Point´ do seu EXE e, após executadas as intruções do seu EXE apontar novamente para que execute as instruções do EXE1.

Sabe quando vc vai conseguir o que pretende usando assembler inline? Só quando o tio Bill aderir ao OpenSource :) ou seja, nunca. Ou vc faz o programa em assembly (talvez em VC++) ou esqueça.

Sinceramente, até hoje só vi um tipo de aplicação utilizar isso: vírus. Se o seu objetivo não é esse, vc pode por exemplo guardar o EXE em forma de recurso e extraí-lo quando quiser executa-lo. Não é viável mas é o que se pode fazer. Em se tratando de programação sempre haverá uma segunda opção para se criar uma rotina. Diga o que quer fazer e tentaremos ajudar.

:?: :?:[/quote:d07af69204]


Beleza!!! Mas não entendi uma coisa porque uma pessoa q desenvolve um virus consegue fazer isso e eu nunca vou conseguir fazer isso :shock:


Responder

Gostei + 0

10/05/2004

Nildo

NUNCA diga ´NUNCA´.
nâo é que você não vá conseguir, é que existem pessoas que realmente levam jeito pra coisa. Esse tipo de pessoa que faz virus, não é alguem normal. Os melhores nunca resolvem do nada desenvolver um virus. Eles são pagos por, na maioria das vezes, empresas de anti virus para desenvolver virus maléficos. Se eles são contratados, quer dizer que não são qualquer um.


Responder

Gostei + 0

10/05/2004

Rodrigovollo

NUNCA diga ´NUNCA´. nâo é que você não vá conseguir, é que existem pessoas que realmente levam jeito pra coisa. Esse tipo de pessoa que faz virus, não é alguem normal. Os melhores nunca resolvem do nada desenvolver um virus. Eles são pagos por, na maioria das vezes, empresas de anti virus para desenvolver virus maléficos. Se eles são contratados, quer dizer que não são qualquer um.



Só acho o seguinte eu não vou para de tentar vou achar um jeito
se ele faz eu tb vou fazer !!!!!!!!


Responder

Gostei + 0

10/05/2004

Beppe

[quote:04463fdb3f=´nildo´]NUNCA diga ´NUNCA´. nâo é que você não vá conseguir, é que existem pessoas que realmente levam jeito pra coisa. Esse tipo de pessoa que faz virus, não é alguem normal. Os melhores nunca resolvem do nada desenvolver um virus. Eles são pagos por, na maioria das vezes, empresas de anti virus para desenvolver virus maléficos. Se eles são contratados, quer dizer que não são qualquer um.



Só acho o seguinte eu não vou para de tentar vou achar um jeito
se ele faz eu tb vou fazer !!!!!!!![/quote:04463fdb3f]
Jeito de fazer o q? Já foi lhe dito como desviar a execução...e o q falta?


Responder

Gostei + 0

10/05/2004

Khundalini

Resumindo: isso só é possível editando o código do executável em Assembly. Pedir pro Delphi fazer isso, creio que seja impossível. O Delphi não é preparado pra esse tipo de operãção. E mais, se alguém conseguir fazer isso em assembly built-in do Object Pascal, vai ser a custo de muita queimação de neurônio, pois o programa terá que ser muito inteligente pra prever como o código será organizado nas seções do programa executável, coisa que quem organiza é o compilador.

[]s
Rubem Rocha
Manaus, AM


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar