1. ホーム
  2. iphone

[解決済み] AppleはどのようにしてあなたがプライベートAPIを使っていることを知るのですか?

2022-09-17 03:38:56

質問

ソースコードのないバイナリファイルをアップル社に提出しました。

手動でソースコードをチェックする以外に、Apple は何が使われたか、どの API を呼び出したかをどうやって知ることができるのですか?

どのように解決するのですか?

私が知っている方法は3つあります。私はAppleのレビューチームで働いているわけではないので、これらは単なる憶測に過ぎません。

1. otool -L

アプリがリンクしているライブラリの一覧が表示されます。IOKitやWebKitなど、明らかに使ってはいけないものが検出されることがあります。

2. nm -u

これは、すべてのリンクされたシンボルをリストアップします。これは

  • UIImageWithName のような文書化されていない C 関数。
  • UIProgressHUD などの Objective-C クラス。
  • 以下のようなIvar UITouch._phase (の原因である可能性があります)。 を拒否しています。 を拒否する原因かもしれません)。

3. Objective-Cのセレクタをリストアップしたり strings

Objective-C のセレクタはバイナリの特別な領域に格納されているため、Apple はそこから内容を抽出し、次のような文書化されていない Objective-C のメソッドを使用しているかどうかを確認することができます。 -[UIDevice setOrientation:] .

セレクタはメッセージングしているクラスから独立しているので を定義している場合でも -setOrientation: を定義していても、拒否される可能性があります。


あなたは エリカ・サドゥンのAPIKit を使って、プライベートAPIによる拒否の可能性(の誤報)を検出することができます。


(これらのチェックを本当に本当に回避したいのであれば、以下のような実行時機能を使用することができます。

  • dlopen, dlsym
  • objc_getClass、sel_registerName、objc_msgSend
  • -valueForKey: ; object_getInstanceVariable, object_getIvar, etc.

で、それらのプライベートなライブラリ、クラス、メソッド、ivarを取得します。)