Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

[Tutorial] Faça seu .exe criar outro .exe

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C# [Tutorial] Faça seu .exe criar outro .exe

    Autor: Indisponivel
    Creditos do Post: Gadu


    Introduçao

    Nesse tutorial vamos aprender como fazer um executavel ser "criado" a partir de um outro executavel, eu utilizei essa tecnica no meu mais recente keylogger,para o mesmo criar o servidor, nao sei se essa tecnica ja existia mas eu tive que pensar muito para desenvolve-la.
    Gostaria de citar também que uma parte do codigo eu aprendi vendo os topicos do dark_side e so ai entao consegui bons resultados.
    Ah, uma ultima coisa... com esse tutorial até uma pessoa que iniciou o C hoje é capaz de desenvolver o programa, porém acredito que o mesmo nao vai entender o que se passa, o recomendado é ja saber bem os conceitos e algumas funçoes da linguagem... ou seja esse tutorial vai mostrar uma tecnica, entretanto nao vai dar enfasê a explicaçoes referentes ao C.

    Parte teórica

    Aqui daremos inicio a parte teórica do tutorial...vamos entender primeiro o que será feito:

    Nós criaremos um programa em 2 partes, cliente e servidor, pelo cliente nós forneceremos as seguintes informaçoes:

    -Nome
    -Idade

    Vale citar também que o cliente será feito em ambiente grafico (GUI), graças a isso vai ser possivel adicionar botoes... um dos botoes criará nosso servidor baseando-se nas informaçoes fornecidas.

    Agora que vocês sabem o que será feito vou explicar a logica e também mostrar como cada rotina trabalha, mas antes disso gostaria apenas de comentar uma vantagem que o C/C++ possui sobre o Delphi, quando programamos alguma coisa em C/C++ é visto tudo o que se passa, ja em delphi tudo é feito via componentes e a parte da programaçao é esqueçida... como muitos dizem "Programar em delphi é clicar e arrastar" sem ofenças aos "delphistas" hehehe.


    Bom... antes de começarmos a ver os procedimentos é necessario saber que vamos precisar de uma ferramenta que vai juntar os 2 em um só, mas veremos isso a fundo mais adiante, na parte pratica, por enquanto vamos entender apenas como funcionará nosso programa.

    Como dito anteriormente será feito um cliente, um servidor e uma ferramenta que unira os 2 ( ja aviso que nao é um binder)...
    Agora vocês devem estar perguntando, como iremos juntar dois arquivos e nao usar um binder???


    Vou deixa-los na curiosidade por enquanto hehehe, enquanto isso irei explicar a funçao do servidor.

    O servidor servirá apenas para receber os dados fornecidos pelo cliente e vai exibi-los na tela, vale lembrar que o servidor também vai ser feito em ambiente grafico (GUI), ou seja vamos ver um pouco essa parte grafica em C, aconselho para quem quer ver esse assunto grafico mais afundo pra olhar os topicos do dark_side, os mesmos sao muito bons....

    Voltando ao nosso programa... agora já sabemos as respectivas funçoes do cliente, do servidor e da ferramenta (obviu ne hehehe).


    Entao voltemos a nossa pergunta... Como iremos juntar dois arquivos e nao usar um binder???

    Usaremos um recurso que é utilizado por quem usa resource files... pra quem nao sabe resource files ao pé da letra significa "Arquivo de Recursos" esses arquivos sao usados quando nos criamos um programa em ambiente gráfico, e se nao me engano só é possivel o uso dos mesmo em windows...

    Mas a questao aqui nao sao os arquivos de recurso e sim algumas funçoes que eles nos fornecem como a DIALOGEX e a RCDATA, existem outras mas pra esse tutorial so essas duas importam.

    A DIALOGEX serve como "corpo" da nossa janela, é nessa funçao que voce fornece suas propriedades, tais como:

    -Caption (O nome da janela)
    -O estilo da janela (Botao maximizar on/off , bordas, etc...)
    -Todos os botoes, labels, bars, checkboxes e etc...


    Eu sei que ainda nao matei a curiosidade de alguns... a pergunta ainda está martelando, mas nao se preocupem, é hora de sanar as duvidas.

    Para juntar nossos arquivos usaremos a funçao RCDATA, a mesma serve pra injetar todo conteudo de um arquivo em outro... AH???

    No caso pra clarear vossas mentes eu exemplificarei o uso do RCDATA.

    Criaremos nosso cliente com arquivos de recursos (resource files), e vamos adicionar no mesmo a funçao RCDATA, a funçao vem vazia, entao cabe a nos "enche-la" com o conteudo do servidor... mas como fazer isso?

    É ai que nossa ferramenta entra em açao, ela será responsavel por essa uniao (ate rimo).

    AHHHHHH que legal... ta mas agora como que o cliente passara as informaçoes pro servidor??

    Vou ser bonzinho agora e nao os deixarei na curiosidade hehehe, é bem simples uma vez que o cliente e o servidor são unidos eles passam a ser um programa só, logo a unica coisa que temos que fazer é copiar o conteudo do RCDATA(no caso o servidor), criar um executavel em branco, e inserir tudo nesse exe... VUALA JA TEMOS UM CLIENTE CRIANDO UM SERVIDOR... a unica coisa que falta agora é mandar as informaçoes pro servidor (nome e idade), isso sera feito da seguinte forma:

    O cliente vai abrir o servidor em modo binario e vai adicionar as informaçoes no final do mesmo, quando o servidor for executado ele buscara por essas informaçoes e as exibira na tela.

    "Nossa meu deus, help, socorro , mas como fazer tudo isso?"

    Calma pessoal essa é so a parte teórica na parte pratica veremos tudo com calma, isso é so para voces entenderem a logistica da coisa.

    Bom a parte teórica termina aqui, so para conclui-la vamos fazer um pequeno resumo do que vai ser feito:

    -Criaremos 3 programas (Cliente/Servidor/Ferramenta de uniao), o cliente e o servidor vai ser feito em ambiente gráfico e a ferramenta em console.
    O servidor será incluido no cliente utilizando-se o recurso RCDATA assim os tornando em um programa só, a seguir o cliente vai fazer uma copia do conteudo do servidor e extrai-la, o proximo passo é inserir as informaçoes no final do servidor.
    O servidor quando executado busca essas informaçoes e as exibe.


    Pra quem nao entendeu , recomendo que leia de novo a parte teorica antes de prosseguir...


    Parte Prática

    Bom aqui daremos inicio a parte pratica, entao nao tem muito o que comentar é mão na massa agora.

    Criando o cliente

    Primeiro passo é baixar o compilador, no caso o DevC++, e um editor de resources no caso o ResHack.

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... (DevC++)
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... (ResHack)

    Vá em C: e crie uma pasta chamada Projeto, dentro dessa pasta crie outras 3 pastas chamadas respectivamentes cliente, servidor e ferramenta.

    Instale o compilador normalmente, após a instalaçao abra o programa e clique em new/Project.

    De um clique emcima de Windows Aplication, o Nome voce poe Cliente ( bem sugestivo) e ao lado marque como C++ project, de OK.

    Vai aparecer uma janela, salve seu programa na pasta C:\projeto\cliente, após isso você ja esta pronto pra começar a programar.


    Antes disso adicione um source file ao projeto... vá em new/source file e yes... vai aparecer uma nova aba untitled1, nesse source adicione o seguinte codigo:


    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Feito isso volte ao main.cpp, apague tudo que está la e adicione o seguinte codigo:

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Vou explicar brevemente os procedimentos feitos... e volto a falar que quem estiver interessado mais a fundo em programaçao em ambiente grafico em C para procurar os topicos do dark_side...

    Antes de começarem as explicaçoes peço que compilem o programa... é muito facil... é so apertar CTRL+F9, vai aparecer uma janela pedindo que voce indique o local que seja salvo... salve na mesma pasta C:\projeto\cliente e o nome voce pode deixar main mesmo... Salve esse arquivo... apos salvar o programa vai pedir que voce salve tambem o untitled1... salve-o na mesma pasta tambem, so que desta vez mude o nome dele para "res.rc" (sem aspas) ou entao dará errado, se tudo ocorrer certo o compilador vai exibir uma mensagem "Done" na tela e pronto o cliente esta feito, porém ainda nao o execute...

    Vamos as explicaçoes:


    Basicamente o programa define todos os botoes, em seguida é declarada todas as variaveis, entao é declarada a funçao CALLBACK responsavel pelos eventos que vao ocorrer, procedida pela funçao WinMain que o proprio nome ja diz "Main= Principal" "Win = Windows" ou seja Funçao principal hehe.

    Depois o programa entra na funçao CALLBACK e começa a esperar por eventos ... (WM_CLOSE,WM_COMMAND), caso ela encontre um evento de comando e esse comando for o botao, no caso o IDC_BTN1 ele vai pegar as informaçoes dos edits e verificar se elas nao estao em brancos... se elas estiverem, ele retorna um erro e fecha, caso contrario continua com seu processo de injeçao de dados...
    E pra finalizar ele injeta no servidor o codigo...

    Agora vem um parte importante... preste atençao no "MAKEINTRESOURCE(104)" o numero em questao é o ID da resource, no caso se ela ainda nao estiver adicionada entao vai ser retornado o seguinte erro:

    "Erro ao carregar resource" .... e ai vai fechar.

    Preste atençao tambem nas marcas , eu uso elas pois é nescessario deixar marcadores pro servidor depois achar essas informaçoes... no caso eu usei "***" e "&&&" , mas poderia ser usado qualquer um.

    Agora que voces ja estao orientados podem executar o cliente... vao ver que realmente o erro vai acontecer.

    Apos a junçao do servidor com o cliente o erro sumirá e o arquivo será criado...


    Bom agora que nosso cliente esta pronto vamos contruir nosso servidor...


    Criando o Servidor



    Abra o DevC++ novamente e vá em new project e repita os processos feitos no cliente.


    Apenas mude o nome do projeto para servidor e salve-o na pasta C:\projeto\servidor

    Crie uma nova source file para o projeto, new/source file/yes , e nessa source add o codigo:

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Agora volte na aba main.cpp e adicione o seguinte codigo:

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...


    O Servidor por sua vez tem a mesma rotina de eventos do cliente, ou seja o mesmo possui uma funçao CALLBACK, WinMain , a diferença é que ao invez de adicionar dados ele apenas ira exibi-los.

    Compile o servidor e o execute(Salve o main.cpp como main mesmo e o untitled como res.rc)... voce vai ver que ele apresentara os seguintes erros:

    "Nome nao achado" e "Idade nao achada"


    Os 2 erros somem depois que o cliente injeta o codigo com as marcas... mas isso veremos mais a frente.

    Vamos construir nossa ferramenta agora... o ultimo passo antes de juntar tudo em um so.

    Criando a Ferramenta

    A ferramenta de junçao vai ser mais facil de ser criada... pois a mesma sera feita em console, entao vamos lá.

    Abra novamente o DevC++, so que dessa vez vá em new/source file... pronto a ferramenta ja pode ser escrita.(Bem mais simples do que criar um novo projeto...)

    Adicione o seguinte codigo:

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Aperte o CTRL+F9 para compilar, salve o source na pasta C:\projeto\ferramenta, com o nome de ferramenta

    Bom, agora nos ja temos os 3 programas, entao é hora de uni-los e fazer essa joça funfar logo hehehe.




    Unindo cliente/servidor


    Chegou a tao esperada hora hein... bom vamos lá.

    Faça uma copia do EXECUTAVEL do cliente... ou seja vá na pasta C:\projeto\cliente e copie o arquivo cliente.exe, apos ter feito isso vá para a pasta C:\projeto\ferramenta e cole o arquivo la... repita o processo com o executavel do servidor... ou seja os 3 executaveis DEVEM estar na mesma pasta para a uniao ocorrer.


    Depois de concluir a 1° etapa, execute a ferramenta.exe , o programa vai pedir primeiramente que seja adicionado o nome do arquivo que vai ser copiado.. digite Servidor.exe ( ou se voce renomeou o arquivo , ponha o respectivo nome dele), é importante que a extençao dele seja colocada tambem... ( nao coloque apenas servidor e sim servidor.exe) e de enter.

    Depois disso o programa vai pedir que voce coloque o nome do programa que vai receber os dados... no caso o cliente.exe... novamente de enter.

    E finalmente vai ser pedido que seja digitado o ID number, digite 104, se for digitado outro valor dará errado, pois no source do cliente ele procura exatamente pelo ID 104 (MAKEINTRESOURCE(104)), pressione enter.


    O programa vai exibir "Dados adicionados com sucesso".

    Para ter certeza que esta tudo ok abra o Reshack que voce baixou e abra o cliente.exe que voce acabou de editar, clique no + em RCDATA e entao em 104, o codigo do servidor deve estar lá.

    Outra maneira mais simples de saber também é vendo o tamanho do cliente apos a uniao...(O tamanho do cliente nao vai ser igual a Cliente+servidor, nao sei porque isso acontece, mas nao pense que deu errado)


    Bom gente agora vamos ao teste final... crie uma nova pasta em C:\projeto chamada "Programa pronto", agora faça uma copia do cliente editado e cole na pasta que voce acabou de criar.

    Execute o cliente, insira seus dados e voce verá que ele "criou" o servidor com as respectivas informaçoes... e dessa vez nao deu as mensagens de erro, se duvidar é so abrir o servidor.exe criado e ver as informaçoes la.



    Finalizando

    Bom pessoal chegamos ao final desse tuto... espero que tenham aprendido a tecnica, qualquer duvida nao pensem 2x em postar.

    Abraços
    Last edited by RafaelVenancio; 18-12-2009, 19:25.
    Mesmo longe, eu estou perto. Guia do Hacker 4ever.

  • Font Size
    #2
    oooaaahhhhhh!! o/

    muito bom...

    ++ um complemento pro meu worm em C.. muito bom cara ja to botando essa pg nos favoritos...

    main()
    {TOPICO EXELENTO + OBRIGADO + MUITO RESPEITO MEU}

    (nem vo bota codigo pq to escrevendo rapido pq vo de carona pro buteco hj..xD
    sigpic

    Comment


    • Font Size
      #3
      Link Offline TEm como Reupar os sources ?

      Comment


      • Font Size
        #4
        Links não estão disponiveis, assim de nada adianta o tutorial....

        Comment


        • Font Size
          #5
          Bem interessante estava a procura disso =)

          Mas os links com os códigos estão off, se puder reupar eu agradeço ^^

          Abraços,

          Att,
          Marcelo Moraes.

          Comment

          X
          Working...
          X