逆コンパイルを避けるために C ベースのバイナリを難読化する

StackOverflow https://stackoverflow.com/questions/2273610

  •  20-09-2019
  •  | 
  •  

質問

逆コンパイルを防ぐために C ベースの実行可能ファイルまたはライブラリを難読化する方法はありますか?

役に立ちましたか?

解決

はありません。あなたはそれがよりの困難の逆コンパイルすることができますが、のそれを防ぐことはできませんすることができます。私のアドバイスは、あなたの時間を無駄に停止し、代わりに絶えず向上機能を備えた素晴らしい製品を提供することに集中することです。

そして、人々はそれを支払うことをいとわないだろう。

あなたの主な問題は、あなたのコード未解読可能にする唯一の方法は、それが非実行可能にするということです。 PCにロードすることができるものはひび割れすることができます。楽しい、利益や名声のためのリバースエンジニアリングを行う人々がいる、一般的に<全角>非常にのそれで良いと本当にあなたがそれらを試してみて、停止するために行うもので段階的に少なくともビットではありません。

彼らはあなたのソフトウェアが購入する価値があることを広く世界を説得する:-)はるかに良い、それを難読化し、機会として海賊行為を見ています仕事よりもあなたのコードを解読する作業がはるかに容易にするツールへのアクセス権を持っていますおそらく本物のユーザーに「泥棒」を変換します。

たとえば、見つけるの理由の彼らはあなたのソフトウェアのために払って、それを修正しようとしていません。あなたは、人々の100%を変換することは決してないだろう、いくつかはちょうどそれの楽しみのためにあなたのコードを海賊します。

(ファンプラスの理由で接続CWF + RTBに関する techdirt の上で実行されている以上の一連の記事をご覧ください買う)。私はそこに提起ポイントの多くは、ソフトウェア業界に適用できることがわかりました。

他のヒント

The easy way:購入パッカー/cryptor/obfuscator製品です。一部のもとに使用し、ゲームがいません。Googleによる流行語のように"コピーでは書かれています。

高速道:パック UPX そのmangleのヘッダのどこかで、まだロードされるメモリの実行が、upxユーティリティが失敗し、エラーをお試し版である。95%まれる場合は、upx明失敗します。

っているという:書き独自のパッカー.

あり忘れてしまった:

簡単:だけに利用できます。なん-なんでまだリバースエンジニアリングコード.の自分の努力だまだ限りどのように多くの逆です。

完全な最適化してコンパイルします。

「難読化の実行可能ファイル」は意味がありません。ハードウェアは、それを実行することが可能で、コードを「理解」できなければならない、そしてそれは、ハードウェアは、リバースエンジニアリング、人間はそれを理解することができ、それを理解することができます。あなたが行うことができますほとんどはずっとによって、それを理解する方が面倒、おそらくない作り、そしてコストになります。

それは難しいようにするには?承知しました。それをしないでください。

これを防ぐには?いいえ、あなたのバイナリを実行するために起こっている任意のシステムは、あなたが思い付くものは何でもスキーム復号化するためのソフトウェアが必要になります。そして、彼らはそれを逆コンパイルして、あなたの隠されたバイナリが解釈取得方法を確認できるようになります。

コンパイルされたバイナリについて話しても、できることはあまりないと思います (おそらく、適用するだけでしょう) UPX または関連ツール)、これは元に戻すことができるため、あまり意味がありません。

新しいコードの作成について話している場合は、次のことを試してください。 自己変更 C コード これはおそらくアプリケーションを再設計する最も難しい方法でしょう。

最適化コンパイラでCコードをコンパイルすることは不可能であってもリモートで似ている元のソースコードか何かを復元することができます。それははるかに安全このごろ人気があり、Javaや.NETの難読化ツールのいずれかよりもです。あなたはそれを小さくすると、リリース前に任意のシンボル名を非表示にする場合実行可能ファイルを取り除くようにしてください。しかし、これはまた、デバッグ(のアプリケーションのクラッシュ)を行うことを予告ほとんど不可能ます。

誰かが本当にあなたのソフトウェアをハックしたい場合は、

そうであっても、彼はおそらくローダソフトウェアまたは他の策略で、アセンブリレベルでそうしないだろう - に関係なく、あなたがしようとすると、彼を防ぐために何をすべきか。多くの企業が試みたが、まだ誰も成功していません。彼らは、アプリケーションをクラッシュさせたりしてもWindowsの内蔵のデバッガをクラッシュすることがあり、このようなハックを使用すると、唯一のエンドユーザーを失望させます。

