안녕하십니까.
MS계열 개발만 하다 안드로이드쪽으로 이사온 왕초보 입니다.
본론으로
앱을 만들고 해당 앱을 사용하는 유저(디바이스당으로)마다 인증을 하려 합니다.
앱에서 아이디, 비번을 넣고 하는 방식이 아닌 폰번호로 Db에 들어있는 값으로 비교해서 사용여부를 판단하려 하는데요.
물론 안드로이드<->PHP<->MySQL 로 하고 있습니다.
근데 앱을 빌드하여 apk를 다시 디컴파일 하면 해당 php를 호출하는 관련 값들이(주소 및 데이터) 보이는데요.
질문
1. 디컴파일 해도 php관련 자료들이 보이지 않게 하기위한 방법이 있는지요.
2. php로 요청하여 응답받은 데이터를 안드로이드에서 비교하여 사용여부를 판단하는데
그 판단하는 코드를 디컴파일하여 skip하게 한다면 앱의 사용제한이 무제한으로 되는데
이것을 대체할 만한 방법이 있는지요?
현재까지 구글링으로 엄청찾아서 NDK(JNI), AES256 대칭기법 등 다양한 자료들을 검토해봤지만
NDK(JNI)는 웹연동관련해서 함수가 없는것 같고. 암호화는 한다고 하더라도 비교구문을 넘기게 디컴파일링 하면
그것도 안될것 같아 이렇게 질문을 드립니다.
다른 분들은 앱에대한 디바이스 인증 및 앱 보안을 어떻게 하시는지 조언을 듣고 싶습니다.
감사합니다.
ndk 로 작업할때 웹 연동이 안된다는 말이 이상하네요.
물론 자바로 개발할때보다 손이 많이 가는 건 사실이지만 java 로 되는 부분이 c / c++ 로 안될리가 없지요.
직접 개발하기 귀찮으면 curl 등의 라이브러리를 도입해도 될 문제이구요.
안드로이드가 가지는 취약점 하나입니다.
대안이라면 php자체를숨기지말고 인증 절차 데이터를 암호화 하는 방법을 사용하시는게 좋을듯 하네요.
어짜피 http통신시 GET/POST로 데이터 전송을 할테니,
post로 데이터를 넘기시고, post Data를 암호화 시켜서 보내신뒤, 세션연동을 통해 인증하는 방법이 좋을듯 싶습니다.
인증은 항상 세션으로 처리하신다면, 완전하게 보안되지는 않아도 일정수준은 보완할수 있을겁니다.
디스어셈또는 디버깅까지 막으려고 한다면 세이프가드쪽과 난독화 부분, 암호화 로직등이 추가되어야 될듯하구요.
설계부터 변조에 대비한 로직들이 포함 해야 할겁니다.
php 호출하는 부분, 기타 앱과 관련된 부분의 껍데기만 자바단에 만들어 놓고
php 호출할 때 사용하는 데이터 및 비교 로직들은 JNI에 숨겨 놓고 자바단에 만들어 놓은 함수를 호출하면 되지 않을까요?
즉 JNI에서 모두 처리하려 하지 마시고 필요에 따라 자바단에 중계하는 함수를 만들어 JNI에서 그걸 호출하도록 하면 될 듯 한데요
이것도 완벽하게 막을 수는 없겠지만 해석하는데 좀더 골치 아프긴 하겠지요.