Just to get the wordings correct ...Terry McCracken wrote:If Christophe or any other commercial programer wanted the source code of Rybka 3 they'd disassemble it. It's not that hard.
1) "Disassembling" (as also used by some others in this thread) only refers to converting the binary program into assembler instructions, like with the MSVC(++) command "dumpbin /disasm". What you mean is either "decompiling" or "reverse engineering".
2) You cannot obtain "the source code" of a binary via reverse engineering if the binary comes without a symbol table that usually contains (some of!) the identifiers the original author has chosen, and without further input. Since I only looked at the free R1.0beta exe I can only confirm absence of the symbol table for that version. But you can be 100% sure that the commercial versions have the symtable stripped off, too.
3) So the reverse engineering is an ambiguous activity (i.e. there are many possible results being equivalent since they can be mapped to the same binary) which is in reality not fully automated, even if there might be some assisting tools for it. The reverse engineer has to assign identifiers to functions and (global/static) variables which are anonymous so far. And, what I personally consider to be the hardest job, he also has to deal quite a lot with local variables living either on the stack or in registers, and having no address that could simply be translated into an identifier.
So I propose to be very careful with a statement that describes reverse engineering of a bare executable as being "not that hard".
Just as additional info: the R1.0beta exe is about 2.4MB large (32 bit version). Strelka 2.0 32bit exe has about 180kB IIRC. Although the huge difference probably comes from the fact that Strelka 2.0 does not use some huge table that R1.0beta had used, this is still a lot, so IMO it _is_ hard work.
This remains true even with the help of available open source where you can borrow some function names from.
Just my 2 cents!
Sven