1

I was looking for a Desktop Application Programming Language with one of the biggest constraint: - “I need to output as native executable”.

I explored multiple options:

  1. Java is not a very good option for desktop programming, but still you can use it. But Java to Exe is a problem. Only GCJ and Excelsior-Jet provides this.
  2. .Net platform does not support native compilation. Only very few expensive tools are available which can do the job.
  3. Python is not an option for native compilation. Right?
  4. VB6 is the option I am left with.

From the above list, if I am correct, VB6 is the only and probably the best option I have. But VB6 itself has issues like:

  • It is no more under development since
  • There are questions on support of VB6 IDE with Vista

Thus my questions are:

  1. From the list of programming language options, do you want to add any more?
  2. If VB6 is good/best option, looking at its development status, would you suggest using VB6 in this era?
Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
Sandeep Jindal
  • 14,510
  • 18
  • 83
  • 121
  • 2
    Why native executable? Will the EXE-files produced by .NET suffice? – Thorbjørn Ravn Andersen Apr 04 '10 at 01:30
  • Thanks for the answer. Exe produced by .Net can be decompilabled (like Java's class file). I want native executables that one cannot be decompiled. – Sandeep Jindal Apr 04 '10 at 01:37
  • 3
    Sorry to disappoint you, but any 'executable' file can be decompiled by someone with experience fairly easily. You'd be better of looking into obfuscation than choosing your programming language based on your perception of 'difficulty to decompile.' – ine Apr 04 '10 at 01:48
  • Thanks, that’s really disappointing/amazing. Do you mean the executable created from VB or C or VC++ can de decompiled, easily? Agreed that they can be decompiled, but the way we can do with Java Classes i.e. decompile the whole package, change the code and rebuild is quite cumbersome or difficult enough for an intermediate experience person to use it. I tried VB Decompile Lite and it not much appealing. – Sandeep Jindal Apr 04 '10 at 02:22
  • 1
    So this is not as much due to programming language but because you want to sell your programs? Why not just do web applications then? – Thorbjørn Ravn Andersen Apr 04 '10 at 02:26
  • I Just read the link, http://stackoverflow.com/questions/506282/protect-net-code-from-reverse-engineering/506301#506301. and found the reasons. Though this is really hard to believe for the reasons I mentioned above. To answer you question, I need a Desktop Application only. Web-application is not my requirement for many reason. I want native compilation primarily for the 'protection' point of view. In fact I had already coded for multiple hardware checks like MAC address, HDD Serial Number, BIOS number etc. – Sandeep Jindal Apr 04 '10 at 02:32
  • You don't want VB6. Its a dead development environment. – Ira Baxter Apr 06 '10 at 06:45
  • "multiple hardware checks"... What does your program do that warrants such draconian protection? – Thorbjørn Ravn Andersen Jun 14 '10 at 22:12

7 Answers7

5

Delphi (and its underlying Pascal language) is still alive and well, with the 2010 edition recently released; if you have funding (a minimum of $899 for the cheapest edition, I believe). it may be worth your time to download a try a free-for-30-days (or something like that) version.

Alex Martelli
  • 854,459
  • 170
  • 1,222
  • 1,395
  • Thanks! It seems a good option. Though budget is a constraint, but it it really suffice my needs I can go for that. Exploring more on that. In the mean time: Does it generates native exes? Also can you comment in VB6 also? – Sandeep Jindal Apr 04 '10 at 01:45
  • 1
    Delphi can make native exes (which of course like any other exe can be disassembled). VB6, totally abandoned and indeed actively opposed by its maker Microsoft, can hardly be recommended today. – Alex Martelli Apr 04 '10 at 02:04
2

Out of curiosity, what are the driving factors behind the "native-binary-only" constraint?

As others have said, it's essentially impossible to prevent reverse engineering. (I realize the answer I linked to is in the context of .Net, but it applies to all programs.)

Community
  • 1
  • 1
BryCoBat
  • 677
  • 4
  • 10
  • Thanks, that’s really disappointing/amazing. Do you mean the executable created from VB or C or VC++ can de decompiled, easily? Agreed that they can be decompiled, but the way we can do with Java Classes i.e. decompile the whole package, change the code and rebuild is quite cumbersome or difficult enough for an intermediate experience person to use it. I tried VB Decompile Lite and it not much appealing. – Sandeep Jindal Apr 04 '10 at 02:24
  • 1
    First, the obvious: Every native binary can be "decompiled" to assembly. The concept of patching a binary to inject new code or bypass existing code is an old one. This is how DRM and licensing schemes can be bypassed. It requires a deeper knowledge of how things work than usual, but it's not a *rare* skill set, and there are many who view such things as a challenge or puzzle to solve. Hope this is useful info... – BryCoBat Apr 04 '10 at 12:43
  • When people worry about decompiling they're concerned about more than mere disaasembly. It is more of a concern that the code can be decompiled back to something near the original source code. – Bob77 Apr 04 '10 at 14:25
  • Oh, certainly there's a continuum, something like: (Hardware) - Machine Code - Assembly - Obfuscated Source - "Approximated" Source - Original Source - Algorithm/Idea, and the closer a third party can come to the original, the easier it is to duplicate your work. In practice, you have to decide where you want to fall on that contiuum vs. amount of effort you put in to hiding your proprietary stuff. In my opinion, Java and .Net both provide an acceptable tradeoff (obfuscated source) between hiding proprietary info and developer productivity. – BryCoBat Apr 05 '10 at 01:06
1

You added a comment saying it is because .NET and java can be decompiled that you don't want to use them. You could use an obfuscator which makes the output code harder to read.

PeteT
  • 18,754
  • 26
  • 95
  • 132
  • Thanks, but this link http://www.excelsior-usa.com/articles/java-obfuscators.html explains why obfuscation may not the best option. – Sandeep Jindal Apr 04 '10 at 01:56
  • 1
    Sandeep, that article explains complications involved in Java obfuscation. It certainly does *not* say that compiling to native code prevents decompiling. – Matthew Flaschen Apr 04 '10 at 02:09
  • Thanks, that’s really disappointing/amazing. Do you mean the executable created from VB or C or VC++ can de decompiled, easily? Agreed that they can be decompiled, but the way we can do with Java Classes i.e. decompile the whole package, change the code and rebuild is quite cumbersome or difficult enough for an intermediate experience person to use it. I tried VB Decompile Lite and it not much appealing. – Sandeep Jindal Apr 04 '10 at 02:23
  • 1
    The link you provided is from a _vendor_ who wants to sell a native compiler. Hence, obfuscation is NOT in their interest. – Thorbjørn Ravn Andersen Apr 04 '10 at 02:29
  • :) Yes. But the vendor is technically strong and I thought it must be writing correct information without manipulating it. Out of curiosity, do you say that excelsior-jet could not be of much use as the think they claim most (security) is at stake as mentioned in this post. – Sandeep Jindal Apr 04 '10 at 02:37
  • I have no experience with Excelsior, so I cannot answer that. – Thorbjørn Ravn Andersen Jun 14 '10 at 22:04
