C++ // Kompilierte Executable läuft auf keinem anderen PC

Hallo,

habe heute dieses geniale Forum endeckt :-)
und hab natürlich gleich versucht ein solches Crackme zu programmieren

nur schlussendlich komme ich wieder zum gleichen Problem wie auch bei den anderen Programmen die ich geschrieben habe (habe auch schon mit meinem Lehrer gesprochen, der wusste auch keine Antwort. )

Eine Executable die ich mit Visual Studio 2008 Pro kompiliere dann aus dem Debugordner koppiere und auf einem anderen Rechner starten möchte, funktioniert meistens nicht.
Normalerweise funktioniert sie nur wenn auch VS2008 auf dem anderen Programm installiert ist. (habe das Crackme auf dem PC geschrieben und nun am Notebook getestet und da hats jetzt funktioniert, haben aber auch beide VS2008 installiert).

Was mich wundert, es ist eine Win32-Konsolenanwendung und ich verwende keine .Net 3.5 Features somit müsste es auch auf anderen Rechnern ohne VS2008 funktionieren?

Programmiersprache ist objektorientiertes C++.

habe das Crackme noch im Anhang hinzugefüt falls jemand so nett wäre und es testet ob es bei ihm/ihr läuft.

Bin für alle Tipps dankbar :-)

vielen Dank
mfg
aelo

ps: Falls jemand den Quellcode benötigt, dann poste ich ihn natürlich auch noch.
 
Zuerst mal tust du mir Leid, weil du noch in HTL gehst.
Zweitens wundert es mich nicht, dass deine Lehrer nicht weiterwissen^^. Die meisten HTL-Lehrer wissen grundsätzlich nicht viel, geben aber sauschwierige Tests.

Zum Problem:
Am Quellcode liegts vermutlich nicht. Irgendwas ist in der Projektkonfiguration falsch eingestellt. Kann ich ohne Projektdatei nicht genau sagen was. Oft fehlt auf den Zielrechnern auch die MSVCRT.dll, aber dies ist hier auch nicht der Fall.
 
Ich hab's mal mit wine unter Ubuntu versucht. Funktioniert nicht. Das nützliche für dich daran ist, dass wine den errorlog in der Konsole anzeigt:
extinction@extinction-desktop:~$ wine '/home/extinction/Desktop/crackme_by_aelo.exe'
fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC90.DebugCRT"
err:module:import_dll Library MSVCP90D.dll (which is needed by L"Z:\\home\\extinction\\Desktop\\crackme_by_aelo.exe") not found
err:module:import_dll Library MSVCR90D.dll (which is needed by L"Z:\\home\\extinction\\Desktop\\crackme_by_aelo.exe") not found
err:module:LdrInitializeThunk Main exe initialization for L"Z:\\home\\extinction\\Desktop\\crackme_by_aelo.exe" failed, status c0000135
Scheinbar fehlt die MSVCP90D.dll.
Die MSVCP90D.dll ist eine ziemlich neue Version der C++ runtime libs und so wie ich das mitbekommen habe für debug-Versionen. (darum das 90D.dll)
Versuch doch mal das ganze als release-Version zu compilen oder eine ältere Version der Lib zu benutzen. (also MSVCP80.dll oder sowas)

Edit: Mist, mauralix war schneller. Aber egal ^^
 
vielen Dank an euch beide

die Runtimelibrarys hab ich mir schon fast gedacht, nur hab ich mal so was nachinstalliert und ging trotzdem nicht, somit wars vorallem auch das zweite Problem -> Debug-Mode

habe nun in den Eigenschaften auf Release umgestellt und dann bekomm ich auch einen Release-Ordner mit einer neuen Executable (hab ich im Anhang geuploaded)

der Tipp mit Wine ist übrigens super!

@mauralix:
gehe gerne in die HTL, und wirklich schwer waren die ersten 3 Jahren eigentlich nicht, programmieren sowieso nicht, bin froh wenn man mal ne "etwas" schwerere Aufgabe bekomme und bin mal gespannt was noch so kommen wird.

