[Mono-list] Security Q
Tom Larsen
tomar@apricot.com
Wed, 8 Sep 2004 14:01:58 -0700 (PDT)
I've seen this kind of question pop up before: they want the compiled
binary to be obscured. Unfortunately I have yet to see any solution that
obscures the "user" disassembler but allows the "runtime" disassembler to
execute. And often I have to wonder "why bother?" Obscuring code seems
to cause more problems than it solves.
.Net is not natively an "obscure execution platform". I always cringe at
the idea of trying to make a runtime platform something it wasn't designed
to do. There are clever ways of obscuring code using runtime encryption
in C/C++ which can theoretically be applied to .Net IL but its slow and
sooner or later instructions are passed out of the secured/encrypted space
and hits the processor which in general is unsecured. In short, if you
run it on a machine, even virtual ones, you can always intercept the
instruction so putting all of that fancy encryption in the way is somewhat
meaningless.
So let me ask this: why do you think you need to have your .Net
application obscured? After all, the best security patterns are well
known. What strength do you think you will have by hiding how your
application executes?
Security and secure code isn't about hiding stuff. Its about a sound
process and data flow. Concentrate on that instead of trying to make the
runtime do something it was never designed to handle.
Tom Larsen
On Wed, 8 Sep 2004, PFJ wrote:
> Hi,
>
> What command while compiling my source code do I need to pass to mcs so
> that the compiled code is not readable? I know there is a way to reverse
> engineer C# code by looking at the bytecode and want to prevent someone
> from doing this for a small security program I'm writing.
>
> TTFN
>
> Paul
> --
> "If I face my God tomorrow, I can tell Him I am innocent.
> I've never harmed anyone. I have cheated no one.
> I have deceived no one. I have hurt no one.
> Except myself. And that He will forgive me." - Hans Holzel
>