programing

Apple은 사용자가 개인 API를 사용하고 있는지 어떻게 알 수 있습니까?

batch 2023. 7. 10. 22:11
반응형

Apple은 사용자가 개인 API를 사용하고 있는지 어떻게 알 수 있습니까?

저는 애플에 소스 코드 없이 바이너리 파일을 제출했습니다.

소스 코드를 수동으로 확인하는 것 외에 애플은 사용된 것과 호출한 API를 어떻게 알 수 있습니까?

제가 아는 방법은 3가지가 있습니다.저는 애플 리뷰 팀에서 일하지 않기 때문에, 이것은 단지 추측일 뿐입니다.

1. otool -L

앱이 연결된 모든 라이브러리가 나열됩니다.IOKit 및 WebKit와 같이 사용해서는 안 되는 명확한 것이 이를 통해 탐지될 수 있습니다.

2. nm -u

연결된 모든 기호가 나열됩니다.이를 통해 탐지할 수 있습니다.

  • _UIImageWithName;과 같은 문서화되지 않은 C 함수
  • UI 진행률과 같은 목표-C 클래스HUD
  • 다음과 같은 아이바UITouch._phase(지난 몇 달 동안 Three20 기반 앱이 거부된 원인일 수 있습니다.)

또는 "C" 목록 strings

할 수 Objective-C와 되지 않은 방법을 할 수 있습니다.-[UIDevice setOrientation:].

선택기는 메시지를 보내는 클래스와 독립적이므로 사용자 정의 클래스가 UID 장치와 관련이 없는 것으로 정의하더라도 거부될 가능성이 있습니다.


Erica Sadun의 APIKit을 사용하여 개인 API로 인한 잠재적인 거부를 탐지할 수 있습니다.


(이러한 검사를 정말로 해결하고 싶다면 다음과 같은 런타임 기능을 사용할 수 있습니다.

  • dlopen, dlsym
  • objc_getClass, sel_registerName, objc_msg보내기
  • -valueForKey: 파일, object_get아이바 등

개인 도서관, 수업, 방법, 아이바를 얻는 것.)

터미널에서 다음 한 줄기를 사용하여 Mach-O 프로그램의 선택기를 나열할 수 있습니다.

otool -s __TEXT __objc_methname "$1" |expand -8 | cut -c17- | sed -n '3,$p' | perl -n -e 'print join("\n",split(/\x00/,scalar reverse (reverse unpack("(a4)*",pack("(H8)*",split(/\s/,$_))))))'

어떤 개인 API를 사용하고 싶다고 가정해 보겠습니다. 목표 C를 사용하면 문자열에서 SEL을 구성할 수 있습니다.

   SEL my_sel = NSSelectorFromString([NSString stringWithFormat:\
@"%@%@%@", "se","tOr","ientation:"]);
    [UIDevice performSelector:my_sel ...];

로봇이나 도서관이 어떻게 이것을 잡을 수 있을까요?그들은 런타임에 개인 액세스를 모니터링하는 일부 도구를 사용하여 이것을 잡아야 합니다.이러한 런타임 도구를 구성하더라도 이 호출은 거의 실행되지 않는 일부 경로에 숨겨져 있을 수 있기 때문에 잡기가 어렵습니다.

바이너리가 가져오려는 모든 기호(의심할 여지 없이 기호 테이블에서 쉽게 사용할 수 있는 정보)를 보고 "개인 API 목록"에서 해당 기호가 발견되면 ding할 수 있다고 생각합니다.사실 자동화는 꽤 쉽습니다.

실행 파일은 정확히 블랙박스가 아닙니다.도서관에 전화를 걸면 쉽게 찾을 수 있습니다.이것이 제가 현대 CS 교육에서 어셈블리 언어의 손실을 한탄하는 이유입니다.=] ldd와 같은 도구는 ldd가 어떤 화신으로 mac iPhone dev 키트에 연결되었는지는 기억하지 못하지만 당신이 무엇을 링크했는지 알려줄 것입니다.

otool -L somebinary

기호 조사는 차치하고...

Apple은 지정된 메서드 중 하나에서 입력되었는지 확인하기 위해 호출될 때 각 개인 메서드 스택을 확인하는 SDK 버전을 매우 쉽게 가질 수 있습니다.

정적으로 연결하더라도 최악의 경우 목록에 있는 개인 API에서 코드 샘플을 가져와 바이너리를 검색할 수 있습니다(또한 비교적 쉽게 자동화할 수 있음).

Apple을 알고 있기 때문에, 그들은 포괄적이고 자동화된 시스템을 가지고 있을 것이며, 모든 불확실성은 아마도 부인되거나 수동으로 검토될 것입니다.

결국, 저는 애플을 속이는 것은 아마도 노력할 가치가 없다고 생각합니다.

이 데스크톱 응용 프로그램인 App Scanner는 Mach-O Binary 파일을 분리하여 .app 파일에서 개인 api 사용을 검색할 수 있습니다.할 수 있다면, 애플도 할 수 있습니다!

코드를 검사할 수 있는 리버스 엔지니어링 도구가 많이 있습니다.

  • nm개체 파일의 기호를 나열
  • objdump개체 파일의 정보를 표시합니다.
  • otoolMach-O[정보] 실행 파일의 내용 보기
  • strings이것으로 모든 조건을 얻을 수 있습니다.

목표-C Swift에 대해 이러한 명령을 사용하는 예/표현을 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/2842357/how-does-apple-know-you-are-using-private-api

반응형