Optimierung: Je höher desto besser.
Die HelloWorld-Sache: Ist das jetzt als String gemeint, zB.
oder als Funktionsname in einer DLL
doer was Anderes im Code, wie
Code:
void meinefunktion() { int helloworld; }
?
Möglichkeit 3: Das sollte definitv nicht passieren. Wenns das ist,
bitte sagen, dann kann das Thema weiterverfolgt werden.
Möglichkeit 2: Das ist normal, und nötig damit die Funktionen aus der DLL aufgerufen werden können. Wenn man solche Namen verstecken will hat man einen der wenigen Fälle, wo ein (klassischer) Obfuskator in C++ nützlich ist: Ein Programm, das vor Kompilieren den Code bearbeitet (bitte nur auf eine Kopie des Code anwenden), und Namen etc. durcheinanderbringt. Statt helloworld bekommt man dann func00001 oder mj98djk3 oder irgendsowas. (Besser nicht am Originalcode weil sonst alles unverständlich wird. Und den selben Effekt kann man natürlich auch händisch erreichen, dauert nur länger.)
Möglichkeit 1: Das ist auch normal, ja. Warum es im geklonten Programm nicht ist weiß ich zwar auch nicht, dürfte für das Sicherheitsproblem ziemlich unwichtig sein. Wenn man seine eigenen Strings nicht geich direkt lesbar machen will kann man im Programm einen "Keystring" haben, mit irgendeinem Unsinn drin, den zur Verschlüsselung der eigentlichen Texte verwenden, und zur Laufzeit mit einer Funktion wieder entschlüssen bevor man den Stringinhalt verwendet. Methoden zB. XORen jedes Bytes oder auch AES (besser) oder ...
Natürlich ist auch das mit genug Zeit umkehrbar, der Angreifer muss nur rausfinden welche Bytes der Key sind, welche Bytes der Text sind (weil nach zB. AES alles unlesbarer Müll ist), und welche Methode eingesetzt wurde. Um die Keysuche ohne vollständige Codezerlegung noch zu erschweren, absichtlich "nicht" zufällige schwer zu erratende Bytes nehmen, sondern etwas, das zB. wie ein Teil vom ausführbaren Code ausschaut. Zufällige schwer zu erratende Bytes, also Daten mit hoher Entropie, sind in Exes/DLLs nämlich kaum vorhanden, der Key würde sich vom Rest deutlich abheben.
(Teilweise können Obfuskatoren auch bei der Stringsache hier helfen)
Für die generelle Erschwerung der Zerlegung:
Nach den Compileroptimierungen gibt es schon noch weitere Möglichkeiten, die händisch zu machen ist aber als Einzelprogrammierer ein unverhältnismäßiger Aufwand. Bzw., es kommt drauf an wie wichtig einem der Schutz ist. VMs, selbstmodifizierende Programme, usw. Kommerzielle Produkte, die einem das erleichtern, existieren. (Themida...)