No, questo non è possibile. Non in Linux e non in altri ambienti informatici. Non è un limite di Linux, è una limitazione della fisica.
Se esegui il tuo codice sul computer di qualcun altro ... è il loro computer, quindi controllano ciò che viene eseguito su di esso. Se hanno il tuo codice, possono vederlo correre, ispezionarne la memoria, fargli fare cose diverse se lo desiderano. Possono eseguire il codice in una macchina virtuale per facilitare il debug. Puoi provare a scoprirlo, ma qualunque cosa tu faccia, possono ignorare dando al tuo programma le giuste risposte, se sono sufficientemente motivati.
Intel SGX funziona perché quando compro un processore con SGX, non è realmente il mio computer, rimane parzialmente il computer di Intel. Intel mantiene il controllo sul software che viene eseguito nell'enclave SGX. Spedisci il codice crittografato e firmato con una chiave appartenente a Intel; l'enclave SGX decrittografa e verifica il codice con una chiave accessibile solo dall'enclave. L'enclave non mi appartiene, appartiene a Intel, quindi se non vuoi che il tuo codice sia retroingegnerizzato devi fidarti solo di Intel e non di me. Ricevo solo un blob crittografato e non riesco a eseguirlo altrove perché non riesco a decrittografarlo.
È possibile utilizzare SGX per le applicazioni che richiedono I / O. Devi solo dividere la tua applicazione in due parti: la parte fidata che viene eseguita in SGX e la parte dell'interfaccia utente (e backend dello storage) che viene eseguita all'esterno.
Tenere presente che le difese contro il reverse engineering sono molto costose (in termini di costi di debug e di supporto, nonché di tempi di sviluppo e perdita di prestazioni). Il reverse engineering e la modifica di un programma sono costosi; di solito è più economico pagarti per fare la modifica che farlo e mantenerlo internamente.