Say I have a RESTful web service and a commercial Android app on the front end which is used to interact with it. I may use SSL so that the endpoints are not visible, but someone could still do some reverse engineering to find them.
SSL does not conceal the target IP address, so they don't even need to reverse engineer anything. Everything else can be obtained via Fiddler + MITM certificate.
I could also use SOAP instead, so that the call to the web service is a bit more complicated. But, I still don't know if this gives me any real advantage over RESTful based service.
Well, the more effort you put in, the more effort a hacker will need to put in, I suppose.
That being said, hackers have a lot more free time than you, and there are a lot of them, and only one of them has to post the solution on a bulletin board and it's game over.
So, probably not worth the effort.
I was thinking about hardcoding the key into my client app, so that only my client app could use the service. Also, maybe some code obfuscation may help. But, how much does this really help?
Hackers now have deobfuscation tools at their fingertips, so it doesn't help as much as it used to.
Probably not worth the effort.
Fiddler could be used to decrypt https and see the full request. However, if I use Android app only, this may be solved by hardcoding server certificate in Android client app. And also, there is SOAP WS-Security, but I guess a tool can be made to function in similar way as fidler to circumvent that.
The hacker could reverse engineer all that much faster than you could build it.
So, probably not worth the effort.
You can't stop a hacker from reverse engineering any code that runs on the client. So whatever safeguards you put in, the hacker can imitate them.
Exactly. Don't spend time on this.
Instead, try to design your application so sensitive features are executed on the server, where you can protect it.
Spend the rest of your time improving the features of your app so customers won't want anything else.