Obfuscation of the source only makes maintenance expensive and
painful. The resulting machine code is what you need to protect since
that is what will be available to anyone trying to reverse engineer
your logic. This is true whether you encrypt your binary or not. It
only adds one easily bypassed step to reversing your program at the
cost to you of size and speed of your program. Once your protection
program has decrypted your code, it can be inspected and examined in
memory.
The problem with code protection mechanisms, and there are many, is
that most of them are used by and have characteristics of malware.
This often results in your protected legitimate program being detected
and flagged by A-V products as suspicious. This means you will spend
your time explaining and defending your product against false
positives to people who are not qualified to even understand your
explanations. Customers who might otherwise use your product will
become dissatisfied and disparage your product to other users.
A far more worthwhile use of your time is to spend it creating a
desirable and worthwhile product at an appropriate price point that
makes your product more desirable than a knock-off. Part of that
pricing must include your costs of development and maintenance and you
can control that by making them easier and faster. Remember, a product
has a life cycle: introduction, sales growth, peak, decline,
obsolescence. You must plan for this and make the peak as high and as
long in duration as possible, making it hard to use is not part of
this.
Even unprotected, your algorithm has no protection in law, other than
copyright of the expression of it in source code, and most competitors
will develop it independently rather than go to the expense of
reversing your binary. This way they keep their costs of development
and maintenance low since they control and understand their own
development and maintenance and may even discover better logic than
yours in the process.