# C r i a n d o u m j o i n e r # by void brain(void) mailme(pl4n3tc4r4v4n@yahoo.com.br) Bom, tava precisando juntar uns dois executaveis esses dias e tava procurando um joiner, que não fosse pago e que fizesse o que eu queria, e que fosse confiável e que não tivesse nada junto nele, entende?... mas o freeware que achei não juntava legal executáveis do DOS... dava um pau... resolvi fazer o meu msm... enfim não ficou perfeito mas me atendeu... e percebi que mta gente adora proferir(oh! falei bonito) a solução: "Ah! usa um joiner...", mas poucos se interessam em saber como funcionam esses programinhas que nos adiantam bastante ;)... Sem contar que curto fazer minhas proprias ferramentas a medida que vou juntando o conhecimento necessário pra isso... acho válido esse tipo de coisa reinventar a roda às vezes é legal... mesmo que ela não saia tão redonda... hahah... Quando achei o meu joiner freeware e juntei os executáveis pra testar... eu realmente fiquei pensando como aquilo era capaz... =P... como é mesmo??? "o fascínio é fascinante e deixa gente ignorante fascinada"... mas é bem simples o conceito... ele simplesmente pega o conceito de um virus de PC, claro sem o seu payload destrutivo, sacana, mal intencionado... err vc entendeu... Faça o seguinte abra um prompt do DOS e digite essas porcarias aqui... >copy calc.exe c:\calc.exe >copy sol.exe c:\sol.exe >cd \ >copy /b calc+sol.exe >calc.exe - O que eu tô fazendo aqui Bom ai em cima eu fiz uma cópia binária, ele pegou o que já tinha no calc.exe (que é a calculadora do windows) e concatenou(juntou) com o que tinha dentro do sol.exe(o paciência)... mas quando vc executou o "calc.exe", na lógica ele teria que executar os dois programas... mas apenas abriu a calculadora... se vc duvida que o conteúdo do "sol.exe" esteja em "calc.exe", edite o sol.exe e o calc.exe e compare seus conteúdos vc verá que o calc.exe contém "mais pra baixo" o que o sol.exe contém nele todo... heheh... Tá bom mas pq qnd executei o "calc.exe" não abriu também o "sol.exe"??? hmmm... é pq uma cópia binária pega tudo que tiver no próximo arquivo da cópia e junta NO FINAL do arquivo "destino"... - Eu disse NO FINAL... Pra quem não sabe um final de arquivo é expresso por dois nulos... "\0\0" pros C Coders de plantão... tudo que vc colocar ali será indiferente pro sistema operacional... claro que vc não vai tentar editar um arquivo dá um ctrl+end e lá no finalzinho escrever uma baboseira... heheh pq isso não fuuciona, tipo digamos que os usuários com seus brinquedinhos não têm acesso ao final final final final do arquivo... entendeu? =\ ... 'Mas o "Word" é tão poderoso.....' hahahaha... duuuh! - Uma experiência pra ilustrar o que euu disse... O c:\calc.exe que vc fez a experiência ali em cima... vms dar uma olhada nele... abre o prompt do DOS, vai pro diretório raiz e visualiza seu conteúdo... traduzindo... >cd \ >type calc.exe Deve ter saído um monte de lixo na tela não???... Tá agora vai no diretório do calc.exe original que deve ser windows ou winnt dependendo da sua versão de BUGS Microsoftianos... no meu é esse... não atualizei meus bugs... ;) >type c:\windows\calc.exe Apareceu o mesmo lixo do outro pode comparar caractere com caractere que eu espero... Zzzzz... Agora vai lá no calc.exe do c:\ >dir calc.exe Viu o tamanho dele??? Agora vejamos o tamanho do c:\windows\calc.exe >dir c:\windows\calc.exe Opá... o que juntamos o sol.exe é maior... enfim pq será??? rs... tai a prova... quer outra? edita o c:\calc.exe >edit c:\calc.exe Veja que existe um monte de dados que o type não mostrou... sabe pq??? pq o type mostra tudo que tem no arquivo até não encontrar os dois nulos... voy la!... - Mas como fazer pra executar os dois.... Olha existem mil maneiras de fazer isso... eu quis a maneira mais prática... sabemos que o primeiro programa que juntamos, sempre será executado não é??? então... que tal criar um programa que "separe" os outros programas e execute-os??? bom foi assim que fiz... Então qnd juntar os dois executáveis(ou mais... 2 de ex.) junte os dois no final do programa "desempacotador"... ãhmmm... assim ele será executado e se encarregará de executar os outros... ;) Imagine que qnd juntarmos o calc.exe + o sol.exe no desempacotador.exe ele ficaria com esse corpo de "dados" (nusss forcei agora)... dados do desempacotador.exe dados do calc.exe dados do sol.exe o aqui é uma espécie de indicação(flag) pro desempacotador que aqueles dados que seguem depois do são referentes a outro arquivo... sacou??? assim ele conseguira gerenciar isso legal... mas não é a única solução... mas não deixa de ser uma s o l u ç ã o . . . - Então botando as coisas em ordem peraai Qnd executasse o desempacotador.exe ele simplesmente editaria a si mesmo e procuraria por essas "quebras" que indicam o final de um arquivo e o inicio de outro e assim criaria arquivos temporários e iria jogando esses dados lá... montando o arquivo em separado qnd chegasse ao final do arquivo ou encontrasse uma "quebra" isso indicaria que ele deveria parar de gravar os dados naquele temporário e pensaria "Opá tá montadinho agora é hora de executar o bagulho"... enfim é isso... se vc já tem experiência em programação eu te aconselho criar o seu próprio... se não sabe mto disponibilizei o código do programa "desempacotador" que prefiro chamar de "chamador"(é menos tosco) o "chamador" que disponibilizei o código é em DOS... um problema que vc vai encontrar é que ao executar o arquivo(já com tudo junto) será aberta uma desagradável telinha do DOS antes de abrir os programas que vc juntou nele... isso pq a telinha do DOS é o desempacotador em serviço(foi idiota isso né? vc já percebeu... putz...)... NO COMMENTS... Tai o <> da parada... /* #CALLER.CPP# by void brain(void) ***************************************************************************** ESTE E UM EXEMPLO SIMPLES DE UM PROGRAMA CHAMADOR... QUE PODERA SER USADO COMO IMAGEM(CABECALHO) PARA UM JOINER... ELE E BEM SIMPLES, PQ CRIA ARQUIVOS TEMPORARIOS POREM NAO OS EXCLUI... NADA QUE NAO POSSA SER CONTORNADO... COM UMA OUTRA IMAGEM DE UM CALLER FEITO PRA RODAR EM WIN32... TIPO EM C++ OU OBJECT PASCAL VC PODE CONTOR- NAR ESSAS LIMITACOES... OUTRA COISA E QUE O ARQUIVO AO SER EXECUTADO ABRIRA UMA VM DO DOS, POIS O PROG E FEITO PRA DOS... MAS ISSO VC CONTORNARIA UTILIZANDO UMA IMAGE PRA WIN32 CASO OS ARQUIVOS EMPACOTADOS NELE SEJAM WIN32... ;) BOM E UM EXEMPLO BEM SIMPLES QUE SE VC ENTENDER AQUI COM CERTEZA VAI TER A BASE PRA CRIAR CALLER's MAIS ELABORADOS... TAI... ESPERO QUE SEJA UTIL CASO ALTERE OU APROVEITE O MEU CODIGO, ADICIONE O TEU NOME E E-MAIL, MAS NAO TIRE O MEU E TAMBEM COLOQUE SUAS ALTERACOES E DOCUMENTE-AS NO PROPRIO CODIGO... fmz???... falow(0); ***************************************************************************** mailme(pl4n3tc4r4v4n@yahoo.com.br); */ #include "stdlib.h" #include "stdio.h" #include "fcntl.h" #include "string.h" #define ENDTOKEN "\n\n" //ESSE O TOKEN ADICIONADO PELO MEU JOINER NO ARQUIVO... /* E BEM SIMPLES O QUE ESSA FUNCAO FAZ: ELA PEGA O CABECALHO DO ARQUIVO(O IMAGE) QUE NADA MAIS E DO QUE ELE MESMO... E DESCARTA... DEPOIS VAI MONTANDO OS TEMPORARIOS 0, 1, 2, ..., N. E OS EXE- CUTA... */ void parseExeFile(char *f){ FILE *exebody, *temp; fpos_t fpos; unsigned char c, ctemp, *tmpname,buff[100]; int tempcounter=0,walker=0,sz=0; tmpname=(char *)malloc(80); memset(tmpname,'\0',sizeof(tmpname)); memset(buff,'\0',sizeof(buff)); strcpy(tmpname,"temp"); strcat(tmpname,itoa(tempcounter,NULL,10)); strcat(tmpname,"\0"); strcat(tmpname,".exe"); exebody=fopen(f,"r"); temp=fopen(tmpname,"w"); /* DESCARTANDO O PRIMEIRO EXECUTAVEL... */ do { c=getc(exebody); if(c=='\n' && walker!=8){ memset(buff,'\0',sizeof(buff)); walker=0; } if(walker<9) buff[walker++]=c; if(strcmpi(buff,ENDTOKEN)==0){ memset(buff,'\0',sizeof(buff)); walker=0; sz++; } /* ISSO AQUI PARECE MEIO LOCO MAS E QUE NO BODY PADRÇO DO EXECUTAVEL DESSE PROGRAMA VC ENCONTRARA 2 ENDTOKEN's QUE CORRESPONDE A ESSE IF E O OUTRO ALI DE BAIXO... O sz SERVE PRA IGNORAR ESSES DOIS POIS ELES SAO PADROES E NAO UM COLOCADO PELO JOINER... */ if(sz==3){ //printf("\nextraido o primeiro arquivo...;)"); QUERIA TER O PRAZER DE VER ISSO APARECER NA TELA... HEHEH... break; } }while(!feof(exebody)); /* MONTANDO OS EXECUTAVEIS... E EXECUTANDO... */ do { c=getc(exebody); if(c=='\n' && walker!=8){ memset(buff,'\0',sizeof(buff)); walker=0; } if(walker<9){ buff[walker++]=c; } else if(strcmpi(buff,ENDTOKEN)==0){ //printf("\nextraido o segundo arquivo... ;)"); QUERIA TER O PRAZER DE VER ISSO APARECER NA TELA... fclose(temp); system(tmpname); tempcounter++; memset(buff,'\0',sizeof(buff)); walker=0; memset(tmpname,'\0',sizeof(tmpname)); strcpy(tmpname,"temp"); strcat(tmpname,itoa(tempcounter,NULL,10)); strcat(tmpname,"\0"); strcat(tmpname,".exe"); temp=fopen(tmpname,"w"); //break; } fwrite(&c,sizeof(c),1,temp); }while(!feof(exebody)); fclose(temp); /* COMO O ULTIMO EXECUTAVEL NAO CONTERA O ENDTOKEN's UMA CHAMADA AO TEMPFILE CORRENTE SE FAZ NECESSARIA POIS SE NAO HOUVESSE O ULTIMO ARQUIVO EMPACOTADO NAO SERIA EXECUTADO... */ system(tmpname); fclose(exebody); free(tmpname); } /*IDEIAS QUE DEIXEI PRA TRAS... ;)*/ /*int getSize(char *f){ FILE *ff; int sz=0; ff=fopen(f,"r"); do { getc(ff); sz++; }while(!feof(ff)); fclose(ff); return(sz); }*/ int main(int argc, char **argv){ //SETO O FMODE PRA QUE POSSA REALIZAR A COPIA DE FORMA BINARIA _fmode=O_BINARY; /* COMO O PROPRIO PROGRAMA E O QUE DEVE SER DESEMPACOTADO O ARGV[0] ME PERMITE ISSO... */ parseExeFile(argv[0]); return(0); } ãhmmm ah! e os arquivos temporários não serão apagados pois vc não pode apagar um arquivo aberto... então... eu matei dois coelhos, acabei com o problema da telinha em DOS e dos temporários esquecidos... fiz um chamador em WIN32 usando C++... e ele fica esperando pra deletar todos os executáveis qnd todos são deletados ele vai embora pra casa... é isso... - Pra qm quiser usar e não sabe programmar ou apenas quer juntar e tá blz... rs! Também tô disponibilizando o programa em si pra vc usar se quiser... (o download tá em http://geocities.yahoo.com.br/pl4n3tc4r4v4n/mylab/glueinst.zip)... ao instalar num diretório vc vai notar que existem arquivos ".img" o que são esses arquivos? São arquivos de imagem que contêm a função desempacotadora que tava falando com vc agora mesmo... tem a "DOS.img", "WIN32.img". Sendo que a "DOS.img" é a versão DOS do chamador o que faz abrir aquela telinha em DOS e não deleta os temporários, pode ser útil de alguma forma... e a "WIN32.img" é a versão Windows que não abre telinha de DOS e que deleta os temporários... - Me ensina a usar logo pow!... Pra juntar dois executáveis ou mais vc deve ir no prompt do DOS na pasta do programa (sim eu quis fazer em linha de comando não ia facilitar tua vida tanto assim... hehehe... linha de comando é mais "elegante" hj em dia arrastar e clicar é idiota demais... certas coisas devem ser um pouco complicadas ou chatas pra terem graça... pra vc poder dizer... "YESSSSS consegui!!"). Vms supor que vc instalou o joiner em "c:\superbonder"... =D >cd "c:\superbonder" (indo pro diretório do prog)[digitou isso??? não acredito...] >glue c:\windows\calc.exe+c:\windows\sol.exe WIN32.img juntei.exe note que glue é o programa que junta... "cola" td... heheh... e os programas separados por "+" são os que vc qr juntar note que a ordem de execução é controlada por essa linha... no caso ele executaria o calc.exe e depois o sol.exe... pd especificar qts quiser mas não vai tentar por 500 p****... fala sério... Note que também devo especificar o arquivo de imagem o tipo de função chamadora que quero usar(lembrando que a DOS.img não deleta os temporários e abre uma tela em DOS e a WIN32 faz o que a DOS image não faz)... e por fim especifico o nome do arquivo resultante é ele que vai ter os executáveis "juntados" hahahahah... podre!... enfim é isso... se tudo der ok ele vai dizendo que juntou "joined", "joined", "joined"... ai gera um arquivo chamado juntei.exe na pasta glue se quisesse gerar em outra pasta era só c:\outrapasta\juntei.exe ;) Se vc corromper os img problema é teu ele vai juntar corrompido e não vai funcionar... hehehe... por isso não fusse nos img's... - Pq criar funções chamadoras??? Pq se vc tiver habilidades em programação vai poder criar a sua própria com suas particularidades, de acordo com o que vc precisa e usar com a minha cola de executáveis... heheh com o "glue.exe"... sacou??? o img e apenas um ".exe" renomeado pra ".img"... putz não tinha sacado isso ainda???! heheh sacanaj... Esse joiner é especifico pra executáveis... mas nda impede vc de criar um image pra que execute outros arquivos... ;) Ah! e vê se não fica sacaneando os outros com essa merda... "What is my name???? ... Revolution is my name!!!!"... PANTERA! sem uma música calma não conseguiria fazer essa porra chata... bluf! E esse texto não quer dar receita de bolo mas apenas clarear algumas coisas(conceitos!!) que mta gente parece que curte deixar turvo pra continuar sendo "a esperta"... heheheh... foda-se esse tipo de gente! se vc for assim FODA-SE VC!!! Se seus dedos ficarem colados nas teclas use acetona! ok?!... e é só... " W e n e v e r c h a n g e ! ! ! ! " Falow(0);