아이폰/아이패드 앱 코드 난독화 - 가능한가?그럴 가치가 있나요?
저는 SO와 구글 검색을 모두 통해 꽤 많이 조사했지만, Objective-C로 작성된 iPhone/iPad 앱의 코드 난독화와 관련하여 단도직입적인 답을 찾을 수 없는 것 같습니다.
제 질문은 다음과 같습니다.
- 할 수 있는 방법이 있습니까?만약 그렇다면, 어떻게?
- 그만한 가치가 있나요?
- 애플은 앱을 제출할 때 허용합니까, 아니면 문제가 있습니까?
Objective-C에는 코드 난독화기가 없는 것 같습니다.하지만 잠시 하나가 실제로 존재한다고 가정해 보겠습니다.
애플은 아마도 충돌하지 않는 한 난독화된 앱을 거부하지 않을 것입니다.주요 질문은 무엇이 난독화의 요점인가? 일반적으로 당신은 당신의 지식을 보호하기 위해 코드를 난독화하기를 원하는데, 예를 들어 당신의 프로그램이 잠재적인 크래커를 더 어렵게 만들기를 원하거나 당신이 어떤 고급 알고리즘을 사용하고 있다면 당신은 당신의 비즈니스 경쟁자들이 그것을 분해하기를 원하지 않습니다.
복사 방지는 iOS에서 이미 처리되었습니다.비록 탈옥을 통해 일반 앱을 복사하고 실행할 수 있지만, 이를 수행하는 실제 사용자 수는 상당히 낮습니다(적어도 PC 및 Mac과 같은 "일반" 컴퓨터보다 훨씬 적음).당신은 해적 행위가 당신이 혼란스럽게 할 정도로 큰 문제가 될 것으로 예상합니까?
보호하기 위한 중요한 지식이 있다면 난독화는 가치가 있을 수 있습니다.난독화에는 단점이 있습니다. 난독화된 앱을 더 이상 디버그할 수 없습니다.충돌 보고서는 쓸모가 없을 것입니다.
난독화기가 없는 것처럼 보이는 사실로 되돌아갑니다.당신이 할 수 있는 것은 다음과 같은 속임수입니다. 예를 들어 다음과 같은 헤더가 있다고 가정해 보십시오.
@interface MyClass : NSObject {
}
- (void)myMethod;
다음과 같은 저렴한 난독화를 수행할 수 있습니다.
#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif
@interface MyClass : NSObject {
}
- (void)myMethod;
이렇게 하면 소스에 의미 있는 기호를 사용할 수 있지만 컴파일러는 디버깅을 위해 컴파일하지 않을 때 "가비지"로 변환합니다.
- 예, 확인을 참조할 수 있습니다.Apple iOS 또는 Contaxiom 코드 보호를 위한 IT
- 사정에 따라 다르겠지.보안은 일반적으로 복잡성을 초래하므로 사용성 간에 균형을 유지해야 합니다.
- 애플은 문제가 없을 것이고(틀리면 수정), 저는 개인적으로 코드 난독화기를 사용하는 앱이 거의 없습니다.
이전 답변에 이어 다음을 포함하여 어느 정도의 난독화 및 무결성 보호를 제공하는 여러 타사 도구가 있습니다.
- 아샨,
- 메타포릭,
- 크립타늄
다음과 같은 다양한 기능을 제공합니다.
- 흐름 난독화 등을 제어합니다.ARM 명령어 흐름은 코드의 원래 목적을 숨기기 위해 중복된 명령어로 엉망이 됩니다.
- 클래스 및 메서드 이름 바꾸기 - Objective-C 런타임에서 특정 이름을 찾을 것으로 예상되므로 앱을 쉽게 깰 수 있으므로 사용 시 주의해야 하지만 메서드 및 클래스 이름을 의미 없는 이름으로 변경합니다.
- 문자열 암호화 - 앱의 모든 정적 문자열을 암호화하고 코드를 삽입하여 사용 직전 문자열을 해독하여 정적 분석을 어렵게 합니다.
- 안티디버그 - 코드가 삽입되어 일반적인 디버거를 해제합니다(항상 성공적인 것은 아님).
- Anti-tamper - 일반적으로 이진 코드를 수정으로부터 보호하는 체크섬 네트워크를 구축합니다.
- Objective-C 런타임 보호 - 일반적으로 객체에 등록된 메서드 구현을 확인하여 해당 메서드가 앱에 있고 '스위칭'되지 않았는지 확인합니다.
이러한 모든 도구는 매우 비싸고 문제가 없는 것은 아니므로 은행 업무나 DRM이 매우 중요한 곳에서 고려하기 위해 높은 수준의 무결성이 필요한 애플리케이션이 필요합니다.
이러한 유형의 앱에는 숙련된 침투 테스터가 필요합니다. 이러한 도구는 종종 사용자가 사용하는 것만큼 우수하며 툴이 해결하지 못하는 다른 OS 취약성도 있기 때문입니다.
앱의 실행 파일은 Apple에서 이미 암호화되어 있으며 앱 샌드박스의 실행 코드 세그먼트는 쓰기가 불가능하므로 런타임 암 코드 수정이 필요한 추가 암호화를 수행할 수 없습니다.그리고 Objective C/C 컴파일러의 옵티마이저 패스는 이미 원래 소스 코드와 매우 다른 것을 만듭니다.더 많은 C와 더 적은 목표 C를 사용하면 메서드 이름이 표시되는 일반 텍스트에 포함되지만 C 함수 이름은 포함되지 않기 때문에 함수 이름이 더 적게 표시됩니다.따라서 모든 영업 비밀 유형 코드는 아마도 일반 C로 코딩되어야 하며, 옵티마이저를 위로 돌려 컴파일해야 합니다.앱 번들에 포함된 webKit Javascript 또는 다른 포함된 VM 코드를 난독화할 수 있습니다(해석된 코드가 다운로드되지 않는 한).
아마도 Objective-C가 해석되거나 바이트 코드로 컴파일되는 것이 아니라 프로세서 명령어로 컴파일되기 때문이 아닐 것입니다. 따라서 코드를 디컴파일하면 이미 상당히 모호한 결과가 나올 것입니다.난독화는 코드가 비밀로 유지되기를 원할 때에도 실행되기 위해 자바스크립트와 같은 해석된 언어로 코드의 소스를 배포해야 할 때만 필요한 것입니다.
언급URL : https://stackoverflow.com/questions/5556849/iphone-ipad-app-code-obfuscation-is-it-possible-worth-it
'programing' 카테고리의 다른 글
상위 컨테이너를 기준으로 요소의 위치/오프셋을 가져오시겠습니까? (0) | 2023.07.29 |
---|---|
Google App Engine Flexible env 가격 책정, $500 교육 (0) | 2023.07.29 |
Javascript - 개체에서 정의되지 않은 필드 제거 (0) | 2023.07.29 |
HTML 테이블에서 열 숨기기/표시 (0) | 2023.07.24 |
PHP로 \r\n 바꾸기 (0) | 2023.07.24 |