타사 라이브러리에서 비공개 API 사용을 감지하고 방지하는 방법

StackOverflow https://stackoverflow.com/questions/1863764

  •  16-09-2019
  •  | 
  •  

문제

이제 Apple이 비공개 API 사용을 자동으로 확인하기 위해 일종의 정적 분석을 실행하고 있으므로 Three20 라이브러리로 인해 많은 사람들이 적발되었습니다.나는 다른 타사 라이브러리(코드에서 직접 컴파일)를 사용하고 있으며 Apple에 제출하기 전에 개인 API 사용에 대해 자동으로 감사하여 해당 부분을 제거/다시 작성할 수 있습니다.

내가 달리면 nm 내 응용 프로그램 실행 파일에서 기호 목록을 얻었는데 거기에 사용하지 않는 기호가 표시됩니다.예를 들어 _AudioServicesPlaySystemSound가 표시되는데 XCode에서 "AudioServicesPlaySystemSound"를 검색하면 결과가 없습니다.비공개 API에 대한 호출을 자동으로 구별할 수 있는 방법이 있습니까? 예를 들어 Apple에서는 이름에 밑줄을 사용하여 이름을 지정하는 습관이 있습니다.

하지만:의도적으로 비공개 API에 대한 호출을 포함하면 출력에 표시되지 않습니다. nm, 하지만 실행하면 표시됩니다. strings 바이너리에.이를 바탕으로 제가 생각한 한 가지 아이디어는 모든 비공개 API 호출의 거대한 목록을 거대한 테이블로 컴파일하고 문자열 출력에서 ​​자동으로 검색하는 것이었습니다.저는 아직 그런 일을 하지 않았습니다.

검토 과정을 한 번만 거치도록 자동으로 이러한 항목을 포착하는 방법에 대한 팁이 있는 사람이 있나요?

도움이 되었습니까?

해결책

연결된 실행 파일 대신 개체 파일에서 nm을 실행해 볼 수 있습니다.

nm -g -j *.o  | sort | uniq

개체는 다음 위치에 있어야 합니다. build/<app>.build/*/<app>.build/Objects-normal 하위 디렉토리.

다음 항목에 대한 참조가 표시됩니다. AudioServicesPlaySystemSound 왜냐하면 당신이 호출한 함수 중 하나가 차례로 호출하기 때문입니다. AudioServicesPlaySystemSound.

Objective C 호출은 일반적으로 표시되지 않습니다. nm 덤프, 당신은 사용해야합니다 otool 그에 대한:

otool -ov <object file>

다른 팁

이 개발 도구를 사용하세요. 앱 스캐너..app 파일에서 비공개 API 메소드를 검색합니다.향후 릴리스에서는 비공개 API 인스턴스 변수도 확인할 예정입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top