2017-08-26 7 views
0

アプリケーションのコードフローを推定するための周知の技術があるのだろうかと思います。私の場合は、私がプロジェクト用に書いた少しのVMで実行される私自身のバイトコードでそれらを使用したいと思います。私は、このテクニックについて何かを学ぶために私のバイトコードの流れを逸らすことにかなり興味があります。私はinetを通して検索を行い、それについての情報はほとんどないだろう。コードフローを疎外するテクニック

乾杯。

+1

質問は非常に具体的で、私はなぜそれが保留になったのか分かりません。もちろん、常にレベルの問題です(何かが十分な労力で壊れる可能性があります)が、あなたのコードが自分のVMを使用しているなら、あなたはすでにかなり安全です。物事をより複雑にするための1つのアイデアは、あなたの言語で別のVMを実装し、VMで実行されるこのVMによってクリティカルな部分が実行されるようにすることです。私は通訳がついていたので、その前にそのようなことをやっていましたが、ハードウェアのスナップショット(Appleのコピープロテクションに関するものです)で敗北しました。 – 6502

答えて

1

私はリバースエンジニアリングの試行を中断してゲームを保護するために、Flash ActionScriptコードを難読化するために(数年前)プロジェクトを担当しました。誰かがゲームをロードするたびに、私たちはフラッシュを難読化するツールを作ります。

実用的な難読化はVMモデルで行われました。これは、VMの特定のバイトコードに基づいて定義する必要がある次の単純なパターンに基づいています。私たちのための難しい部分は、実際にFlash形式のリーダー/ライターを作成してから、実際のコードバイトをパラメータを持つバイトコードニーモニックに変換することでした。しかし、いったんそこにいれば、それはかなり簡単です。

具体的な手順を探してから、別の手順の出現に置き換えます。例えば。いくつかの標準的なコードは次のようになります。あなたはjump to <end of code>とそのラインを交換し、コードの最後にあなたがjump_if_non_zero label_01を追加jump_if_non_zero <label>言うのコード行を見つけたら

load_to_stack 100 
:label_01 
do_something 
get_from_stack 
decrement 
put_to_stack 
jump_if_non_zero label_01 

次にあなたが行うことができます一つのことです。これは、コードの終わりに複数の条件付きジャンプを持ち、他の場所で直線ジャンプします。

他にもadd 100add 99; incrementと置き換えて、他の数学的演算と同様に行うことができます。

条件付きジャンプを見つけて条件を逆転させ、ファイルの最後にジャンプし(上記のトリックに続いて)、次の命令として無条件で必要なジャンプを配置することができます。混乱コード上記のような

jump_if_zero :new_label_at_end 
jump :forward 
:additional_label 
do_something 
:forward 
[.....] 
:new_label_at_end 
jump :additional_label 

トリックへ

​​

の変更のようなものは、大きな時間を逆コンパイラ。そして、あなたはより創造的になることができます。あなたのVMの命令の種類は多岐にわたっていますし、あなたの難読化者を複雑にして、結果として生じるコードが追加の操作のため少し遅くなるかもしれません。

これが役に立ちます。

関連する問題