Me and a friend are having a fight i am saying that VB 6 cant be decompiled and he is saying people decompile and steal projects all the time.
VB6 can be decompiled. There are many decompilers out there....
As far as I know, VB6 can't be decompiled back into VB code. Any program can be disassembled.
Someone *could* write a program which converts the assembly to VB though : :P
The last VB i knew that could be decompiled was Vb3 i think since that VB has been more protected and harder to decompile i searched google and different websites and found no proof that decompiles exist
Quote from: Noodlez on April 02, 2004, 07:15 PM
Someone *could* write a program which converts the assembly to VB though : :P
I nominate Noodlez to do it :D
I imagine it can be. If the processor can execute the commands I'm sure someone would be able to do the same, however I've read it is hard to do.
Quote from: Noodlez on April 02, 2004, 07:15 PM
Someone *could* write a program which converts the assembly to VB though : :P
no you can't
But check out NuMega SmartCheck, it can give you a ton of information, almost to the point of decompiling.
In all actuality, a vb6 executable could be decompiled to vb6. There is one but though, that being that you can not retrieve original variable names. I think no one has taken the time to build one, as it would be a large and cumbersome project.
P-code could probably be done rather well, native code is probably more ambiguous.
As far as I know, vb1-4 can be decompiled fully, and vb 5/6/I assume .net can't be. It can, of course, be disassembled or hex-edited, though. If by "Steal" your friend means put their name on it, then yes, that's possible, just by editing the Strings.
As far as I know, vb1-4 can load binary data in the same format it's stored in the exe and then save it as text. vb5-6 can't, they only load text format files. So for vb5-6, you need to parse it from binary->text yourself, making a discompiler much more complex to make.
Quote from: iago on April 07, 2004, 11:43 AM
As far as I know, vb1-4 can be decompiled fully, and vb 5/6/I assume .net can't be. It can, of course, be disassembled or hex-edited, though. If by "Steal" your friend means put their name on it, then yes, that's possible, just by editing the Strings.
VB .NET can most definitely be decompiled; obfuscation tools are available to make it much more difficult (Dotfuscator Professional is great), but I found two quite good decompilers for free. It's a sad reality.
Quote from: Myndfyre on April 07, 2004, 09:33 PM
Quote from: iago on April 07, 2004, 11:43 AM
As far as I know, vb1-4 can be decompiled fully, and vb 5/6/I assume .net can't be. It can, of course, be disassembled or hex-edited, though. If by "Steal" your friend means put their name on it, then yes, that's possible, just by editing the Strings.
VB .NET can most definitely be decompiled; obfuscation tools are available to make it much more difficult (Dotfuscator Professional is great), but I found two quite good decompilers for free. It's a sad reality.
Ah, reminds me of Blizzard, breaks their fixes in new versions :)
Just to make sure we're clear, you mean decompiler != disassembler, right? And how well is it decompiled, are variable names retained?
I actually find it kind of funny that Java comes with a tool to decompile it, javap :)
I dont remember whether or not variable names are preserved (I think they might be), but it's not really as big an issue as you think. Dotfuscator can turn code like this:
Car c = new Car(EngineType.Diesel);
c.FillUp(DollarsLeft);
while(c.GasLeft())
{
c.Go();
}
into:
a a = new a(b.a);
a.a(b);
while(a.a())
{
a.a();
}
by overloading names based on return types as well as function arguments.
Edit: iago, .NET also comes with a disassembler: ildasm.exe. It's not really that suprising considering they're both compiled to byte code.
Sounds like dotfuscator makes code inefficient, and sounds like reversing dotfuscated code just requires making a list of what changes they can do and reverse them. Just look at anywhere you see a lot of overloading and fix that... ;)
Inefficient? Not really...maybe an extra step in compilation but that's it.
It's really no worse than everything being stored in eax, ebx, etc.
Quote from: Adron on April 10, 2004, 05:50 AM
Sounds like dotfuscator makes code inefficient, and sounds like reversing dotfuscated code just requires making a list of what changes they can do and reverse them. Just look at anywhere you see a lot of overloading and fix that... ;)
You could try that, but you still wouldn't have the originial function names. I'm not saying its secure, but for non comercial applications I think it's fine. You just have to be careful not to let it rename things that you rely on the names of; I ran into a problem with this when I accidentally allowed it to rename my CharacterClasses enumeration in a Diablo 2 character editor, when I frequently used the string representation of the enumeration value as a display. "Character class: ΓΏ" doesn't convey information too well.
You have no need for an obfuscator if you write open source code. That's my solution :)
No matter what anyone says, you won't make money :)
Quote from: St0rm.iD on April 10, 2004, 04:38 PM
No matter what anyone says, you won't make money :)
What, off opensource or closedsource? I'm not sure whether you're making fun of opensource or vb or what.
In defense of opensource, it's great for personal projects but I can see how it would be a problem with commercial projects.
Quote from: St0rm.iD on April 10, 2004, 08:58 AM
Inefficient? Not really...maybe an extra step in compilation but that's it.
It obviously changes the program when represented as .net bytecode, adding new classes and more code. Are you saying that all of its changes can be optimized away when generating the machine-specific representation?
Quote from: K on April 10, 2004, 02:17 PM
You could try that, but you still wouldn't have the originial function names. I'm not saying its secure, but for non comercial applications I think it's fine.
Ah, I didn't know .net stored the original function names in its compiled form. I had assumed any non-exported function/variable names were gone already.
I beleive you can ask Microsoft to do it, for a fee.
Wow after searching about a day straight for the reverse engineering and searching through many other boards I have concluded that their some decompilers but they aren't as great as you may think. There are 1 - 2 that are ever remotely decent one called VB RezQ but you must buy it for the full version and this will not show you functions of any sort and its really not what you want unless you truly want help to get your program back.
My Conclusion:
There aren't any REAL VB6 decompilers but there things that will help you if you need to find a properties of one of your controls.
Basically you won't find anything that'll be even close to the source in vb6 so don't waste your time since I have.