September 2007 - Posts
In a previous article I have demonstrated how easy it is to decompile and reverse engineer .NET assemblies using Reflector and Reflexil. I've also shown that applying a strong name to your assembly does not protect your code from reverse engineering. So, what else is left?
A technique called obfuscating goes a long way in keeping your source code safe. An obfuscator will mangle your code, without changing the actual result, to make it increasingly harder for someone to decompile your code and actually understand it.
Read more at http://blog.cumps.be/obfuscation-making-reverse-engineering-harder/
Ever heard of the very popular game for the PlayStation 2, called Guitar Hero? Until recently, I only vaguely picked it up here and there, but not being a big PlayStation gamer, I never payed much attention. That is, until today. A friend of mine gave me a link to Frets On Fire, which claims to be the PC variant of Guitar Hero. Seeing it was free, I downloaded it and gave it a try, and I have to admit, it's addictive!
Allow me to give you a small introduction on this game.
Read more at http://blog.cumps.be/party-game-guitar-hero-for-pc/
Today I was made aware by Filip, a colleague of mine, about the importance of columns used in a where clause with a compound index. I decided to investigate this a bit more in detail, with proper profiling and comparisons on a large data set.
Read more at http://blog.cumps.be/efficient-compound-index-usage/
Over the years, plenty has been written about string performance, lots of comparisons between String.Concat and StringBuilder. Today I decided to do some of my own research into the subject and contribute to the knowledge already out there. More specifically, I'll be taking a look at the memory usage for various concatenation methods and compiler optimizations used to generate the IL.
The test scenario I defined consists out of several methods, each returning the same string. The string I created is supposed to resemble a real-life scenario. I identified five different ways of concatenating strings for my test. I will be taking a look at the numbers when calling each method once and inside a very small loop of 50 calls, which is another real-life number in my case.
Read more at http://blog.cumps.be/string-concatenation-vs-memory-allocation/
In my last post I spoke about reverse engineering .NET assemblies upon which Gregory asked how to protect his code against it.
Initially I thought signing an assembly would be the easiest way to prevent this, and my first tests confirmed this. I signed the CrackMe from my previous post and tried modifying it again, unsuccessfully.
But in the end Code Signing your assembly proved to be useless against reverse engineering.
Read more at http://blog.cumps.be/code-signing-as-reverse-engineering-protection/
I've always been a big fan of Reflector, allowing me to have a look in assemblies to learn new things, debug in case of problems and provide usefull information when creating bug reports. Combined with the Reflexil Add-in it's now easy to also modify assemblies yourself.
To demonstrate this, I've created a small CrackMe sample program, which consists out of nothing more then a simple password check. This is how it looks when opened in Reflector, with Reflexil displaying the IL code below it.
Read more at http://blog.cumps.be/reverse-engineering-with-reflector-and-reflexil/
Are you concerned about the confidentiality of your files? Take a look at TrueCrypt, a great tool to create encrypted volumes.
Read more at http://blog.cumps.be/open-source-disk-encryption/