HI
another way for implement secure design ,but never test it myself for this one ..
use a smart card chip that connect to your micro controller (
www.basiccard.com)
encrypt packet bethen your MCU and the card ,elliptic if possible
then on your application code ,hardcode some function into hardcoded address into memory space (no label or else for identify it)
then instead of use "call XYZ_functio" use "JMP" to the absolute address of that function (will return into it bit later you will understand why)
so on you code when need that function ,you send encrypted packet to the card whit that function name on it (or better a number) then card use look-up table and return the good
hard coded address of that function iso decrypt packet on the mcu
and make a JMP to this absolute address ...
since source code and linker not knot were that function was were in memory (no label but hardcoded address)
even if code was disassembled it will take lot of time figure how to patch code for it work without the smart card

, you may even put some function into the smart card
and smart card may cut for keep only bare die and solder it up-side down on the pcb ...
this save place and this add only ~10$ to the design
just need to carefully chose witch function will be hide .need to be critical function
but not called to often since card calling will induce some lag ..
sorry for my bad english was dyslexic and english was not my native language to ..