あなたの代わりに、プログラムを向上する必要がありながら、難読化について考えるあなたの時間を無駄に終了します。

Decompilation(なGotos)と難読化演習(Flowtables 論文(Indistinguishability難読化)が有効になっています研究領域ではないソリューション-ツールのみ、技術や専門知識のやりとりをする満喫コードする不浸透性にdecomplilation、ウェブアプリに敏感なコードサーバー側となります。シンプルだがにこだわったモデルの人がバイナリ)にあり、賢明な判断をしたいとセキュリティーとパフォーマンス難読化によるものであり、コストもない。一部のオプション

  • 使用パッカー以外のUPX(UPXが設置され多くのlinux distros).コストパフォーマンスが低く、ほとんどの人は技能を身につけていないために手動でドバイナリのための静的解析.が経験したreversersの開梱は軽微であり
  • チェックTigress、多様化するvirtualizer/obfuscatorと豊富な機能のためのC言語のソース-ソース。より良い性能、信頼の変換、制御フローフラット化、機能の統合/分割、文字エンコード
  • いつもの保護、チェックアウトTigressの大変仮想化、JITingなどが、私はかなりあることよりも、ユーザーが通知を遅くのご利用の場合これらの小さなものに過ぎません。

なめBarak et alの独創性に富んだのは不可能ブラックボックス。のために不可能であることを論証しのブラックボックスobfuscatorsは不可能であることを多くの実践的なやりがいのあるobfuscations.(ブラックボックス難読化され、内部のプログラムを完全に理解でもない、判定すると燃料が満タンになります。ある人々も製品を購入であれば良いです。

それから商業的利益があるかどう

なぜコードを難読化?生産バイナリコードを難読化されたとして、グリッチを....あなたに難しく、それを作る、私見立ち往生している - 正直に言うと、商業用のコードが十分に最適化し、難読化、および作品は、すべての恥ずかしい事の母親が起こった後、されているとグリッチが起こっおよび複製することは困難であるデバッグが、それはバグリストに立ち往生されます永遠に...

たとえば、スタックトレースを見つけようと、あなたはそこで起こっているWTFアウト動作するようにディスアセンブルコード、スパゲッティループの無限連を把握しようと、これまで、より多くの毛を失うことになってしまいます。要するに、しないでください!

あなたはそれを捨ててはいけない...あなたはメモリダンプを読み、難読化されたコードから、それを動作するように華麗なアセンブラの専門家である必要はありどちらか...グリッチをデバッグしようとする際にお金を失うことになってしまいます離れて、ただ

...確かに、リバースエンジニアリングによってコードをそれを破るために彼らの手に時間を持っている人の多くがあります...あなたの美しい製品の作業を取得し、それを販売

それを破っての秘密は原則に従っている - の のリリース頻繁に、リリースが多いを使用すると、そのように、最新かつ最高の機能は次のようになり、頻繁にリリースするよう、改善を行いますより最新のそれはそれを分解して動作するようにクラッカーのにかかる時間! Linuxのソースコードを見て、あなたが心の中で、原則としてその、あなたが勝っているはるかに速いペースでより多くの機能を備えた新バージョンをリリースすることで続けるならば、パッチが...それがリリースされる、来る!

物事が少しより困難にする1つの方法は、それらをパックすることです。 UPX を箱から出して逆コンパイルすることが難しくなりますどのあなたのバイナリをパックします。技術的には、解凍してからコンパイルすることは可能だが、それはバーを少し上げます。あなたはバニラ、ユーザ・オペレーティング・システム上で実行していると仮定すると、あなたは厄介なトリックを使用せずに逆コンパイルを防ぐために行うことができます全体の多くはありません。

あなたが本当にそれをまぜこぜにしたい場合は、

あなたはそれを行うには別のプログラムが必要です。開発者として、あなたはきれいな、そして最も読みやすい形で自分のコードを記述します。コンパイル後は、あなたは難読化を行うために別のアプリケーションを実行します。あなたはおよそ$ 100Kのためにこのようなアプリケーションを購入することができます。

あなたの意図は、おそらく動作するリバースエンジニアリングされてからコードを停止する場合。あなたの意図は、セキュリティを割れから誰かを停止することであれば、一人で難読化が決定した攻撃を停止することはありません。いくつかの点で、彼らはそれを見つけるために、またそれを回避するために、コードを理解する必要はありませんはい/いいえ決定はありません。

難読化コードを生成するように改変

小型Cコンパイラ: http://blogs.conus.info/node/58

scroll top