code

iPhone / iPad 앱 코드 난독 화-가능합니까?

codestyles 2020. 11. 15. 11:19
반응형

iPhone / iPad 앱 코드 난독 화-가능합니까? 그만한 가치가 있습니까?


나는 SO와 구글링에 대해 꽤 많이 연구했지만 Objective-C로 작성된 iPhone / iPad 앱의 코드 난독 화와 관련하여 직접적인 대답을 찾을 수없는 것 같습니다. .

내 질문은 다음과 같습니다.

  1. 그것을 할 방법이 있습니까? 그렇다면 어떻게?
  2. 그만한 가치가 있습니까?
  3. 앱이 제출 될 때 Apple에서 허용하거나 문제가 있습니까?

Objective-C에는 코드 난독 기가없는 것 같습니다. 그러나 잠시 동안 하나가 존재한다고 가정 해 봅시다.

애플은 충돌하지 않는 한 난독 화 된 앱을 거부하지 않을 것입니다. 주요 질문은 : 난독 화의 요점이 무엇입니까? 일반적으로 지식을 보호하기 위해 코드를 난독 화하려고합니다. 예를 들어 프로그램이 복제 방지를 사용하는 경우 잠재적 인 크래커를 어렵게 만들거나 고급 알고리즘을 사용하는 경우 비즈니스 경쟁자가되는 것을 원하지 않습니다. 디 컴파일 할 수 있습니다.

복사 방지는 이미 iOS에서 처리되었습니다. 탈옥을 통해 일반 앱을 복사하고 실행할 수 있지만이를 수행하는 실제 사용자 수는 상당히 적습니다 (적어도 PC 및 Mac과 같은 "일반"컴퓨터보다 훨씬 낮음). 불법 복제가 난독 화해야 할 큰 문제라고 생각하십니까?

보호 할 중요한 지식이 있다면 난독 화가 가치가있을 수 있습니다. 난독 화에는 단점이 있습니다. 난독 화 된 앱을 더 이상 디버깅 할 수 없습니다. 충돌 보고서는 쓸모가 없습니다.

Obfuscating Cocoa 기사를 읽어 볼 수도 있습니다 .

난독 화자가없는 것 같다는 사실로 돌아가서 : 당신이 할 있는 것은이 트릭입니다 : 당신이 다음과 같은 헤더를 가지고 있다고합시다 :

@interface MyClass : NSObject {
}

- (void)myMethod;

다음과 같이 값싼 난독 화를 수행 할 수 있습니다.

#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif

@interface MyClass : NSObject {
}

- (void)myMethod;

이렇게하면 소스에서 의미있는 기호를 계속 사용할 수 있지만 컴파일러는 디버깅을 위해 컴파일하지 않을 때이를 "가비지"로 바꿉니다.


  1. 예, Apple iOS 또는 Contaxiom 코드 보호용 ensureIT 살펴볼 수 있습니다.
  2. 때에 따라 다르지. 보안은 일반적으로 복잡성을 유발하므로 유용성간에 균형을 맞춰야합니다.
  3. Apple은 문제가 없어야하며 (내가 틀렸다면 수정) 개인적으로 코드 난독기를 사용하는 앱이 거의 없습니다.

이전 답변 외에도 다음을 포함하여 어느 정도 난독 화 및 무결성 보호를 제공하는 여러 타사 도구가 있습니다.

  1. Arxan,
  2. 메타포 릭,
  3. 크립 타늄

그들은 기능이 다양하며 다음을 포함합니다.

  1. 제어 흐름 난독 화 (예 : ARM 명령어 흐름은 코드의 원래 목적을 숨기기 위해 중복 명령어로 뒤섞여 있음)
  2. 클래스 및 메서드 이름 변경-Objective-C 런타임이 특정 이름을 찾을 것으로 예상하기 때문에 앱을 쉽게 손상시킬 수 있으므로 사용되는 위치에주의해야하지만 메서드 및 클래스 이름을 의미없는 이름으로 바꿉니다.
  3. 문자열 암호화-앱의 모든 정적 문자열이 암호화되고 정적 분석을 더 어렵게 만들기 위해 사용 직전에 문자열을 해독하는 코드가 삽입됩니다.
  4. 안티 디버그-코드가 삽입되어 일반적인 디버거를 중단합니다 (항상 성공적이지는 않음).
  5. 변조 방지-일반적으로 바이너리 코드가 수정되지 않도록 보호하는 체크섬 네트워크를 구축합니다.
  6. Objective-C 런타임 보호-일반적으로 obj-c 등록 메서드 구현을 확인하여 앱에 있고 '스위 즐'되지 않았는지 확인합니다.

이러한 모든 도구는 매우 비싸고 문제가없는 것은 아니므로 은행 업무 나 DRM이 매우 중요한 경우를 고려하려면 높은 수준의 무결성이 필요한 응용 프로그램이 정말로 필요합니다.

이러한 유형의 앱의 경우 숙련 된 침투 테스터도 필요합니다. 이러한 도구는 종종 사용하는 사람만큼만 우수하고 도구를 완화해야하는 다른 OS 취약성이 있기 때문에 앱이 다른 방식으로 노출되지 않도록합니다. 언급하지 마십시오.


앱의 실행 파일은 이미 Apple에서 암호화되어 있으며 앱 샌드 박스의 실행 코드 세그먼트는 쓸 수 없으므로 런타임 암 코드 수정이 필요한 추가 암호화를 수행 할 수 없습니다. 그리고 Objective C / C 컴파일러의 옵티 마이저 패스는 이미 원본 소스 코드와 매우 다른 것을 생성합니다. 더 많은 C를 사용하고 더 적은 Objective C를 사용하면 메서드 이름이 보이는 일반 텍스트에 포함되지만 C 함수 이름은 포함되지 않으므로 함수 이름이 적게 표시됩니다. 따라서 모든 영업 비밀 유형 코드는 일반 C로 코딩되어야하며 최적화 프로그램이 끝까지 올라 와서 컴파일되어야합니다. 앱 번들에 포함 된 모든 webKit 자바 스크립트 또는 기타 포함 된 VM 코드 (해석 된 코드가 다운로드되지 않는 한)를 난독화할 수 있습니다.


Probably not because Objective-C compiles out to processor instructions rather than being interpreted or compiling to byte code, so decompiling the code will already produce pretty obscure results. Obfuscation is something you usually only needed when you have to distribute the source of your code, like in interpreted languages like JavaScript, in order for it to run even when you want the code to remain secret.

참고URL : https://stackoverflow.com/questions/5556849/iphone-ipad-app-code-obfuscation-is-it-possible-worth-it

반응형