iPhoneのVeency Compilation Experience

まえがき



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



ファイルにありますが、残りは私たちにとって興味深いものではありません。



MobileSubstratesaurikによって書かれたライブラリです。 特に、バックグラウンドでアプリケーションを実行できます。 次の機能に関心があります。ライブラリ( 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にはまだケーキがあります!



All Articles