*.exe Quellcode auslesen

Hi
kennt jemand ein programm mit dem den Quellcode einer *.exe auslesen kann
bzw gibt es überhaupt eine möglichkeit das zu tun?

mfg
 
ok
hät ich auch selber drauf kommen können einfach mal zu suchen
weis ich jetzt für nächste mal^^
danke für die schnelle antwort
 
äh kann es sein das ich ein verständnis Dingsbums habe. Wie zum Teufel wilste den Quellcode auslesen ???

Quellcode = Textdatei vom Programmier
Objektcode = Binärdatei vom Compiler
xxx.EXE = Binärdatei vom Linker

Es gibt Programme mit der mann die Strucktur eines Programms aufschlüsseln kann um z.b. zu sehen wo welches Unterprogramm/DLLl an gesprungen wird und welche Variable welchen Wert hat. Aber an den Quellcode kommste nie.

?(
 
Da kann mann mal sehen...!!!

Aber das muss ich mir mal genau ansehen. Mich würde echt mal intressiern was der Compiler aus meinen Programmen macht und wie das aussieht wenn ich das wieder zurück äh ja wie heist des eigentlich "Decompeilen" ?

Ich habe bei manchen compielern so das Gefühl das die mist bauen und umständlichen Code generiernen. Den 1 und der selbe Quwellcode und unterschiedliche längen und geschwindigkeiten im fertigen Programm. Da möchte mann dann doch mal rein schauen. X(
--------------- habs mir angeschaut --------------
Ja aber nur für VB.NET, VC++.NET das ist nicht schwer und mann braucht auch keinen Decompiler weil man den IL-Code eigenlich mit ein bischen Übung direkt lesen kann. OK das Salamander Ding scheint komfortabler zu sein. Aber das was an einem Programm äh isch sage mal von intresse ist geht auch so zu lesen.

Für die Einsteiger alle .NET Sprachen werden in einen Pseudocode compillert das heist ob VB.NET, C# oder C++.NET es kommt ein und die selbe Sprache raus die heist IL-CODE die wird in eine EXE gepackt und zur Laufzeit Interpretiert.
 
Falsch, Es gibt Programme, die Assembler funktionsfähigen High-Level-Code generieren
allerdings hast du keine garantie, dass das auch wirklich der code ist, den der programmierer geschrieben hat. der wahrscheinlichere fall ist sogar, dass die unterschiede sehr groß sind.

Ich habe bei manchen compielern so das Gefühl das die mist bauen und umständlichen Code generiernen.
solang es kein kompiler von anno dazumal ist bzw. nicht gerade richtig schlecht ist, dann kannst du davon ausgehen, dass er in den allermeisten fällen weitaus besseren code generiert, als du es von hand machen könntest. du darfst allerdings nicht vergessen, dass für den kompiler nicht unbedingt die geschwindigkeit der wichtigste aspekt ist. je nach einstellung wird normalerweise auch versucht die code-größe möglichst zu verrringern. dass das meist zu lasten der geschwindigkeit geht, dürfte klar sein. ebenfalls kommen optimierungen häufig nicht in frage, da der kompiler womöglich versucht, den code so allgemein zu halten, dass er auf möglichst vielen verschiedenen prozessoren läuft.
 
lol - is das echt euer ernst?!? gg

also mal zur frage wasn compiler macht

compiler übersetzt in maschinencode

maschinencode = code den dein prozessor versteht

ala Jump, Compare, plaplaplapla

naja nagut es gibt auch compiler die in bytecode übersetzen

bytecode=code den entweder ein interpretor interpretiert oder n JIT-Compiler compiliert

Interpretor=Programm dass bytecode ausführt

JIT-Compiler = Programm dass bytecode zur Laufzeit auf die jeweilige Rechnerarchitektur in maschinencode übersetzt

wenn du n IF schreibst in C
dann wird dass vom compiler umgewandelt je nach compiler in
einen ablauf aus Compares und Condition Jumps usw... (in Assembler)

kaum ein compiler erstellt heutzutage noch maschinencode


z.B.

if( a==b ){
a=1;
}else{
a=2;
}

wird z.B. übersetzt in

IF_1_BEGIN:
CMP a, b
JNE IF_1_ELSE
MOV a,1
JMP IF_1_END
IF_1_ELSE:
MOV a,2
IF_1_END:


also so ungfähr

fallst du über das was du hacken nennst referieren willst dann geb ich da den tipp:
buffer overflow

da gehts drum dass man mit buffer overflows im stack die rücksprungadresse einer funktion überschreiben kann um damit an eine stelle im stack zu springen an die man eigenen maschinencode gschriebn hat. nur is das ganze n bissl schwierig - weil 1.) das programm unsicher geschrieben sein muss
2.) man nen Stack Frame Pointer hat (nicht imma ) < den wüll man net überschreiben - aba er steht zwischen rücksprungadresse und den stackvariablen

