0

プログラムの一部の検証(ライセンスチェックなど)を無効にするために使用する場合getenv()、ハッカーは関連する環境変数を簡単に発見できます(straceまたはその他を使用しますか?)

コードの例:

if (! getenv("my_secret_env_variable")) checkLicense();

(一方、特定のファイルの存在を確認した場合、ハッカーはstraceですぐにそのファイルを確認します)

4

5 に答える 5

4

ソフトウェア保護について少し広い視野を提供するために、既存の回答に追加させてください。

ハッカーはただ使うstraceのではなく、ツール チェストにあるあらゆるツールを使用しますが、複雑さが増すにつれて、おそらくほとんどの場合と同じくらい単純なものから始めます。strings私が知っているほとんどのハッカーは本質的に怠け者なので、抵抗の少ない道を選びます。(注意:ハッカーとは、クラッカーではなく、技術的に非常に熟練した人を意味します。クラッカーは、多くの場合、同じスキル セットを持っていますが、異なる倫理セットを持っています)。

一般的に、リバース エンジニアの観点から言えば、ほぼすべてのものを「クラック」または回避することができます。問題は、攻撃者がどれだけの時間および/または決意を持っているかです。一部の学生は笑いのためにこれを行うかもしれませんが、一部の「リリースグループ」は「シーン」内での名声のためにこれを行うことを考慮してください。

ハードウェアドングルを考えてみましょう例えば。ほとんどのソフトウェア作成者/企業は、ドングルのライセンスを取得する際に、魔法のようにセキュリティを "購入" していると考えています。ただし、彼らがシステムの実装に注意を払っていない場合は、あなたの試みと同じくらい簡単に回避できます。十分に注意している場合でも、ドングルの情報を抽出するにはある程度のスキルが必要ですが、ドングルをエミュレートすることは可能です。したがって、一部のドングル (その事実を隠しません) は「スマート」です。つまり、CPU や本格的な組み込みシステムが含まれていることを意味します。ソフトウェア製品の重要な部分がドングルで実行され、ドングルに入るすべてが入力であり、ドングルから出るすべてが出力である場合、それはかなり良い保護になります. ただし、ほとんどの場合、正直な顧客と攻撃者を同じように苛立たせます。

または、別の例として暗号化を考えてみましょう。多くの開発者は、公開鍵と秘密鍵の概念を理解していないようで、秘密鍵をコード内に「隠す」ことで何らかの形で安全になると考えています。そうではありません。コードにはアルゴリズムと秘密鍵が含まれていますが、これは攻撃者にとってどれほど便利でしょうか?

これらのほとんどの場合の一般的な問題は、一方ではユーザーを信頼していますが (ユーザーに販売するため)、他方ではユーザーを信頼していないことです (何らかの方法でソフトウェアを保護しようとするため)。このように見ると、それが実際にどれほど無駄であるかがわかります。ほとんどの場合、正直な顧客を不満に思いますが、攻撃者を少し遅らせるだけです (ソフトウェア保護はバイナリです。保護を提供するか、提供しないか、つまり、既にクラックされています)。

代わりに、IDA Pro のメーカーがたどった道を考えてみてください。ユーザーがバイナリを取得する前に、すべてのバイナリに透かしを入れます。その後、これらのバイナリが漏洩した場合は、法的措置を講じることができます。そして、法的措置を考慮しなくても、製品を公に漏らした人々を恥じる可能性があります(そして恥をかかせたことがあります). また、リークの責任がある場合、ソフトウェアのアップグレードを販売することはなく、IDA のメーカーは雇用主と取引を行うことはありません。これは、IDA のコピーを安全に保管するためのかなりのインセンティブです。さて、IDA はややニッチな製品ですが、それでもアプローチは根本的に異なり、ソフトウェアを保護する従来の試みと同じ問題はありません。

もう 1 つの選択肢は、もちろん、ソフトウェアではなくサービスを提供することです。したがって、ソフトウェアがサーバーに送信するトークンをユーザーに与えることができます。次に、サーバーは、トークン (暗号化されたメッセージであると想定) のデコードと有効性の確認に基づいて、更新 (または任意のサービス) を提供します。この場合、ユーザーはトークンを受け取るだけで、それをデコードするための秘密鍵を受け取ることはありません。一方、サーバーはトークンを検証する必要があります。プロダクト キーなどと呼んでも、想像できる方法はたくさんあります。重要なのは、ユーザーを信頼すると同時に不信感を抱くという矛盾に陥らないことです。ユーザーを信用しないだけで、たとえば、トークンが悪用された場合に彼女のトークンをブラックリストに登録できます。

于 2012-07-06T15:11:04.297 に答える
2

はい。ハードコードされた文字列は、コンパイルされたバイナリ内で簡単に見つけることができます。ライブラリの呼び出しも見やすくなります。バイナリ内の文字列を別のものに変更することも可能です。

于 2012-07-06T14:44:53.010 に答える
2

パラメータを表示する機能LD_PRELOADも受信できますgetenv

于 2012-07-06T14:51:20.107 に答える
1

ハッカーは strace ですぐにそれを見るでしょう- あなたも見てみるべきでしょうltraceか?

変数名を隠すことはできないかもしれませんが、値を必要としないのはなぜでしょうか? 特に、有効な値 ( ) に整数を使用できます。これatoiは、コード内で見つけるのがはるかに難しいためです。また、int と単一の文字の組み合わせでさえも使用できます。ただし、環境ブロックは、特にコア ダンプで見つけやすいメモリの一部であることを忘れないでください。

于 2012-07-06T15:02:22.870 に答える
1

はい - 簡単です。文字列を使用して、何を試すかを見つけます。

于 2012-07-06T14:43:09.220 に答える