The answer to the above question is a decompiler would be used for that application. Decompilers use executable file as input. They then create a source code that can be recompiled and put back together fairly easily. Due to a decompilers ability to break down original code, that original code can then be used to either duplicate the program, or re-engineer a program that would work in concert with the original program.