3.) man be da X86 architektur keine jumps zu relativen adressen mchn kann
das heisst man muss die komplette adresse des maschinencodes angeben und die weiss man für gewöhnlich net - unter manchen architekturen gehhn relative adresssprünge - da springt man dann einfach n par bytal weita wo man dann seinen maschinencode stehn hat

naja verwenden kann man das um z.B. untam Linux sich root Rechte zu holen

oder um auf nem anderen Rechner einen maschinencode zum ausführen zu bringen

usw. - ich glaub ihr könnts euch denken was man damit olles machn kann

- übrigens auch der Internet Explorer hatte vor längerer Zeit noch diesen Bug dass wenn man ne zulange adresse in die adressleiste eingebn hat man die Rücksprungadresse Überschrieben hat und wenn man gwift war des zu seinem vorteil verwenden konnte
 
Es geht nicht um das finden von Exploids, was leichter geht wenn mann den Quwellcode hat.

Sondern das mann Komplexe Programme nicht einfach wieder Decompilen kann. Also ab einer gewissen größe ist es facktisch unmöglich ein Programm zu decompilen veränderungen vorzumehmen und dann neu zu compilen. es sei den mann hat eine .net Sprache verwendet.

PS: Ich schreibe grade in 8 Bit Assembler und schon da fält es mir schwer meine eigenen Programme wieder "zu verstehen" wenn ich nicht die Quellen habe mit Komentare und so.
 
Hallo,
Sondern das mann Komplexe Programme nicht einfach wieder Decompilen kann. Also ab einer gewissen größe ist es facktisch unmöglich ein Programm zu decompilen veränderungen vorzumehmen und dann neu zu compilen.

Also man Disassembelt denn Quellcode und sofern man Assembler kann, dann kann man daran Veränderungen vornehmen und diese dann Speichern.

Möchte man z.B. einen No-Key-Crack für ein Programm schreiben, so disassembelt man die entsprechene Datei, sucht nach der Stelle wo man den Key eingeben soll.
Falls es der richtige Key ist, springt er zur Stelle xyz.

Aus dem Abschnitt macht man dann: Wenn ein Key eingegeben wurde (egal ob richtig oder falsch), springe zu Stelle xyz.

So kann man dann einfach als Key 123 eingeben und er akzeptiert ihn.

So sind die ganzen Cracks für Progamme entstanden, und die haben sehr wohl recht lange Quelltexte.

Manchmal sucht man sich die Stelle herraus, schaut in welcher Zeile das in der Datei steht.
Danach nimmt man einen Hexeditor, öffnet die Datei, und ändert dann in der Datei z.B. nur 8 Bit (auf Binär ebene) und diese entscheiden ob er zu xyz springt wenn der Key richtig/oder falsch eingeben wurde.

Aber ich _glaube_ das wenn man einen Code disassembelt und ihn dann Verändert => Speichern dann compiliert das Programm den Code nicht neu, sondern verändert nur die paar Bytes im Code.
 
Ich weis wie mann ein Key umgeht. Im übrigen gibt es auch schuzt systeme die check summen über den Programmcode bilden und darauf übe lreagiern.

Nein es geht darum das es ein haufen Programme gibt die in exe Form vorliegen aber die Herstellerfirma ist schon lange pleite oder sonstwie nicht mehr existent.

Ich habe hier z.b ein Kassen Programm das hat mal 20.000DM mit der Hardware gekostet und es gibt die Firma nicht mehr die es hergestellt hat. Kannst du dir vorstellen was es für ein aufwand es war das DM zeichen in Eur umzuwandeln das an vielen stellen im Programm code verteilt war. Die Leute die das Programm nutzen würden vor freude purzelbaume machen wenn sie die Quellen hätten. Weil es einfach nicht möglich ist das System auszutauschen.

Ich würde gerne die eine oder andere Programm anpassung vornehmen ..zb ein paar Zähler auf 0 stellen. Zum Glück ist die Datenbank dahinter DBASE4 und gut zupflegen. Aber alles was ich mache läuft mehr oder weniger auf Programcode Haken raus. Das ist aber nicht das was ich unter Programmiern verstehe.
 
