2011-01-22 1 views
1

openfeintデータとスコアを扱うクラスを扱う私のiPhoneゲームで、私のオブジェクトクラスを暗号化したいと思います。目的のCクラスを暗号化する方法

このデータを暗号化して、別のレベルのセキュリティとして動作させる方法があると聞いています。少なくとも、それを分解し、脱獄されたiPhoneでスコアを鍛造してからリーダーボードに迷惑をかけないようにしてください。

これはどのように行われますか。このデータを保護し、データを偽装しようとする者を阻止する良い方法は何ですか?

おかげ

答えて

2

本当にコンパイルされたコードを暗号化するのは、おそらくそれが価値があるよりも面倒です。解読されるコードをダイナミックライブラリに分離し、メモリ内で解読した後にライブラリを手動でロードする必要があります。ダイナミックライブラリ、および実行時にコードを変更するために使用するその他の方法は、iOSと一緒に使用された場合、Appleによって批判されます。

Objective-Cを使用すると、基本的にヘッダーをコードに組み込むことができます。これにより、アプリケーションで掘り起こすのがずっと簡単になります。あなたがCで行うことができるものは、シンボルが剥がれる可能性がありますが、読むのが少し難しいでしょう。また、#defineを使用してクラスとメソッド名を難読化することもできます。これは暗号化に近いところではありませんが、実装がはるかに容易で、不具合のあるバグが導入される可能性は低いです。

#define MyNicelyNamedClass somegarblegarble 
#define myNicelyNamedMethod othergarblegarble 

@interface MyNicelyNamedClass 

-(id) myNicelyNamedMethod; 

@end 

これは、開発者がObjective-Cコードを他者にあまり分かりにくくするための比較的痛みを伴わない方法です。これは、JavaScriptの難読化と同じくらい効果的です。つまり、多くのカジュアル攻撃者を脅かすことになるもう少し小さなハードルです。

ストレートゴミではなく有意義だが誤解を招く名前を選ぶと、間違ったコードを掘り下げて時間を浪費することさえあります。あなたが知っていることではありませんが、それは満足のいく考えです。

+0

メソッドに引数がある場合、これはどのように機能しますか? – Pripyat

+2

...またはKVO&KVCを頻繁に使用する場合は、 ...またはInterface Builderを使用していますか? ...または他のイントロスペクションの重いメカニズムを使用している場合は? ...クラッシュログの難読化を元に戻すことを忘れないでください。 – bbum

1

暗号化クラスは、任意のDRMまたは同様のセキュリティシステムが持っている「キーでロックを出荷する」問題を被ります。

あなたが探しているのは、自己修正コードです。このコードは、後でアプリケーションによって読み込まれたり解読されたり、バイナリにマシンコードとして存在したり、アプリケーションが持つキーによって実行時に変更されます。

非常に微妙で興味深いバグを作成し、あなたのメソッドがバイパスされることに注意してください。