Perhaps it is able to be decompiled but there are other security provisions in place that render the code unusable. Is that possible?Quote:
Originally Posted by Joeman
I agree with theCPUWizard that all code can be decompiled, and it is simply the degree to how easily this can be accomplished. Years ago I worked at Microsoft in the NT Application Compatibility Group. The job of that group at the time was to ensure that non-Microsoft applications worked on the new NT platforms. I worked in this group from right before NT3.51 shipped to just before the release of XP. We ran all sorts of tests on the 3rd party applications (like the Adobe products, Word Perfect Suite, and about 100 or so other top tier applications) just to be sure they behaved properly.
When the team discovered bugs, the developers would step through the application, essentially reverse engineering the code by looking at the assembly and figure out if it was a problem in the OS or a problem in the application. Many times the issue was the application, so they would contact the company that wrote the app (trying to get them to fix the app) and usually end up 'shimming' the app so it would work on the new OS.
The point of this was that these developers didn't have any source code for the applications and yet they were able to easily reverse engineer them.
How was this done? When you think about it, an application needs to interact with the system on some level, so how hard is it to set break points on the api's and see which api's are called, the order in which they are called, and see the parameters passed from the app to the api's? After watching these developers do it, it isn't too hard - and those guys got real good at doing it.
So Cpu is coming from this point of view where a native application can be easily reverse engineered when you know how to do this, it's trivial to reverse engineer a native app (and CPU even has tools to make it easier).
With regard to .Net code, it is pretty simple to run reflector to get the code on an app that hasn't been obvuscated; however if you are concerned with reverse engineering, you are going to obvuscate your code (which is easy to do). If you are really concerned about reverse engineering, you are going to take additional measures to secure your application (along the lines of techniques Quake used).
Just thinking that native code is secure because it's native code isn't enough.