Original von Elderan

Aus dem Abschnitt macht man dann: Wenn ein Key eingegeben wurde (egal ob richtig oder falsch), springe zu Stelle xyz.

So kann man dann einfach als Key 123 eingeben und er akzeptiert ihn.

So sind die ganzen Cracks für Progamme entstanden, und die haben sehr wohl recht lange Quelltexte.


wenn alles so einfach wäre. Das ist gefährliches Halbwissen, was Du da verbreitest.
Newbie Wissen.
Wird zwar ein paar Programmierer geben, die so ihr Prog schützen, denen ist aber nicht zu helfen. Zumindest ein paar extra Checks kann man erwarten.
Die Besseren verwenden den Key sowieso dafür, bestimmte Teile des Progs zu decrypten.
Falsches Pass-> falscher Schlüssle->Crash.
Da kommste mit deinem Patchen auch nicht weiter. Brauchst zwar nur einen richtigen Schlüssel, um trotzdem nen KG zu bauen, aber den muss man erstmal haben.
Aber so leicht wie Du es beschrieben hast wird es bei anständigen Progs nur sehr selten laufen.

SAM104
Ich weis wie mann ein Key umgeht

Das bezweifle ich

SAM104
die check summen über den Programmcode bildent

Na und? Meist ist es sowieso nur ein loliger crc32. Noch wie was von der Mutter aller Selfchecks gehört? CreateFileA?

SAM104
Ich schreibe grade in 8 Bit Assembler

Darf ich fragen warum gerade 8 Bit.
16,32 oder 64 würde mir einleuchten, aber wieso 8?

Habe ich noch nie von gehört. Vielleicht auch, weil ich es nicht brauche,aber die Register hatten bis zum 286er Prozessor eine Größe von 16 bit und ab da dann nur noch 32, bzw heute teilweise 64.
Deswegen wundere ich mich warum du nur auf 8Bit Register zugreifen kannst.


Gruß
 
Ich schreibe in 8 Bit Assembler weil ich auf einem ATMEL RISC Prozessor schreibe. Der kann pro Takt 1 Befehl ab Arbeiten was bei 10Mhz kaum zu schlagen ist und hat eigenen SDRAM/EEPROM/FLashROM.
Das Gerät das ich baue hat 9 von den Dingern und ist ein Verschlüsselungs-System auf RSA basis zur Schlüssel übertragung und dann eine Art Streamverschlüsselung für die Daten. Wobei der Algorythmuss auf der Hardware abgebildet wird. Abgesehen davon kann ich schon 2 Register von den 32 8Bit Registern zu einem 16Bit Regisstern zusammen fassen. Es ist aber fast nie nötig.

SAM104
Ich weis wie mann ein Key umgeht

Das bezweifle ich

schön für dich ...!

Ach ja irgendwann soll das Teil ein USB Anschluss bekommen damit mann seine Daten ausserhalb seines Laptops entschlüsseln kann und der KEY nie den Stick verläst. Die Daten werden dann auf einem Display angezeigt. Faktisch unknackbar und Idioten sicher. Und egal ob Sprachdaten, Bild, Email alles Viren, Trojaner, und Hack sicher.
 
Hallo,
wenn alles so einfach wäre. Das ist gefährliches Halbwissen, was Du da verbreitest.
Newbie Wissen.
Wird zwar ein paar Programmierer geben, die so ihr Prog schützen, denen ist aber nicht zu helfen. Zumindest ein paar extra Checks kann man erwarten.

Das ist mir bekannt dass es dort, vorallem bei kommerziellen Programmen, sehr starke Schutzmechanismen gibt.

Aber sofern man sich keinen Keygen baut, was oft der leichtere Weg ist, muss man in der .exe Datei nur an den entsprechenden Stellen, die entsprechenden Jumps richtig manipulieren.

Das diese sehr viele sein können, die sich über die ganze Datei verteilt, ist eine andere Geschicht. Evt. muss man noch ein "paar" Schutzmechanismen ganz deaktivieren.

Aber es gibt auch Teilweise komzerielle Software, die von größeren Firmen stammen, wo man z.B. nur 9 Jumps verändern musste, die auch noch im Quellcode nahe zusammenliegen.

Aber das man also Newbie nicht einfach sich nen Disasembler nehmen kann, Quellcode disassemblet und dann ruck zuck den entsprechenden Jump findet ist klar.


Aber bisher gab es doch für jedes bekanntes Programm irgend eine Art "crack", der nicht auf einem Keygen basiert.

MFG
 
Zurück
Oben