iPhoneアプリの開発でxcodeを使う方は沢山いると思いますが、
会社での取引先の売り方によって、ソースはそのまま納品しなければならなかったり、
その技術を見られるのが嫌だったりします。
そこで、現状のソースをアセンブラコードに置き換えて対応しました。
アセンブラコードへの置き換え方を一通りまとめておきます。
1.プロジェクトの用意
今回は、真っ白なデータを新しく作りました。プロジェクト名を「helloProject」としています。既存プロジェクトでやる場合は、コピーを取ってやりましょう。
※ビルド&実行先をDeviceではなく、Simulatorとしての説明となります。
2.アセンブラコードへ変換
拡張子が「.m」の物がソースコードです。アセンブラコードに変換できるのはどうやらこのファイルだけのようです。
「.m」ファイルを選択して右クリックもしくは、CTRL+クリック、もしくは上のメニューのビルドを選択して「アセンブラコードの表示」を選択します。
3.アセンブラコードの生成
すると、以下のようなアセンブラコードが表示されます。今まで、C言語で書かれていたプログラムがアセンブラコードとなりました。見ても訳わかりません。コメントも残って無いです。
4.プロジェクトへ追加
「helloProject/build/helloProject.build/Debug-iphonesimulator/helloProject.build/Objects-normal/i386/」ってフォルダの中に「~~~.s」ファイルが生成されています。このファイルをプロジェクト内にドロップしましょう。
5.追加する際の処理
ドロップし、プロジェクトに追加しようとするとウィンドウが現れます。「デスティネーショングループのフォルダに項目をコピーする(必要な場合)」にチェックを入れて「追加」を押します。
6.要らないファイルの削除
もともとプロジェクト内にあった「.m」ファイルは要らなくなったので、プロジェクトから外します。ゴミ箱には入れず、「参照を削除」を選択します。ゴミ箱を選択して、.mファイルをPC内から消してしまうと、再度修正が掛けれない状態となりますのでご注意を。
[追記].hファイルや.xibファイルが無くても再ビルド可能でした。なので、完全にアセンブラソースのみで大丈夫そうです!
※.xibファイルは必要でした
7.難読化プロジェクト
最終的にこのようなプロジェクト構成となります。何が原因なのかよくわかりませんが、実際「.m」ファイルを変換できないものもありました。その場合「.s」と「.m」が混ざった形で出来てしまいます。
8.難読化実行する前にクリーニング
ビルド内のデータをクリーニングします。その後、ビルド&実行を選択しましょう。
更にXcodeのメニューから「Xcode>キャッシュを空にする」を選択しておきましょう。
9.実行
特にエラーが無ければこのようにアセンブラコードでも同様の実行結果を得られます。
10.デバイスへの転送方法
このままデバイスに転送しようとしてもエラーとなります。デバイスに転送して実行したい場合は、アセンブラコードに変換する前に、対象を「デバイス」として選択する必要があります。その際、「.s」ファイルはまた作り直しが必要となります。初めにデバイスを選択して、(2)からの手順を繰り返してください。
「.s」が作られるフォルダも変わりますので、一度、クリーニングするか、build内のフォルダを削除してから「アセンブラコードの表示」を選択すると良いです
まとめ
- アセンブラコードに変換すると、通常のObjective-Cより読み辛い
- アセンブラコードにしても同様の実行結果が得られる
- 変換できてもコピー出来ないソースや、置き換えるとエラーになってしまうソースが存在する
- 変換する前の「.m」ファイルは保管しておく必要あり
結局「.h」は変換していないのでソースを探られる可能性は大いにある- 「.h」ファイルと「.xil」ファイルは削除しても大丈夫でした。
- シミュレータやデバイスなど、実行先に合せて変える必要あり
- ソースを相手に渡して、直接マックからiPhoneなどにアプリを入れ込みたい場合で、尚且つソースをそのまま渡したくない場合に利用できる。
- 「.m」ファイルをフォルダから外して渡さないと、結局ソースごと渡してるのと同じことになってしまうのでご注意
※「.s」へ変換してもまた「.m」に変換出来る方法があるかも知れません
※しっかりとした難読化の方法が分かる方はコメントいただけると有難いです
※人力検索はてなで質問しても微妙な答えでしたが貼っておきます。question:1295575155
コメントを残す