Und bei den Lehrern ist eben auch ein Problem dass viele schon lange nicht mehr in der Praxis programmiert haben und auch nicht mehr auf dem aktuellen Stand sind. (.NET konnte er mir nicht zeigen :(, und MFC ist doch schon sehr veraltet aber war dennoch interessant)

vielen Dank
mfg
aelo

edit:
Kollege meinte grade dass bei ihm die EXE nicht funktioniert,
naja ich hab ihm gesagt er soll mal .NET-Framework 3.5 installieren dass hat nämlich sicher diese DLL dabei

edit2:
Microsoft Visual C++ 2008 Redistributable Package (x86) <-- das hier sollte denke ich genau das sein was ich brauche
 
Hi,
Ich hab mal dein Crackme gelöst ;)

L8nOpAme

mfg Binäru$
 
und ich dachte es wäre schwer :-(

hier der Quelltext:

Code:
//main.cpp
//Crack-ME das unbesiegbar sein SOLLTE xD



#include <iostream>
using namespace std;

struct cme
{
	int		number;
	cme*	next;
};


class application
{
	private:
		cme*	values;
	public:
				application();
				~application();
		void	run();
		void	load_values();
};



int main()
{
	application	crackme;
	crackme.run();
	return 0;
}



application::application()
{
	values=	new cme;
}
application::~application()
{
	delete	values;
}
void application::run()
{
	load_values();
	cme* aktElement;
	aktElement=values;
	int win=0;
	int swap=0;
	int swap_n[8];
	char eingabe[1000];

while(win==0)
{
	system("cls");
	cout<<"Bitte geben sie DAS 8-stelliges Passwort ein!: ";
	cin.getline(eingabe,999,'\n');


	swap=eingabe[0];
	swap_n[0]=aktElement->next->next->next->next->next->next->next->number;
	if(swap==swap_n[0])
	{	
		swap=eingabe[1];
		swap_n[1]=aktElement->next->next->next->next->next->next->number;
		if(swap==(swap_n[0]+swap_n[1]))
		{
			swap=eingabe[2];
			swap_n[2]=aktElement->next->next->next->next->next->number;
			if(swap==(swap_n[0]+swap_n[1]+swap_n[2]))
			{
				swap=eingabe[3];
				swap_n[3]=aktElement->next->next->next->next->number;
				if(swap==(swap_n[0]+swap_n[1]+swap_n[2]+swap_n[3]))
				{
					swap=eingabe[4];
					swap_n[4]=aktElement->next->next->next->number;
					if(swap==(swap_n[0]+swap_n[1]+swap_n[2]+swap_n[3]+swap_n[4]))
					{
						swap=eingabe[5];
						swap_n[5]=aktElement->next->next->number;
						if(swap==(swap_n[0]+swap_n[1]+swap_n[2]+swap_n[3]+swap_n[4]+swap_n[5]))
						{
							swap=eingabe[6];
							swap_n[6]=aktElement->next->number;
							if(swap==(swap_n[0]+swap_n[1]+swap_n[2]+swap_n[3]+swap_n[4]+swap_n[5]+swap_n[6]))
							{
								swap=eingabe[7];
								swap_n[7]=aktElement->number;
								if(swap==(swap_n[0]+swap_n[1]+swap_n[2]+swap_n[3]+swap_n[4]+swap_n[5]+swap_n[6]+swap_n[7]))
								{
									win=1;
								}
							}
						}
					}
				}
			}
		}
	}
}
eingabe[8]=0;
cout<<"Sie haben das Crackme geloest, das Codewort war: "<<eingabe<<endl<<endl;
system("pause");

}
void application::load_values()
{
	values->number=-8;
	cme* aktElement;
	aktElement=values;

	cme* newElem=new cme;
	newElem->number=44;
	aktElement->next=newElem;
	aktElement=aktElement->next;

	newElem=new cme;
	newElem->number=-47;
	aktElement->next=newElem;
	aktElement=aktElement->next;

	newElem=new cme;
	newElem->number=33;
	aktElement->next=newElem;
	aktElement=aktElement->next;

	newElem=new cme;
	newElem->number=-31;
	aktElement->next=newElem;
	aktElement=aktElement->next;

	newElem=new cme;
	newElem->number=54;
	aktElement->next=newElem;
	aktElement=aktElement->next;

	newElem=new cme;
	newElem->number=-20;
	aktElement->next=newElem;
	aktElement=aktElement->next;

	newElem=new cme;
	newElem->number=76;
	aktElement->next=newElem;
}

wollte zuerst noch eine Verschlüsselung mit Zufallszahl einbauen, aber wusste nicht sicher ob das erlaubt ist :(
 
Hallo,
bei CrackMe's ist grundsätzlich so gut wie alle erlaubt, solange es überhaupt lösbar ist und nichts illegales enthält.

Zu deiner Frage:
1. Ich schätze mal du erstellst Dateien für .Net 3.5. Auch wenn du keine Features aus dem Framework verwendest, musst du glaub ich expliziet angeben, dass du eine Win32 Anwendung und keine .Net Anwendung haben möchtest.
Und nein, es ist kein Schwachsinn (vom Compiler), .Net Anwendungen zu erstellen wenn nix aus dem Framework genutzt wird. Unter .Net kann man als Admin sehr restriktiv angeben, was Programme dürfen und was nicht.



2. Sollte es dennoch nicht gehen, evt. dieses Tipp verfolgen:
Dateien im Debug Ordner sind, wie der Name vermuten lässt, zum Debuggen, evt. fehlt auf den anderen Rechner diese Debug-Routinen? Vesuch mal den Release-Mode.
Auch wird mein ich ein Debug-Manifest erstellt, hilft es, dieses mitzukopieren?

Bin mir aber recht sicher, dass es an 1. liegt.
 
HTL Dornbirn -> Vorarlberg
und nun gehts am Montag in die letzte Woche vom dritten Jahr :D

mit dem .Net-Framework 3.5 hats dann auch beim Kolleg funktioniert (er hat noch VS2005)
und beim Projekt erstellen kann ich zwischen .NET-Framework 2.0, 3.0 und 3.5 wählen.
hab da immer auf Standard gelassen und somit wie erwähnt mit 3.5 erstellt :-(

dann werde ich nächstes mal eben 2.0 wählen, das sollte nun ja wirklich jeder Windows-Nutzer installiert haben. Nur schade unter Linux gibts ja meines wissens erst ein portiertes 1.0?

mfg
aelo
 
Wenn du C/C++ entwickeln willst bist du sicher nicht von .Net abhängig. Ausserdem müsstest du wenn du auch für Linux entwickeln willst, dort neu bauen mit z.B.: gcc,cc oder so. Hat auf jeden Fall nichts mit .Net zu tun.
Im Visual Studio kannst du wenn du C/C++ programmierst auf jeden Fall auch zwischen managed und unmanaged Code unterscheiden. Bzw. zwischen einer Win32-Anwendung oder einer CLR-Anwendung.
 
Hallo,
leider haben nicht alle .Net 2.0, unter Vista wird 3.5 mitgeliefert, aber ich glaub auf XP (mit allen Patchs) ist nur 1.1 installiert, wenn überhaupt, damit würde ich aber nicht mehr entwickeln.

Irgendwo kann man es als Win32 exportieren lassen.
 
Mal back2topic:
Scheinbar ist meine E-mail Adresse die Einzige, die auch für Forengäste einsehbar ist. So habe ich eine E-mail bekommen, in der ein Gast mir die Lösung zum Problem der Lauffähigkeit auf fremden PC's geschildert hat. (Also ohne die neuste .NET Version zu haben)
Man muss unter den Projekt Eigenschaften die runtime library umstellen. :)
Am besten suchst du mal HIER.
(soll keine Werbung sein)
 
Zurück
Oben