리버스 엔지니어링으로부터 Android 앱을 보호하는 것이 정말 불가능합니까?
아시다시피 Android 앱은 Java로 작성되었습니다. 자바에 상관없이 당신이 무엇 , 스택 오버플로 질문으로, 디 컴파일 또는 리버스 엔지니어링에서 컴파일 된 코드를 보호하기 위해 불가능하다 디 컴파일을 방지하기 위해 자바 클래스를 컴파일 잠금하는 방법? 제안.
리버스 엔지니어링으로부터 알고리즘 영업 비밀이 포함 된 앱을 보호하려면 어떻게해야할까요?
"어떻게"란 소프트웨어 기술뿐만 아니라 다른 창의적인 접근 방식 도 의미 합니다.
나를위한 첫 번째 중지 는 Android의 Dalvik VM (Dex를 통해)을 대상으로하는 바이트 코드로 작동하는 것으로 알려진 ProGuard로 코드를 최적화하고 난독 화하는 것입니다 . 이것은 정말 훌륭한 도구이며 코드의 풋 프린트를 줄이면서 코드를 '반전'하는 어려움을 증가시킬 수 있습니다 (어떤 경우에는 극적으로 : 최근의 애플릿이 약 600KB에서 약 50KB로 감소했습니다).
다른 사람들이 말했듯이 알고리즘의 구현이 클라이언트에 배포되는 동안에는 알고리즘 세부 사항에 대한 100 % 보안을 얻을 수 없습니다. 이를 위해서는 서버에만 코드를 보관해야합니다. 클라이언트 코드에 대해 거의 100 % 보안을 시도하는 것은 사실상 DRM 에 해당하며 네트워크 중단시 클라이언트 코드를 취약하게 만들고 일반적으로 합법적 인 사용자를 좌절시킬 수 있습니다.
Android 개발자 블로그에는 '변조 방지'Android 앱에 관한 몇 가지 유용한 기사 가 있습니다 (전체 접근 방식의 일부로 ProGuard 사용을 권장 함).
'창의적인'접근 방식과 관련하여 일부 개발자는 디버거 감지 기술 을 사용하여 런타임 분석을 방지하고이를 바이너리 코드 부분의 암호화와 결합합니다 (정적 분석을 방지하기 위해).하지만 솔직히 충분히 결정된 공격자는이를 우회 할 수 있습니다 . Windows KB 문서 Games : Error Message : A Debugger Has Been Detected : Unload the Debugger and Try Again에 설명 된대로 합법적 인 사용자 불만을 유발할 수 있습니다 . 내 여자 친구의 '드라이브 배우기'DVD 소프트웨어는 이런 이유로 VirtualBox 에서 실행되지 않지만 당연히 Linux를 비난합니다!
난독 화 된 코드에 대한 OpenRCE 및 Wikipedia의 기사는 이에 대해 더 자세히 살펴보고 싶다면 좋은 출발점이 될 수 있습니다. 그러나 이러한 기술을 과도하게 사용하면 리버스 엔지니어링에 의한 영업 비밀 손실보다 사용자를 실망시킬 수 있습니다. 마찬가지로 안톤 S는 말한다 기술보다는 비즈니스 모델을 조정에 어쩌면 가장 '창조적 인'접근 거짓말.
2010 년 12 월 6 일 최신 Android SDK 업데이트 (Android 2.3 Gingerbread 릴리스와 함께 제공) :
통합 ProGuard 지원 : ProGuard는 이제 SDK 도구와 함께 패키지화됩니다. 개발자는 이제 릴리스 빌드의 통합 부분으로 코드를 난독화할 수 있습니다.
가능한 경우 : 잘 보호 된 서버에 대한 원격 프로 시저 호출 (서버에 보호하려는 코드가 있음).
클라이언트 측에서 실행되는 비밀 위에 비즈니스 모델을 구축하지 말고 귀찮게하는 것이 너무 저렴합니다. 즉, 비밀을 공유하지 마십시오.
리버스 엔지니어링으로부터 클라이언트 측 코드를 보호하는 것은 불가능합니다. 코드를 난독 화하는 다소 효율적인 방법을 사용할 수 있습니다. 그리고 최적화 된 x86 어셈블러는 꽤 좋은 난독 화입니다.
따라서 알고리즘 비밀이 있으면 서버 측에 두십시오.
디 컴파일을 방지하기 위해 컴파일 된 Java 클래스를 잠그는 방법
당신은 할 수 없습니다. 모든 계획은 충분한 기술, 시간 및 동기를 가진 사람에 의해 무너질 수 있습니다.
(부수적으로 이것은 바이너리로 컴파일 된 소프트웨어에도 적용됩니다. 유일한 차이점은 디 컴파일에 관련된 노력의 양입니다.)
내 질문은 알고리즘 영업 비밀이 포함 된 앱을 리버스 엔지니어링으로부터 보호하는 방법입니다.
단순히 사용자의 휴대폰에 앱을 설치하지 마십시오. 또는 (더 유용하게) 원격 (적절하게 보안 된) 서버에서 영업 비밀이 포함 된 코드를 실행합니다.
애플리케이션을 크래킹하는 사람이 항상 있기 때문에 애플리케이션을 완전히 보호 할 수는 없습니다.
그러나 응용 프로그램을 무료로 만들거나 최소한 더럽혀 서 사람들이 신경 쓰지 않도록 이러한 작업을 방해 할 수 있습니다.
또는 백엔드 서버에 모든 비밀 비즈니스 로직을 유지하는 것처럼 Android 애플리케이션을 "멍청한"상태로 유지하고 노출 된 서비스 형식을 사용하여 앱에 데이터를 표시하도록합니다.
무엇을하든 적어도 디 컴파일을 매우 어렵게 만들 수 있습니다. 그러나 프로그램에서 무언가가 실행 / 계산되면 알고리즘에 대한 정보가 있어야하며 항상 찾을 수있는 가능성이 있습니다. 그것을 얻는 방법 (당신은 상대방 측에 대한 충분한 기술과 동기를 가정). 항상.
서버에 알고리즘이 있고 스마트 폰 앱에서 해당 서비스를 호출합니다. 가해자는 내 스마트 폰 앱을 리버스 엔지니어링하여 내 서버에서 내 프로토콜을 볼 수 있습니다. 내 알고리즘을 보호 할 수 있지만 내 서비스의 무단 사용으로부터 보호 할 수는 없습니다. 나는 해결책없이이 현실을 받아 들여야한다. 나는 내 서비스로 돈을 버는 한 내 서비스를 빨아들이는 다른 사람들의 잠재력을 가지고 살아야한다는 것에 만족해야합니다.
창의적인 접근 방식을 원합니다. 여기에 하나가 있습니다.
오늘 디 컴파일되지 않은 휴대폰의 주요 프로그램은 무엇입니까? 라디오 펌웨어. 왜? 그것은 전화기의 ARM 칩셋에서 실행되지 않고 대신 스마트 폰에 점점 더 많이 존재 하는 별도의 Qualcomm Hexagon 에서 실행됩니다. x86도 아니고 ARM도 아니고 Qualcomm 독점 아키텍처와 명령어를 사용합니다.
Java 디 컴파일은 쉽습니다.
ARM 디 컴파일이 더 어렵습니다 (Hex-Rays Decompiler 라이선스는 1129 달러부터 시작합니다 ... 그리고 바이너리에서 Thumb 코드와 표준 ARM 코드를 혼합하는 것은 고통 스럽습니다) => Android NDK로 컴파일을 시도 할 수 있습니다.
현재 Hexagon 디 컴파일러가 없습니다! 그리고 QDSP 사양은 공개적으로 사용할 수 없으며 불법 복제 버전도 있습니다.
질문은 독립 소프트웨어 공급 업체가 대량 판매용 휴대폰에 포함 된 Hexagon 펌웨어를 사용할 수 있다는 것입니다. Qualcomm이 취하는 방향 인 것 같습니다. 웹 사이트와 SnapDragon 제품을 확인하세요.
NB : 저는 Pro-Qualcomm도 아니고 pro-closed-source도 아닙니다. 그러나이 스레드는 이러한 종류의 솔루션에 호소합니다.
리버스 엔지니어링에서 안드로이드 코드를 100 % 보호 할 수는 없습니다. 일부 키를 보호하려면 웹 서비스를 호출하는 동안 암호화 된 키를 제공하는 통합 서버의 도움을 받아 해당 키를 코드에 사용할 수 있습니다.
'developer tip' 카테고리의 다른 글
가비지 수집기가 Dispose ()를 호출합니까? (0) | 2020.12.09 |
---|---|
런타임 중에 Rails 구성 값에 어떻게 액세스하나요? (0) | 2020.12.08 |
라텍스 매우 콤팩트 항목 화 (0) | 2020.12.08 |
vba 문자열이 숫자 인 경우 문자열을 int로 변환 (0) | 2020.12.08 |
CSS에서 '줌'은 무엇을합니까? (0) | 2020.12.08 |