1

Visual C++ is an option, though unfortunately the free version is a bit crippled from the point of view of building MFC-based applications.

You can also choose to use a different GUI framework than MFC, such as wxWidgets or Qt. With these frameworks a GCC compiler (such as MinGW) can be used. There are several free IDEs that are supposed to work with one or both of those frames works including Qt Creator or Code::Blocks.

I've heard good things about Delphi, but don't know anything else about it.

Michael Burr
  • 333,147
  • 50
  • 533
  • 760
  • Thanks, I looked at wxWidgets. It looked quite interesting. Can I say wxWidgets can be used for Rapid Application Development also? – Sandeep Jindal Apr 04 '10 at 02:15
  • I have essentially no experience with those frameworks (my desktop experience is pretty much entirely in Visual Studio, with little GUI to boot) You might want to have a look at wxWidgets' wxWiki page on RAD tools: http://wiki.wxwidgets.org/Tools#Rapid_Application_Development_.2F_GUI_Builders – Michael Burr Apr 04 '10 at 02:27
0

I was involved in a hunt for a similar language/platform for a client to replace their VB6 application. Although they eventually decided to webify everything and rewrite it all in Flex, they were briefly looking at RealBasic. VB6-esque syntax and it compiles to native binaries.

I can't speak for what it's like for day to day use; the trial looked ok. A bit of the RAD oh-that-didn't-take-long workflow that VB6 had and very little else has got anywhere near. Not unreasonably expensive for the Personal Edition.

tridian
  • 631
  • 1
  • 5
  • 10
0

Check out 'Power Basic' - It compiles 'true' small native EXEs and provides a fast VB like basic environment, and doesn't require a run-time environment. This makes it much harder to disassemble. It isn't VB, but its affordable and powerful.

andora
  • 1,326
  • 1
  • 13
  • 23
-3

VB is an interpreted language not native although I guess there are native compilers. Also it's runtime support is not guaranteed past windows 7. The IDE and runtime have a few issues in windows vista and 7 mainly related to UAC and network drives.

I would suggest delphi or some c variant if it must be native.

PeteT
  • 18,754
  • 26
  • 95
  • 132