Desviando execução
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:
Ou seja executar da aqueles bytes do programa pra frente!!!! :roll:
Rodrigovollo
Curtidas 0
Respostas
Beppe
03/05/2004
É possível sim, mas é totalmente inusitado ter que fazer isso, sem contar que é uma tarefa altamente propensa a erros.
GOSTEI 0
Rodrigovollo
03/05/2004
É 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??
GOSTEI 0
Beppe
03/05/2004
asm jmp $12345678 end;
GOSTEI 0
Blivio
03/05/2004
A sintaxe é essa mesma? Dá erro.
GOSTEI 0
Rodrigo_rcp
03/05/2004
A sintaxe é essa mesma? Dá erro.
é apenas um exemplo.
GOSTEI 0
Beppe
03/05/2004
É, é sim...o assembly do Delphi deveria compilar isto(não testei). Como é pra dar pau mesmo, tenta usar call.
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...
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...
GOSTEI 0
Blivio
03/05/2004
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.
Se puder ajudar, agradeço muito.
Atenciosamente,
Blivio.
GOSTEI 0
Rodrigovollo
03/05/2004
É, é 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:
GOSTEI 0
Beppe
03/05/2004
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
ou
Eu ainda só não entendi pq desta necessidade... :?:
call [$12345678]
ou
mov eax, $12345678 call eax
Eu ainda só não entendi pq desta necessidade... :?:
GOSTEI 0
Tatuweb
03/05/2004
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
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.
:?: :?:
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.
:?: :?:
GOSTEI 0
Rodrigovollo
03/05/2004
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:
GOSTEI 0
Nildo
03/05/2004
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.
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.
GOSTEI 0
Rodrigovollo
03/05/2004
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 !!!!!!!!
GOSTEI 0
Beppe
03/05/2004
[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?
GOSTEI 0
Khundalini
03/05/2004
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
[]s
Rubem Rocha
Manaus, AM
GOSTEI 0
Tatuweb
03/05/2004
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:
Só um esclarecimento. Talvez eu tenha sido mal interpretado. Não quiz dizer que vc nunca faria isso. Normalmente os vírus que se utilizam dessa técnica são escrito em assembly, usando compiladores como MASM, TASM ou NASM. Com o advento do VBS da Micro$oft essa técnica saiu de moda e hj quase não se vê mais vírus do tipo infectadores de executáveis. Então quando eu disse que vc nunca faria isso eu quiz dizer que nunca, ou melhor, dificilmente faria isso no delphi, mas utilizando outros compiladores seria perfeitamente possível.
GOSTEI 0