web-dev-qa-db-ja.com

MobileSubstrateの微調整プログラミングを開始できる場所はありますか?

ここでフォーラムを検索したところ、そのような質問が見つかりました。チュートリアルにリダイレクトされ、CapitainHookを使用してSpringBoardを操作するための基本的な手順が示されました。

まず、通常の%hookのみで実行したいと思います。私が始めることができるヒントはありますか?

29
Matoe

それで、私は(私が)MobileSubstrateプログラミングの初心者から遠く離れていて、この質問が非常に人気があると思ったので、この主題について知っておく必要のあるすべてを簡単にカバーする回答を作成することにしました。

この小さな紹介は、Objective-Cに関する最小限の知識を持っているで、彼が何をしているのかを知っている人を対象としています。

[〜#〜] note [〜#〜]:theosインストールパスを_$THEOS_と呼びます。これは_~/theos_、_/var/theos_、_/usr/theos_...のようになります。

tweaksとしても知られるMobileSubstrate拡張機能を作成する最も一般的な方法は、 Dustin Howett 's theos build suite。詳細は次のとおりです。

テオとは何ですか?

したがって、theosとは何かから始める必要がありますnot

  • オペレーティングシステム
  • ギリシャの神
  • コンパイラ

そしてもちろん、theos しない

  • コーディング方法を教えます。
  • あなたが考えることなく微調整を作成します
  • 建物環境全体をセットアップしたり、iOSSDKをインストールしたりします。

TheosはXcodeを使用せずにiOSソフトウェアを管理、開発、および展開するための開発ツールのクロスプラットフォームスイート、機能:

  • GNU Makeによって駆動される堅牢なビルドシステム。これにより、Makefileは、theosがインストールされていればどこにでも簡単にデプロイできます。

  • [〜#〜] nic [〜#〜]、さまざまな目的ですぐにビルドできる空のプロジェクトを作成するプロジェクトテンプレートシステム。

  • Logos、MobileSubstrate拡張機能の開発を容易にし、最適なコード生成を行うように設計された、組み込みのプリプロセッサベースのディレクティブライブラリ。

  • 自動パッケージ化:Theosは、脱獄シーンで最も人気のあるパッケージ配布手段であるCydiaで配布するDEBパッケージを直接作成できます。

Theosをインストールする方法は?

  • オン[〜#〜] osx [〜#〜]:iOS SDKをインストールし、 これらの手順 に従います。
  • オンiOS:CydiaからBigBoss推奨ツールパッケージをインストールし、_installtheos3_を実行します。
  • Linux:ツールチェーンをインストールする手段を見つけて、 これらの手順 に従います。
  • On Windows:不可能なことは何もありませんが、実際にそうすることができたら、私に知らせてください。 :P

Theosの使い方は?

これは非常に質問であり、あいまいすぎます。 theosは開発ツールのスイート全体であるため、使用方法を尋ねるのは意味がありませんが、より具体的には方法を尋ねるのは意味がありません。 theosを使用してソフトウェアを作成します。

まず第一に、常に Theos Makefile Reference を手元に置いてください。これには、theos Makefileの作成の基本が含まれており、プロジェクトにフレームワークまたはプライベートフレームワークを追加するリンクの問題を解決するが含まれます。

これで、独自のMakefileを最初から作成し、小さなtheosクローン/シンボリックリンクを作成してコーディングを開始できますが、theosを使用するとこの手順が簡単になります。 _nic.pl_を使用できます。

NICを実行して何かを作成する非常に簡単な例を見つけることができます ここ 。これは非常に簡単で、プログラミングのためにすぐにセットアップできます。

さて、ここからトピックに戻り始めます。

Theosで微調整を作成する

まず第一に、しない実行NIC _$THEOS/bin_内の場合NICは、正確にあなたの場所にプロジェクトディレクトリを作成します'から実行すると、_$THEOS/bin_でプロジェクトが作成されるのを回避できます。したがって、適切な場所にプロジェクトディレクトリを作成することで回避できる、単純なエラーが発生します。

_$THEOS/bin/nic.pl_を実行し、_iphone/Tweak_テンプレートを選択します。最後のフィールド_MobileSubstrate bundle filter_を除いて、答える方法をよく知っているかもしれない簡単な情報によってプロンプトが表示されます。

MobileSubstrateの大部分は、hooker(元のメソッド/関数を自分のものに切り替えるライブラリ)だけでなく、loader(フックを取得する部分)でもあるためです。特定のプロセスに挿入される場合)、ローダーがTweakをロードする場所を知るために、この基本情報を提供する必要があります。このフィールドは、このプロジェクトが挿入されるアプリケーションのバンドル識別子にすぎません

_com.Apple.springboard_、デフォルトのオプションは、SpringBoardのバンドル識別子です。アプリケーションは次のとおりです。

  • IOSホーム画面
  • 一般的なアプリケーションのランチャー/ディスプレイ
  • IOSステータスバー
  • いくつかの高レベルの重要なバックグラウンドプロセスのハンドラー

したがって、多くの調整が行われ、動作がアプリの起動のような些細なものから、ホーム画面のUI全体がどのように見えるかのようなものに変更されます。

ロゴを使用した微調整のプログラミング

これで、NICによって生成されたディレクトリには次のものが含まれます。

  • Theos Makefile、コンパイルに関連する情報を変更します
  • パッケージ関連の情報を変更するcontrolファイル
  • _$THEOS_という名前の_theos/_へのシンボリックリンク(またはショートカット)
  • メインコードファイル。デフォルトは_Tweak.xm_です。コンパイル用にMakefileにすでに追加されているので、すぐにコーディングを開始できます。

何をすべきかを知ることについて

これで、SpringBoardのソースコードが配置されておらず、どこからでもフックするメソッドを推測できません。したがって、SpringBoardヘッダーセットが必要です。そのためには、_class-dump-z_という名前のツールを使用し、それをSpringBoardバイナリ(iOSファイルシステム内にあります)で実行して、アプリケーション内のすべてのクラス宣言とそのメソッドを含むヘッダーファイルを取得する必要があります。

それから(メソッド呼び出しを推測してログに記録することが含まれます)、Tweakで必要なものをいじり始めることができます。

もちろん、SpringBoardをフックしていない場合は、UIKitMobileSafariなどの他のバイナリと同じように_class-dump-z_を使用できます。

反転する場合はAppStoreアプリの場合、暗号化されることに注意してください。それらを復号化する必要があり(残念ながら、ハウツーを教えることは許可されていません)、次にそれらに対して_class-dump-z_を実行するだけです。

プライベートヘッダーの取得について

プリファレンスバンドルのようなものには、プライベートフレームワークのヘッダーが必要です。その場合、Preferencesフレームワークのヘッダーが必要です。そうしないと、宣言の欠落エラーが無限に発生します(私が推測できるように)。

それらを取得するには、前の手順で適用したのと同じロジックがあります。この場合、Preferencesバイナリで_class-dump-z_を実行し、INCLUDEPATHにヘッダーをスローします。 INCLUDEPATHは、コンパイラが_#include <stdio.h>_のように含めるヘッダーを探す場所です。はい、_stdio.h_はコンパイラのINCLUDEPATHを構築するディレクトリの1つにあります!

Theos Makefileを使用してコンパイルする場合、_$THEOS/include_はINCLUDEPATHの一部としてカウントされます。つまり、ダンプされたヘッダーをそこにスローして、後で含めることができます。

(クラスダンプされたヘッダーは常に完全であるとは限らないため、ヘッダー関連のコンパイルエラーがいくつか発生する可能性があります。これらのエラーは、_#import_ディレクティブの削除、変更、追加などで簡単に修正できます。いくつかの宣言。)

コードのヒント

  • SpringBoardに対してリンクすることはできないため、SpringBoardのクラスが必要な場合は常に、_%c_で定義されているLogos _objc_getClass_ディレクティブまたは_<objc/runtime.h>_関数を使用して取得する必要があります。例:[%c(SBUIController) sharedInstance][objc_getClass("SBUIController") sharedInstance]
  • SpringBoardでメソッドが何をするのか、何かがどのように機能するのかわからない場合は、[〜#〜] ida [〜#〜]などで分解してみてください。分解にはIDA Demo(<-noob!)を使用します。
  • サンプルコードを見ると、SpringBoardやその他の内部で何かがどのように機能するかを学習および理解するのに驚くほど役立ちます。 GitHubでプロジェクトを見てもらうのに最適なのは、rpetrichchpwnDHowettEvilPenguin、そしてもちろんもっとたくさん。
  • SpringBoardやその他の動作についても知るには(...)、 iPhone Dev Wiki !のクラスの記事をご覧ください。

エピローグ

待って、良い部分はどこですか? _Tweak.xm_でのコーディングについてどこで学ぶことができますか?

さて、元の質問は実際にはMobileSubstrateの微調整プログラミングを開始する方法ですか?。これですべてのセットアップが完了し、できればすべてのヘッダーが配置され、makeと入力して、プロジェクトがtheosで魔法のようにコンパイルされるのを確認できます。

あなたがする必要があるのは、実際にあなたのヘッダーまたはあなたの分解を掘り下げて、引っ掛けたり、呼び出したりすることです!

ロゴリファレンス ロゴの他の機能をフックして使用する方法が正確に含まれています。 devwikiのMobileSubstrateの記事 も素晴らしい読み物です。

幸運を。疑問がある場合は、遠慮なく_irc.saurik.com #theos_ IRCチャネルに参加してください。テオス関連のトピックについて話し合ったり質問したりするのに最適な方法です。私はほとんどそこにいます。 、他の非常に賢い人々と一緒に;)

118
Matoe

DHowettによって作成されたTheosを探しています。Theosでは微調整が可能ですが、必要なものがすべて揃っているわけではありません。 iOSのすべてのヘッダーを取得できるわけではないため、iOSSDKからframeworks/private-frameworksをclass-dump-zする必要があります。ここから始めましょう: http://iphonedevwiki.net/index.php/Theos/Getting_Started 、またはirc.saurik.net #theosに参加してヘルプをご覧ください。また、theosを使用する私のプロジェクトを見ることができます: https://github.com/evilpenguin

2
EvilPenguin

あなたはテオを探しているように聞こえます。 this を見てください、それはあなたが始めるのを助けるはずです。

1
edc1591