In other words, the hex code is meaningless unless you know what the machine language is. C/C++ is portable (with some limitations) so you can compile a C/C++ program to run on an Arduino, PC, or Mac, but the machine language hex code only runs on the machine it's intended for.
(Or, they steal the source code or simply copy the hex code.) Realistically, when people do 'reverse engineering', they usually figure-out what the code is doing and they start-over and write a new program that does he same thing.