2011-10-04 8 views
5

現在、私の会社の開発者が使用する再利用可能なobjCセキュリティライブラリを作成しようとしています。このライブラリでは、iOSデバイスがjailbrokenかどうかを検出するAPIを用意したいと考えています。私はGregHによって巧妙な応答に気付きました。これはiBooksの処理と似ています。あなたがデバイスがjailbrokenであることを知っていれば、実行可能ファイルの無署名バージョンを実行します(iOSはexecve sys呼び出しによってアプリケーションの起動時に動作します)。Unsigned Executableを実行してJailbroken iOSデバイスを検出する

質問:iOSライブラリの実行可能ファイルをパッケージ化して、それをいくつかの関数を通して呼び出すことは可能ですか?もしそうなら、それについてはどうすればいいのでしょうか?あなたの助けのための

おかげで、 KC

答えて

1

最終私がチェックし、サンドボックスのアプリがないでもfork()ことができます。彼らがexecve()に電話できるかどうかはわかりません。彼らがどちらもできない場合は、単にexecve()と呼んでください。

jailbreakingがこれに干渉するかどうかわかりません。脱署名されたアプリを署名のないアプリから実行することはできますが、発信者が署名されている場合は正常に動作します。

ライブラリーに実行可能ファイルを「パッケージ化」することは可能です:static unsigned char const data [] = { ... };を持って、ファイルchmod()に書き込んで実行してみてください。

しかし、この日の終わりには、これはユーザーにとって不利益になる可能性があります。 Jailbrokenの電話は、あなたのアプリが海賊版にされたことを意味しません。あなたが何らかのテストをしたいと思っている脱獄された電話を持っている人(そしてさまざまな脱獄でテストしている人)を知っていなければ、あなたは "それはちょうどクラッシュします!"レビュー。

(それがクラッシュしない場合は、その後、誰かが一緒に来て、アプリをクラックします。それは控えめなこと、それは修正が必要かどうかを決定する前に、「問題」を監視する方が良いでしょう。)

Jailbreaksはあなたよりも頻繁に起こります思う。私は、クラッシュのかなりの割合でそれを見てきたので、MobileSubstrateのチェックを自動クラッシュ・レポート・シンボリック・スクリプトに追加しました。 OTOHの場合、アプリケーションが/アプリケーションにインストールされているクラッシュの割合(クラックされたアプリの伝統的なものでしたが、おそらくそれ以上はありません)はごくわずかです。

+0

'execve()'が機能するかどうかにかかわらず、関数を呼び出すとAppleの "サポートされていないAPI"が検出され、アプリが拒否されます。 – duskwuff

+0

@duskwuff:ヘッダーにある場合は、検出器をトリップしないように十分に文書化されています。私が知る限り、ヘッダーは、自動化されたシステムが、何かが「公開されている」かどうかを判断するために使用されるものです。 –

0

main()関数が単純に整数をプロジェクトに返すプロジェクトから実行可能ファイルを追加することで、IOSアプリケーションで実行可能ファイルをパッケージ化しようとしました。 このファイルは、展開時に電話機にコピーされますが、実行権限なしでコピーされます。 ファイルの所有者が現在のユーザー(モバイル)と同じであるにもかかわらず、ファイルにchmodを実行しようとすると、「操作が許可されていません」というエラーが発生します。

+0

実行ファイルをNSCachesDirectoryにコピーすると、chmodできます。 – richie

関連する問題