まえがき
AppleがiPhone用のかなり完全なSDKを提供しているという事実にもかかわらず、文書化された機能を超えるアプリケーションが必要になる場合があります。 そのようなアプリケーションの例は、ジェイルブレイクされたiPhoneのVNCサーバーであるVeencyです。
Veencyをゼロからコンパイルした経験を共有したいと思います。 この投稿が参考になることを願っています。
問題
ジェイルブレイクしたiPhoneのVNCサーバーコードに小さな変更を加え、デバイスに再コンパイルしてインストールする必要があります。 デバイス、Ubuntu 9.04、ポピーがあります。
解決策
以下の解決策は、段階的なガイドではありません。 一般的な組み立てプロセスと、私が遭遇した困難についてお話したいと思います。 さらに、この投稿で必要なすべてのリンクを収集し、私の仕事の結果をいくつかレイアウトしようとしました。
コンポーネント
Saurik (別名Jay Freeman)は、Cydia、Veency、その他多くのiPhoneチップの開発者であり、非常に優秀な人物のようです。
SpringBoardは、基本的にiPhoneのホーム画面を描画するライブラリです。 デバイスから始まります。
ツールチェーン-iPhoneアプリケーションをコンパイルするためのツールのセット。 すぐに構築します。
libvncserverはオープンソースのVNCサーバーです。 iPhone用にクロスコンパイルします。
Veency -iPhone用のVNCサーバー。 構築します。 塩は
Tweak.mm
ファイルにありますが、残りは私たちにとって興味深いものではありません。
MobileSubstrateは
saurikによって書かれたライブラリです。 特に、バックグラウンドでアプリケーションを実行できます。 次の機能に関心があります。ライブラリ(
dylib
)を
/Library/MobileSubstrate/DynamicLibraries
に配置すると、
SpringBoard
起動時にロードされます。 私たちの経験の産物は
Veency.dylib
、これは
Veency.dylib
にあります。
ステップ1:Ubuntuのツールチェーン
ツールチェーンの構築は、思ったほど難しくないことがわかりました。 2.2.1のツールチェーンを構築します。 彼女は3.0用のアプリケーションをコンパイルできるようになります。
そのようなプロジェクト、
iphonedevonlinuxがあります。 実際、これは1つのスクリプト、.
./toolchain.sh
であり、ほぼすべての必要なファイルをダウンロードし、フォルダー内のすべてを分散させ、ツールチェーンをコンパイルします。
このスクリプトを機能させるために、iPhone ipswバージョン2.2.1とXcode SDK dmgバージョン2.2.1をダウンロードしました。 さらに、
developer.apple.comのアカウントが必要です(無料です)。 Ubuntuでは、
gobjc
と他のいくつかの開発ユーティリティが必要です。 すべてが標準リポジトリからインストールされます。
したがって、
sudo ./toolchain.sh all
。
私にとっては初めてではありませんでした。 私は次のトラブルに遭遇しました:
1. *** buffer overflow detected ***
:
apt-get reinstall gcc
決定しました
toolchain/src/cctools/otool/print_objc.c
コンパイル
apt-get install libc6
:
apt-get install libc6
決定しました
3.ランダムエラー:gcc 4.3.3をgcc 4.2.4に変更。 それから私はそれを元に戻し、それは働いた。 その結果、gcc 4.3.3がコンパイルされました。
すべての準備が完了すると、スクリプトは
"All stages completed. The toolchain is ready."
ステップ2:VNCサーバー
ここではすべてが簡単です。
libvncserverソースをダウンロードして、クロスコンパイルする必要があります。 実際には、.
./configure --host=arm-apple-darwin9
、そして通常の
make
です。 私を悩ませた唯一のことは、メインMakefileであらゆる種類の左利きのプロジェクト(
libvncclinet
、
examples
など)がビルドされていたことでした。 私は手でそれらを取り除いた。
自分でビルドするのが
面倒な場合は、ライブラリとヘッダーを
ifolderに投稿し
ました 。
すべての準備が整うと、
libvncserver/.lib/libvncserver.dylib
が表示されます。
ステップ3:Veency Makefile
もちろん、Saurikはメイクファイルを投稿しました。 しかし、彼はビルドフレームワークのこの部分を持っているため、すべてが1つのファイルに含まれているMakefileを書く方が簡単に思えました。 特に問題はありませんでした。
これが私の仕事の結果です:
Makefile on pastie 。
ステップ4:MobileSubstrate
ヘッダーとライブラリが必要です。
リポジトリからコンパイルするか、すでに
アセンブルされたアーカイブをダウンロードでき
ます 。 私は2番目をしました。
ステップ5:ヘッダーとフレームワーク
Veencyビルドにはヘッダーとフレームワークが必要です。 インポートから明らかなものはどれですか。
ヘッダー。 犬がここに埋葬されています。 ヘダーは簡単に見つけることができません。 何かが保存される
秘密のリポジトリがあり
ます 。 Objective-Cヘッダーを
ダンプするための
class-dump-xプログラムがあります。 逆コンパイラ(
arm-apple-darwin9-otool
)がありますが、これに到達するべきではありません。
GraphicsServices.h
クラスに注意を払いたいと思います。そのため、正しいヘッダーを見つけるのが最も難しいことが判明しました(シークレットリポジトリにあります)。
フレームワーク ここではすべてが簡単です。 リンク段階で一部の文字が欠落している場合、iPhone SDK(
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks/
からフレームワークを安全にコピーできます)、またはデバイスからの
scp
。 唯一の難点は、3.0と2.2.1のライブラリを混在させないことです。
ステップ6:作成
コンパイル段階で破損した場合は、不足しているグレーダーを指定する必要があります。 それらを抽出し、包含フォルダー(Makefileの
SB_PATH
に追加する必要があります。
リンク段階で破損する場合は、フレームワークを
$(SYS_PATH)/System/Library
(Makefileの
$(SYS_PATH)/System/Library
に追加する必要があります。
結果:
Veency.dylib
ステップ7:署名
アセンブルされたライブラリに署名する必要があります。 これには
ldid
ユーティリティがあります。 デスクトップ用とiPhone用です。 彼女は私のデスクトップでは動作しませんでした。 iPhoneでは、Cydiaからインストールされます。 その後は簡単です。デバイスで
Veency.dylib
を
scp
し、
ldid -S Veency.dylib
と入力する必要があります。
結果:
Veency.dylib
による
Veency.dylib
ステップ8:インストール
そしてそれは非常に簡単です:
Veency.dylib
を
/Library/MobileSubstrate/DynamicLibraries
ます。 これは、
install
ターゲットを使用してMakefileで自動化されます(IP変数を設定するだけです)。
結果:あなたはハッカーです:)
この投稿について
私がこれをすべて書いた理由を知りたいですか? 最初に、いくつかの知識を共有します。 次に、Habrをサポートします。 最近、HabrはUFOがすでに月面に存在するものではないという事実、AIの作成は些細なことであるという事実について多くの記事があります。 あらゆる種類の怠idleな考え、無意味な質問、他のリソースからのニュースへのリンクなど。だから私はどういうわけかこれに抵抗したい。
読者、書いてください。あなたはITについて何かを持っています。 狭いトピックにしましょう。アイデアの頂点だけでも、その方法はユニットにとって興味深いものです。 しかし、Habrにはまだケーキがあります!