
Die is identiek aan de code die je terug krijgt van non-obfuscated code hoor

Zie Gerco hier boven mij

Als je er genoeg tijd en geld in stopt wel, maar heb je al eens naar een Crack gezocht? Om maar eens iets te noemen; zo'n beetje iedere Game, zo'n beetje iedere app en zo'n beetje alle software in het algemeen van de "grote jongens" (en dan heb ik het over Microsoft, Adobe, Autodesk, <insert company name here>) is gekraakt of te kraken. Soms al binnen een dag (denk aan Nero en consorten). Die bedrijven hebben er het geld voor en investeren soms veel in beveiliging (denk aan de toch wel 1 van de betere beveiligingen: Windows XP). En toch weten ze het (soms op wat langere termijn, soms in no-time) te "breken". Wat ik dus bedoelde aan te geven is dat je niet te naïef moet zijn in dit soort dingen. Wat is "goed beveiligd"? Waar ligt de grens? Wat is de eis die je er aan stelt en is het de investering waard?
Dennis schreef op vrijdag 10 juni 2005 @ 11:11:
[...]
Okay. Het is wel zo dat wij gebruik maken van dotfuscator, en die kan aardig wat dingen encrypten. Natuurlijk kan je dan nog steeds alles achterhalen, maar leuker wordt het er niet op voor mensen die dat als doelstelling hebben.

Die lui "live and breathe" machine code. Die worden daar echt niet warm of koud van hoor. Alle cracks zijn OF afgeleid van door machine code te stappen, OF afgeleid van "inside weetjes", OF afgeleid van brakke beveiliging (in de trend van: "gooi de binary in een hex-editor en lees het passwoord

)
Tevens is er, bij mijn weten, helemaal niks "encrypted" aan dotfuscated code. Het woord zegt het al:
Obfuscated. Het is alleen onleesbaar gemaakt door dingen anders te schrijven. Om maar eens iets te noemen: Als je alle variabelen renamed van cusName naar i0O01O01i1l en cusAddress naar i0O01O01l1l krijg je leuke onleesbare code. Zoek de verschillen. En dan met 1000+ variabelen

Maar voor een compiler is het verschil even duidelijk en die compiled het dus gewoon naar dezelfde binary.
Of de functie altijd dezelfde waarde laten teruggeven...
code:
1
2
3
4
5
6
| function IsSerialValid() {
...
...
...
return true;
} |
Maar dan op machine code niveau. De betere beveiligingen verhaspelen dit soort functies een beetje en hebben er waarschijnlijk meer dan 1 (én functies die bijvoorbeeld kijken m.b.v. een hash of de binary is aangepast e.d.)
Zie overigens ook
http://msdn.microsoft.com.../dotfuscator/dotf3e5x.asp
Ja, "strings" e.d. kunnen wel "encrypted" worden, maar daarmee je binary niet...
Goals of Obfuscation
The goal of obfuscation is to create confusion. As confusion builds, the ability of the human mind to comprehend multi-faceted intellectual concepts deteriorates. Note that this precept says nothing about altering the forward (executable) logic – only representing it incomprehensibly. When a well-written obfuscator tool goes to work on readable program instructions, a likely side effect is that the output will not only confuse a human interpreter, it will break a decompiler. While the forward (executable) logic has been preserved, the reverse semantics have been rendered non-deterministic. As a result, any attempt to reverse-engineer the instructions to a programming dialect like C# or VB will likely fail because the translation is ambiguous. Deep obfuscation creates a myriad of decompilation possibilities, some of which might produce incorrect logic if recompiled. The decompiler, as a computing machine, has no way of knowing which of the possibilities could be recompiled with valid semantics. Humans write and employ decompilers to automate decompilation algorithms that are too challenging for the mind to follow. It is safe to say that any obfuscator that confuses a decompiler will pose even more of a deterrence to a less-capable human attempting the same undertaking.
Primitive obfuscators essentially rename identifiers found in the code to something that is unreadable. They may use hashing techniques or arithmetically offset the character set to unreadable or unprintable characters. While superficially effective, it is obvious that these are reversible techniques, and as such, are hardly protective. PreEmptives obfuscation tools go far beyond this primitive renaming approach with additional ingenious ways of creating confusion that make it nearly impossible (and certainly not worth the effort) to reverse-engineer someone elses intellectual property.
Let wel dat ze het hier hebben over
decompilers die over hun nek zouden gaan van dotfuscated code. Maar dan hebben ze het dus duidelijk niet over machine code. Kan ook niet, want dat zou de PC zélf de code niet eens meer kunnen runnen. De logica moet immers behouden blijven, al dan niet anders gerangschikt misschien. Het uiteindelijke model is natuurlijk hetzelfde. Er leiden meer wegen naar Rome.
Bekijk ook
http://www.gotdotnet.com/...e/preemptive/default.aspx eens...
[
Voor 104% gewijzigd door
RobIII op 10-06-2005 11:59
]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij