どのようにそのコードは安全ですか。
-
19-09-2019 - |
質問
私はプログラマを交換してください。私は約5年以上の経験プログラミングの異なる種類の言語に対応しています。いつものコード速度、最適なメモリを使用する私のコードは、良いコーディングスタイルです。いとは思わないかの確保に自分のコードです。くらいなので分解自分のコードを見ているハッカー。それぞれの割れやすいもので私のコードについて教えてください。やっとです!ことができるという保管
- シリアル番号を文字列として
- 暗号化-復号化のコードとして
ですからもし誰かがそれを最小限の知識のアセンブラ言できるだけ簡単なdissembler後の10-20分のデバッグに自分のコードを破!!!もできる作業が簡素化され、開発のエグゼクメモ帳か!:-)
う思いは次の通りである:
- がんばるような安全情報のでしょうか。
- 何の共通の戦略を確保コードについて教えてください。
解決
まず最初は、コードが何かできることが、逆転は最終的にそれを複製する方法を見つけるだろうので、あなたが任意の保護スキームを割れから決定逆転を防ぐことは決してないだろうということです。あなたが信頼性の高い保護の任意の並べ替えを達成することができます唯一の方法は、出荷されたプログラムは、ダムクライアントよりも何もなかったと逆転がにアクセスできないいくつかのサーバー上のソフトウェアの矛先を持つことです。
道のうちそれと、あなたは確かにのあなたの保護を破る逆転になるためには、の困難にすることができます。 難読化には、これを達成するための最初のステップの一種です。私は難読化ツールを使用して経験がないが、私はあなたがSOにいくつかのためにいくつかの提案を見つけることができると確信しています。また、あなたは、単に完全な最適化でコードをコンパイルすると、すべてのデバッグシンボルを除去することは、あなたに難読化のまともな量を取得し、C / C ++のような低レベルの言語を使用している場合。
I読んこの記事では、数年前にを、私はまだだと思いますそれの技術は、今日をホールドアップ。それは彼らが著作権侵害を防ぐために使用される技術の集合について話スパイロと呼ばれるビデオゲームの開発者の一人です。彼らはそれが3ヶ月のひびの入ったバージョンはかなり印象的である、利用可能になったことをリリース後までではなかったと主張ます。
他のヒント
、そして、あなたが取ることができる多くの道があります。ソフトウェアのすべてのの部分がひび割れすることができます(難読化、ライセンスコード、特定のPCにソフトウェアを結合、ハードウェア/ドングル保護、など)が1であるが、それはをその念頭に価値があるコードのセキュリティがきつく作ります十分に有能な誰かが気にすることができます。
別のアプローチは、あなたのソフトウェアの価格モデルを検討することです。あなたは$ 1000のコピーを請求した場合、それを割れで行くを持っているために誰かのための大きな動機が存在します。あなたはたったの$ 5充電した場合は、なぜ誰もがそれをクラックする気にする必要がありますか?
だから、必要とされるのはバランスです。最も基本的な保護は、カジュアルコピーを作成する普通の人々を停止します。それを越えて、簡単なテクニック(難読化とライセンスコード)と賢明な価格戦略は、ひび割れの気にそれは価値がないことによって、湾で最も-だろうクラッカーを開催します。その後、あなたが実装するのに手間/コストがかかるこれまで以上に洗練された技術(ソフトウェアを実行するために存在することが必要ドングル/ CDの、唯一のオンラインライセンスシステムにログオンした後、ソフトウェアを実行することができるという)に取得を開始しますそして、かなり迷惑な本物の顧客のリスクを高める(彼らは半減期を買ったときにイライラ誰もが持ってどのように覚えているが、それは彼らがゲームをプレイすることはできないだろう?) - あなたが人気の主流製品(保護するために、すなわち巨大な収入の流れを)持っていない限り、おそらく多くの努力に行く多くのポイントがありません。
は、Webアプリケーション作成します。
あなたが話しているのセキュアどのような? あなたもあなたのユーザーデータを守っている観点から、セキュア?もしそうなら、いくつかの実際の暗号化を検討し、データを暗号化するための既存ののライブラリを利用しています。 Win32 APIのは、このためにかなり良いです。
しかし、あなたはあなたのアプリケーションを盗むからクラッカーを停止する話をしている場合は?そこに多くの方法があるが、ちょうどあきらめます。彼らはそれらを停止していない、クラッカーを遅くます。
バイナリコード内の文字列を非表示にする方法を見てください?質問
まず、あなたのコードは、そのようなものが無意味であるとして安全である、に対して安全であるべきかを定義する必要があります。
あなたがそう言っていないのに、リバースエンジニアリング、払わずにライセンスコードを生成するユーザ気になるようです。この難しいあなたはさまざまな方法であなたのコードやキー情報を難読化できるようにします。コードをステップ実行し、明確に情報を見てからリバースエンジニアを防ぐために、困難デバッガを利用する存在エリアも技術。 しかし、これが唯一の可能リバースエンジニアリングやや難しく、不可能ではありません。
別の一般的なセキュリティ上の脅威は、望ましくないコードの実行は、バッファオーバーフローを介して、例えば、である。
私はわからないんだけど、あなたはこれを試みることができる...これを行うための簡単なテクニックは、あなたがそれを必要とするとき、バックすべてのコードとのXORを介してXORすることです...しかし、これはアセンブリの生得的な知識を必要とします。
void (*encryptionFunctn)(void);
void hideEncryptnFunctn(void)
{
volatile char * i;
while(*i!=0xC0) // 0xC0 is the opcode for ret
{
*i++^=0x45; // or any other code
}
}
あなたのコードを見て、ハッカーに対して防ぐには、難読化ツールを使用する必要があります。難読化ツールは、それが非常に困難難読化コードの意味を理解するために作る様々な技術を使用します。使用されているいくつかの技術は、文字列の暗号化、シンボルの名前変更、制御フローの難読化などの暗号化難読化ツールnoreferrer">