광고 포함한 무료 앱을 운영하다보면 인터넷 상에 AF (Ad free) 버전이 도는 경험은 해보셨을 것 같습니다.
어떻게 하나 디컴파일해서 봤더니 의외로 간단하더군요..
앱 로직을 건드리는 것이 아니라, 광고SDK에서 아래 로직만 리마킹해 버리더군요.
// a.addView(b); --> 결국 광고 안나옴....ㅋㅋ
AdMob 등 광고사에 의뢰는 해 놓았지만 뾰족한 답을 찾지는 못하는 것 같더라구요..
이 원리라면 해커 한명이 엄청난 양의 AF버전을 양산하고 있는 상황일텐데...
혹시 리패키징 대응하고 계신 분들 계신가요?
ndk 개발로 서드파티 솔류션을 숨기기 어려움..
그냥 동적로딩으로 Reflaction 을 서버에서 내려주는 코드가 필요하지 않을까요?
물론.. 프로가드는 기본으로 해야 하고..
심지어.. 한글로 코딩을 하면 해외애들이 힘겨워 할 수도 있음 ㅋ
자바코드 상에서 signature 체크하는 루틴을 넣어도 그 signature 를 원본의 signature 로 바꿔버리더군요..
제가 쓰는 방법은
1. signature 체크하는 것 자체를 ndk 로 만들고
2. 앱에서 핵심 기능 한두개를 ndk 에 넣습니다.
(핵심 변수값 하나만 ndk 에서 java 로 설정하도록 해도 됨, signature 체크하는 함수 자체를 막아버리면 그 핵심 변수가 잘못된 값으로 설정되서 앱이 이상동작 하겠죠)
이렇게 하면 디컴파일은 막을 수 있지만 구글인증이나 광고제거에 사용되는 건 (럭키패쳐) 막을 수 없습니다.
그건 apk 를 수정하는 게 아니고 dalvik-cache 에 들어가는 class 파일을 수정하거든요
그거 체크하는 것은 /data/app/ 에 설치되는 apk 파일하고
dalvik-cache 에 생성되는 class 파일의 time stamp 등을 비교해서
일정시간 차이나면 변조된 것으로 처리합니다.
이것도 뚫으려면 뚫을 수 있겠지만 뚫는 툴들이 보통 자동으로 하는 거라서
제것은 직접 분석하지 않으면 힘들겠죠..
http://m.ahnlab.com/kr/site/securitycenter/asec/asecView.do?groupCode=VNI001&seq=19187&curPage=1
어려운듯 ㅠㅠ